UserController.php 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. <?php
  2. namespace App\Http\Controllers\Auth;
  3. use App\Api\v1\Resources\UserResource;
  4. use App\Http\Controllers\Controller;
  5. use App\Http\Requests\UserDeleteRequest;
  6. use App\Http\Requests\UserUpdateRequest;
  7. use App\Models\User;
  8. use Illuminate\Support\Facades\Auth;
  9. use Illuminate\Support\Facades\Hash;
  10. use Illuminate\Support\Facades\Log;
  11. class UserController extends Controller
  12. {
  13. /**
  14. * Update the user's profile information.
  15. *
  16. * @return \App\Api\v1\Resources\UserResource|\Illuminate\Http\JsonResponse
  17. */
  18. public function update(UserUpdateRequest $request)
  19. {
  20. $user = $request->user();
  21. $validated = $request->validated();
  22. $this->authorize('update', $user);
  23. if (config('auth.defaults.guard') === 'reverse-proxy-guard' || $user->oauth_provider) {
  24. Log::notice('Account update rejected: reverse-proxy-guard enabled or account from external sso provider');
  25. return response()->json(['message' => __('errors.account_managed_by_external_provider')], 400);
  26. }
  27. if (! Hash::check($request->password, Auth::user()->password)) {
  28. Log::notice('Account update failed: wrong password provided');
  29. return response()->json(['message' => __('errors.wrong_current_password')], 400);
  30. }
  31. if (! config('2fauth.config.isDemoApp')) {
  32. $user->update([
  33. 'name' => $validated['name'],
  34. 'email' => $validated['email'],
  35. ]);
  36. }
  37. Log::info(sprintf('Account of user ID #%s updated', $user->id));
  38. return new UserResource($user);
  39. }
  40. /**
  41. * Delete the user's account.
  42. *
  43. * @return \Illuminate\Http\JsonResponse
  44. */
  45. public function delete(UserDeleteRequest $request)
  46. {
  47. $validated = $request->validated();
  48. $user = Auth::user();
  49. if (! Hash::check($validated['password'], Auth::user()->password)) {
  50. return response()->json(['message' => __('errors.wrong_current_password')], 400);
  51. }
  52. // This will delete the user and all its 2FAs & Groups thanks to the onCascadeDelete constrains.
  53. // Deletion will not be done (and returns False) if the user is the only existing admin (see UserObserver clas)
  54. return $user->delete() === false
  55. ? response()->json([
  56. 'message' => __('errors.cannot_delete_the_only_admin'),
  57. ], 400)
  58. : response()->json(null, 204);
  59. }
  60. }