WebAuthnManageController.php 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. <?php
  2. namespace App\Http\Controllers\Auth;
  3. use App\Facades\Settings;
  4. use App\Http\Controllers\Controller;
  5. use Illuminate\Http\Request;
  6. use App\Http\Requests\WebauthnRenameRequest;
  7. use DarkGhostHunter\Larapass\Eloquent\WebAuthnCredential;
  8. class WebAuthnManageController extends Controller
  9. {
  10. /*
  11. |--------------------------------------------------------------------------
  12. | WebAuthn Manage Controller
  13. |--------------------------------------------------------------------------
  14. |
  15. |
  16. */
  17. /**
  18. * Create a new controller instance.
  19. */
  20. public function __construct()
  21. {
  22. }
  23. /**
  24. * List all WebAuthn registered credentials
  25. */
  26. public function index(Request $request)
  27. {
  28. $user = $request->user();
  29. $allUserCredentials = $user->webAuthnCredentials()
  30. ->enabled()
  31. ->get()
  32. ->all();
  33. return response()->json($allUserCredentials, 200);
  34. }
  35. /**
  36. * Rename a WebAuthn device
  37. *
  38. * @param \App\Http\Requests\WebauthnRenameRequest $request
  39. * @return \Illuminate\Http\JsonResponse
  40. */
  41. public function rename(WebauthnRenameRequest $request, string $credential)
  42. {
  43. $validated = $request->validated();
  44. $webAuthnCredential = WebAuthnCredential::where('id', $credential)->firstOrFail();
  45. $webAuthnCredential->name = $validated['name'];
  46. $webAuthnCredential->save();
  47. return response()->json([
  48. 'name' => $webAuthnCredential->name,
  49. ], 200);
  50. }
  51. /**
  52. * Remove the specified credential from storage.
  53. *
  54. * @param \Illuminate\Http\Request $request
  55. * @param string|array $credential
  56. *
  57. * @return \Illuminate\Http\JsonResponse
  58. */
  59. public function delete(Request $request, $credential)
  60. {
  61. $user = $request->user();
  62. $user->removeCredential($credential);
  63. // Webauthn user options should be reset to prevent impossible login
  64. // See #110
  65. if (blank($user->allCredentialDescriptors())) {
  66. Settings::delete('useWebauthnAsDefault');
  67. Settings::delete('useWebauthnOnly');
  68. }
  69. return response()->json(null, 204);
  70. }
  71. }