WebAuthnManageController.php 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. <?php
  2. namespace App\Http\Controllers\Auth;
  3. use App\Facades\Settings;
  4. use App\Http\Controllers\Controller;
  5. use App\Http\Requests\WebauthnRenameRequest;
  6. use Illuminate\Http\Request;
  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. * @return \Illuminate\Http\JsonResponse
  41. */
  42. public function delete(Request $request, $credential)
  43. {
  44. Log::info('Deletion of security device requested');
  45. $user = $request->user();
  46. $user->flushCredential($credential);
  47. // Webauthn user options need to be reset to prevent impossible login when
  48. // no more registered device exists.
  49. // See #110
  50. if (blank($user->webAuthnCredentials()->WhereEnabled()->get())) {
  51. Settings::delete('useWebauthnAsDefault');
  52. Settings::delete('useWebauthnOnly');
  53. Log::notice('No Webauthn credential enabled, Webauthn settings reset to default');
  54. }
  55. Log::info('Security device deleted');
  56. return response()->json(null, 204);
  57. }
  58. }