WebAuthnManageController.php 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  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 Illuminate\Support\Facades\Log;
  8. class WebAuthnManageController extends Controller
  9. {
  10. /**
  11. * List all WebAuthn registered credentials
  12. *
  13. * @return \Illuminate\Http\JsonResponse
  14. */
  15. public function index(Request $request)
  16. {
  17. $allUserCredentials = $request->user()->webAuthnCredentials()->WhereEnabled()->get();
  18. return response()->json($allUserCredentials, 200);
  19. }
  20. /**
  21. * Rename a WebAuthn credential
  22. *
  23. * @param \App\Http\Requests\WebauthnRenameRequest $request
  24. * @param string $credential
  25. * @return \Illuminate\Http\JsonResponse
  26. */
  27. public function rename(WebauthnRenameRequest $request, string $credential)
  28. {
  29. $validated = $request->validated();
  30. abort_if(! $request->user()->renameCredential($credential, $validated['name']), 404);
  31. return response()->json([
  32. 'name' => $validated['name'],
  33. ], 200);
  34. }
  35. /**
  36. * Remove the specified credential from storage.
  37. *
  38. * @param \Illuminate\Http\Request $request
  39. * @param string|array $credential
  40. *
  41. * @return \Illuminate\Http\JsonResponse
  42. */
  43. public function delete(Request $request, $credential)
  44. {
  45. Log::info('Deletion of security device requested');
  46. $user = $request->user();
  47. $user->flushCredential($credential);
  48. // Webauthn user options need to be reset to prevent impossible login when
  49. // no more registered device exists.
  50. // See #110
  51. if (blank($user->webAuthnCredentials()->WhereEnabled()->get())) {
  52. Settings::delete('useWebauthnAsDefault');
  53. Settings::delete('useWebauthnOnly');
  54. Log::notice('No Webauthn credential enabled, Webauthn settings reset to default');
  55. }
  56. Log::info('Security device deleted');
  57. return response()->json(null, 204);
  58. }
  59. }