Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 39
0.00% covered (danger)
0.00%
0 / 2
CRAP
0.00% covered (danger)
0.00%
0 / 1
ForgotPasswordController
0.00% covered (danger)
0.00%
0 / 39
0.00% covered (danger)
0.00%
0 / 2
72
0.00% covered (danger)
0.00%
0 / 1
 sendResetLinkEmail
0.00% covered (danger)
0.00%
0 / 21
0.00% covered (danger)
0.00%
0 / 1
20
 validateEmail
0.00% covered (danger)
0.00%
0 / 18
0.00% covered (danger)
0.00%
0 / 1
20
1<?php
2
3namespace App\Http\Controllers\v1\UserAuth;
4
5use App\Http\Controllers\v1\Auth\ForgotPasswordController as BaseForgotPasswordController;
6use App\Http\Models\Admin\AdminUserInvitation;
7use App\Http\Models\Auth\User;
8use Illuminate\Http\Request;
9use Illuminate\Support\Facades\Log;
10use Illuminate\Support\Facades\Password;
11use Illuminate\Support\Facades\Validator;
12
13class ForgotPasswordController extends BaseForgotPasswordController
14{
15    /**
16     * Send a reset link to the given user.
17     *
18     * @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\JsonResponse
19     */
20    public function sendResetLinkEmail(Request $request)
21    {
22        Log::info('Email Action Log', [
23            'tag' => 'Email',
24            'email_type' => 'reset_password_link',
25            'recipient_email' => $request->email,
26            'is_queue' => false,
27        ]);
28        if (! $this->validateEmail($request)) {
29            return $this->sendResetLinkFailedResponse($request, $response = '');
30        }
31        try {
32            $response = $this->broker()->sendResetLink($this->credentials($request));
33
34            return $response == Password::RESET_LINK_SENT
35                ? $this->sendResetLinkResponse($request, $response)
36                : $this->sendResetLinkFailedResponse($request, $response);
37        } catch (\Exception $e) {
38            Log::error('Email Action Log', [
39                'tag' => 'Email',
40                'email_type' => 'reset_password_link',
41                'recipient_email' => $request->email,
42                'is_queue' => false,
43                'message' => 'Error while sending reset link email: '.$e->getMessage(),
44            ]);
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}