Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
0.00% |
0 / 39 |
|
0.00% |
0 / 2 |
CRAP | |
0.00% |
0 / 1 |
ForgotPasswordController | |
0.00% |
0 / 39 |
|
0.00% |
0 / 2 |
72 | |
0.00% |
0 / 1 |
sendResetLinkEmail | |
0.00% |
0 / 21 |
|
0.00% |
0 / 1 |
20 | |||
validateEmail | |
0.00% |
0 / 18 |
|
0.00% |
0 / 1 |
20 |
1 | <?php |
2 | |
3 | namespace App\Http\Controllers\v1\UserAuth; |
4 | |
5 | use Illuminate\Http\Request; |
6 | use App\Http\Models\Auth\User; |
7 | use Illuminate\Support\Facades\Log; |
8 | use Illuminate\Support\Facades\Password; |
9 | use Illuminate\Support\Facades\Validator; |
10 | use App\Http\Controllers\v1\Auth\ForgotPasswordController as BaseForgotPasswordController; |
11 | use App\Http\Models\Admin\AdminUserInvitation; |
12 | |
13 | class ForgotPasswordController extends BaseForgotPasswordController |
14 | { |
15 | /** |
16 | * Send a reset link to the given user. |
17 | * |
18 | * @param \Illuminate\Http\Request $request |
19 | * @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\JsonResponse |
20 | */ |
21 | public function sendResetLinkEmail(Request $request) |
22 | { |
23 | Log::info('Email Action Log', [ |
24 | 'tag' => 'Email', |
25 | 'email_type' => 'reset_password_link', |
26 | 'recipient_email' => $request->email, |
27 | 'is_queue' => false |
28 | ]); |
29 | if (! $this->validateEmail($request)) { |
30 | return $this->sendResetLinkFailedResponse($request, $response = ''); |
31 | } |
32 | try { |
33 | $response = $this->broker()->sendResetLink($this->credentials($request)); |
34 | |
35 | return $response == Password::RESET_LINK_SENT |
36 | ? $this->sendResetLinkResponse($request, $response) |
37 | : $this->sendResetLinkFailedResponse($request, $response); |
38 | } catch (\Exception $e) { |
39 | Log::error('Email Action Log', [ |
40 | 'tag' => 'Email', |
41 | 'email_type' => 'reset_password_link', |
42 | 'recipient_email' => $request->email, |
43 | 'is_queue' => false, |
44 | 'message' => 'Error while sending reset link email: ' . $e->getMessage() |
45 | ]); |
46 | return $this->sendResetLinkFailedResponse($request, $e->getMessage()); |
47 | } |
48 | } |
49 | |
50 | /** |
51 | * Validate the email for the given request. |
52 | */ |
53 | protected function validateEmail(Request $request): bool |
54 | { |
55 | |
56 | $validator = Validator::make($request->all(), [ |
57 | 'email' => [ |
58 | 'bail', |
59 | 'required', |
60 | 'email', |
61 | function ($attribute, $value, $fail) { |
62 | $existUser = strtolower(User::where($attribute, 'like', $value)->value($attribute)) === strtolower($value); |
63 | $existInvitation = strtolower(AdminUserInvitation::where($attribute, 'like', $value)->value($attribute)) === strtolower($value); |
64 | |
65 | if (!$existUser && !$existInvitation) { |
66 | $fail($attribute . ' is invalid.'); |
67 | } |
68 | }, |
69 | ] |
70 | ]); |
71 | |
72 | if ($validator->fails()) { |
73 | $email = $request->email ?? ''; |
74 | Log::error("Error while $email trying to reset password: " . $validator->errors()); |
75 | |
76 | return false; |
77 | } |
78 | |
79 | return true; |
80 | } |
81 | } |