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 Illuminate\Http\Request;
6use App\Http\Models\Auth\User;
7use Illuminate\Support\Facades\Log;
8use Illuminate\Support\Facades\Password;
9use Illuminate\Support\Facades\Validator;
10use App\Http\Controllers\v1\Auth\ForgotPasswordController as BaseForgotPasswordController;
11use App\Http\Models\Admin\AdminUserInvitation;
12
13class 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}