WebAuthnManageController.php 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  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. * @return \Illuminate\Http\JsonResponse
  27. */
  28. public function index(Request $request)
  29. {
  30. $user = $request->user();
  31. $allUserCredentials = $user->webAuthnCredentials()
  32. ->enabled()
  33. ->get()
  34. ->all();
  35. return response()->json($allUserCredentials, 200);
  36. }
  37. /**
  38. * Rename a WebAuthn device
  39. *
  40. * @param \App\Http\Requests\WebauthnRenameRequest $request
  41. * @return \Illuminate\Http\JsonResponse
  42. */
  43. public function rename(WebauthnRenameRequest $request, string $credential)
  44. {
  45. $validated = $request->validated();
  46. $webAuthnCredential = WebAuthnCredential::where('id', $credential)->firstOrFail();
  47. $webAuthnCredential->name = $validated['name'];
  48. $webAuthnCredential->save();
  49. return response()->json([
  50. 'name' => $webAuthnCredential->name,
  51. ], 200);
  52. }
  53. /**
  54. * Remove the specified credential from storage.
  55. *
  56. * @param \Illuminate\Http\Request $request
  57. * @param string|array $credential
  58. *
  59. * @return \Illuminate\Http\JsonResponse
  60. */
  61. public function delete(Request $request, $credential)
  62. {
  63. $user = $request->user();
  64. $user->removeCredential($credential);
  65. // Webauthn user options should be reset to prevent impossible login
  66. // See #110
  67. if (blank($user->allCredentialDescriptors())) {
  68. Settings::delete('useWebauthnAsDefault');
  69. Settings::delete('useWebauthnOnly');
  70. }
  71. return response()->json(null, 204);
  72. }
  73. }