ForgotPasswordController   A
last analyzed

Complexity

Total Complexity 10

Size/Duplication

Total Lines 107
Duplicated Lines 0 %

Test Coverage

Coverage 88.89%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 20
dl 0
loc 107
ccs 24
cts 27
cp 0.8889
rs 10
c 1
b 0
f 0
wmc 10

7 Methods

Rating   Name   Duplication   Size   Complexity  
A sendResetLinkResponse() 0 5 2
A credentials() 0 3 1
A broker() 0 3 1
A sendResetLinkEmail() 0 14 2
A validateEmail() 0 3 1
A showLinkRequestForm() 0 3 1
A sendResetLinkFailedResponse() 0 11 2
1
<?php
2
3
namespace Devpri\Tinre\Http\Controllers\Auth;
4
5
use Devpri\Tinre\Http\Controllers\Controller;
6
use Illuminate\Http\JsonResponse;
7
use Illuminate\Http\Request;
8
use Illuminate\Support\Facades\Password;
9
use Illuminate\Validation\ValidationException;
10
11
class ForgotPasswordController extends Controller
12
{
13
    /*
14
    |--------------------------------------------------------------------------
15
    | Password Reset Controller
16
    |--------------------------------------------------------------------------
17
    |
18
    | This controller is responsible for handling password reset emails.
19
    |
20
    */
21
22
    /**
23
     * Display the form to request a password reset link.
24
     *
25
     * @return \Illuminate\Http\Response
26
     */
27 1
    public function showLinkRequestForm()
28
    {
29 1
        return view('tinre::auth.passwords.email');
0 ignored issues
show
Bug Best Practice introduced by
The expression return view('tinre::auth.passwords.email') returns the type Illuminate\View\View which is incompatible with the documented return type Illuminate\Http\Response.
Loading history...
30
    }
31
32
    /**
33
     * Send a reset link to the given user.
34
     *
35
     * @param  \Illuminate\Http\Request  $request
36
     * @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\JsonResponse
37
     */
38 2
    public function sendResetLinkEmail(Request $request)
39
    {
40 2
        $this->validateEmail($request);
41
42
        // We will send the password reset link to this user. Once we have attempted
43
        // to send the link, we will examine the response then see the message we
44
        // need to show to the user. Finally, we'll send out a proper response.
45 2
        $response = $this->broker()->sendResetLink(
46 2
            $this->credentials($request)
47
        );
48
49 2
        return $response == Password::RESET_LINK_SENT
50 1
            ? $this->sendResetLinkResponse($request, $response)
51 2
            : $this->sendResetLinkFailedResponse($request, $response);
52
    }
53
54
    /**
55
     * Validate the email for the given request.
56
     *
57
     * @param  \Illuminate\Http\Request  $request
58
     * @return void
59
     */
60 2
    protected function validateEmail(Request $request)
61
    {
62 2
        $request->validate(['email' => 'required|email']);
63 2
    }
64
65
    /**
66
     * Get the needed authentication credentials from the request.
67
     *
68
     * @param  \Illuminate\Http\Request  $request
69
     * @return array
70
     */
71 2
    protected function credentials(Request $request)
72
    {
73 2
        return $request->only('email');
74
    }
75
76
    /**
77
     * Get the response for a successful password reset link.
78
     *
79
     * @param  \Illuminate\Http\Request  $request
80
     * @param  string  $response
81
     * @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\JsonResponse
82
     */
83 1
    protected function sendResetLinkResponse(Request $request, $response)
84
    {
85 1
        return $request->wantsJson()
86
            ? new JsonResponse(['message' => trans($response)], 200)
87 1
            : back()->with('status', trans($response));
88
    }
89
90
    /**
91
     * Get the response for a failed password reset link.
92
     *
93
     * @param  \Illuminate\Http\Request  $request
94
     * @param  string  $response
95
     * @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\JsonResponse
96
     */
97 1
    protected function sendResetLinkFailedResponse(Request $request, $response)
98
    {
99 1
        if ($request->wantsJson()) {
100
            throw ValidationException::withMessages([
101
                'email' => [trans($response)],
102
            ]);
103
        }
104
105 1
        return back()
106 1
            ->withInput($request->only('email'))
107 1
            ->withErrors(['email' => trans($response)]);
108
    }
109
110
    /**
111
     * Get the broker to be used during password reset.
112
     *
113
     * @return \Illuminate\Contracts\Auth\PasswordBroker
114
     */
115 2
    public function broker()
116
    {
117 2
        return Password::broker();
118
    }
119
}
120