44
55use Illuminate \Foundation \Auth \ResetsPasswords ;
66use Illuminate \Http \Request ;
7+ use Illuminate \Validation \Rules \Password ;
8+ use Illuminate \Validation \ValidationException ;
79use ProcessMaker \Http \Controllers \Controller ;
810use ProcessMaker \Models \User ;
911
@@ -20,7 +22,9 @@ class ResetPasswordController extends Controller
2022 |
2123 */
2224
23- use ResetsPasswords;
25+ use ResetsPasswords {
26+ reset as protected performPasswordReset;
27+ }
2428
2529 /**
2630 * Where to redirect users after resetting their password.
@@ -46,8 +50,96 @@ public function __construct()
4650 */
4751 public function showResetForm (Request $ request , $ token )
4852 {
49- $ username = User::where ('email ' , $ request ->input ('email ' ))->firstOrFail ()->username ;
53+ $ user = User::where ('email ' , $ request ->input ('email ' ))->firstOrFail ();
54+
55+ if ($ user ->status === 'BLOCKED ' ) {
56+ return redirect ()->route ('password.request ' )
57+ ->withErrors (['email ' => __ ('passwords.blocked ' )]);
58+ }
59+
60+ if ($ user ->status === 'INACTIVE ' ) {
61+ return redirect ()->route ('password.request ' )
62+ ->withErrors (['email ' => __ ('passwords.inactive ' )]);
63+ }
64+
65+ return view ('auth.passwords.reset ' , [
66+ 'username ' => $ user ->username ,
67+ 'token ' => $ token ,
68+ 'email ' => $ request ->input ('email ' ),
69+ ]);
70+ }
71+
72+ /**
73+ * Reset the given user's password.
74+ * Blocked or inactive users cannot reset their password.
75+ *
76+ * @param Request $request
77+ * @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\JsonResponse
78+ */
79+ public function reset (Request $ request )
80+ {
81+ $ user = User::where ('email ' , $ request ->input ('email ' ))
82+ ->where ('username ' , $ request ->input ('username ' ))
83+ ->first ();
84+
85+ if ($ user && $ user ->status === 'BLOCKED ' ) {
86+ return $ this ->sendResetFailedResponse ($ request , 'passwords.blocked ' );
87+ }
88+
89+ if ($ user && $ user ->status === 'INACTIVE ' ) {
90+ return $ this ->sendResetFailedResponse ($ request , 'passwords.inactive ' );
91+ }
92+
93+ if (!$ user ) {
94+ return redirect ()->back ()
95+ ->withInput ($ request ->only ('email ' , 'username ' ))
96+ ->withErrors (['email ' => __ ('passwords.account_not_found ' )]);
97+ }
98+
99+ return $ this ->performPasswordReset ($ request );
100+ }
101+
102+ /**
103+ * Get the password reset validation rules.
104+ */
105+ protected function rules (): array
106+ {
107+ return [
108+ 'token ' => 'required ' ,
109+ 'email ' => 'required|email ' ,
110+ 'username ' => 'required|string ' ,
111+ 'password ' => ['required ' , 'confirmed ' , Password::defaults ()],
112+ ];
113+ }
114+
115+ /**
116+ * Get the password reset credentials from the request.
117+ * Include username so the broker resolves the same user as email+username (not email alone).
118+ */
119+ protected function credentials (Request $ request ): array
120+ {
121+ return $ request ->only (
122+ 'email ' ,
123+ 'username ' ,
124+ 'password ' ,
125+ 'password_confirmation ' ,
126+ 'token '
127+ );
128+ }
129+
130+ /**
131+ * @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\JsonResponse
132+ */
133+ protected function sendResetFailedResponse (Request $ request , $ response )
134+ {
135+ if ($ request ->wantsJson ()) {
136+ throw ValidationException::withMessages ([
137+ 'email ' => [trans ($ response )],
138+ ]);
139+ }
50140
51- return view ('auth.passwords.reset ' , compact ('username ' , 'token ' ));
141+ return redirect ()->back ()
142+ ->withInput ($ request ->only ('email ' , 'username ' ))
143+ ->withErrors (['email ' => trans ($ response )]);
52144 }
53145}
0 commit comments