WebAuthnManageController.php 2.5 KB

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