33namespace App \Http \Controllers \Auth ;
44
55use App \Http \Controllers \Controller ;
6- use App \Http \Requests \SaveUserRequest ;
76use App \Models \Setting ;
87use App \Models \User ;
98use Illuminate \Foundation \Auth \ResetsPasswords ;
109use Illuminate \Http \Request ;
11- use Illuminate \Validation \Rule ;
12- use Illuminate \Validation \Validator ;
10+
1311
1412class ResetPasswordController extends Controller
1513{
@@ -63,6 +61,14 @@ protected function credentials(Request $request)
6361
6462 public function showResetForm (Request $ request , $ token = null )
6563 {
64+
65+ $ credentials = $ request ->only ('email ' , 'token ' );
66+
67+ if (is_null ($ this ->broker ()->getUser ($ credentials ))) {
68+ \Log::debug ('Password reset form FAILED - this token is not valid. ' );
69+ return redirect ()->route ('password.request ' )->with ('error ' , trans ('passwords.token ' ));
70+ }
71+
6672 return view ('auth.passwords.reset ' )->with (
6773 [
6874 'token ' => $ token ,
@@ -73,38 +79,53 @@ public function showResetForm(Request $request, $token = null)
7379
7480 public function reset (Request $ request )
7581 {
82+
83+ $ broker = $ this ->broker ();
84+
7685 $ messages = [
7786 'password.not_in ' => trans ('validation.disallow_same_pwd_as_user_fields ' ),
7887 ];
7988
8089 $ request ->validate ($ this ->rules (), $ request ->all (), $ this ->validationErrorMessages ());
8190
82- // Check to see if the user even exists
83- $ user = User::where ('username ' , '= ' , $ request ->input ('username ' ))->first ();
91+ \Log::debug ('Checking if ' .$ request ->input ('username ' ).' exists ' );
92+ // Check to see if the user even exists - we'll treat the response the same to prevent user sniffing
93+ if ($ user = User::where ('username ' , '= ' , $ request ->input ('username ' ))->where ('activated ' , '1 ' )->whereNotNull ('email ' )->first ()) {
94+ \Log::debug ($ user ->username .' exists ' );
8495
85- $ broker = $ this ->broker ();
86- if (strpos (Setting::passwordComplexityRulesSaving ('store ' ), 'disallow_same_pwd_as_user_fields ' ) !== false ) {
87- $ request ->validate (
88- [
89- 'password ' => 'required|notIn:[" ' .$ user ->email .'"," ' .$ user ->username .'"," ' .$ user ->first_name .'"," ' .$ user ->last_name .'" ' ,
90- ], $ messages );
91- }
9296
93- $ response = $ broker ->reset (
94- $ this ->credentials ($ request ), function ($ user , $ password ) {
97+ // handle the password validation rules set by the admin settings
98+ if (strpos (Setting::passwordComplexityRulesSaving ('store ' ), 'disallow_same_pwd_as_user_fields ' ) !== false ) {
99+ $ request ->validate (
100+ [
101+ 'password ' => 'required|notIn:[" ' .$ user ->email .'"," ' .$ user ->username .'"," ' .$ user ->first_name .'"," ' .$ user ->last_name .'" ' ,
102+ ], $ messages );
103+ }
104+
105+
106+ // set the response
107+ $ response = $ broker ->reset (
108+ $ this ->credentials ($ request ), function ($ user , $ password ) {
95109 $ this ->resetPassword ($ user , $ password );
110+ });
111+
112+ // Check if the password reset above actually worked
113+ if ($ response == \Password::PASSWORD_RESET ) {
114+ \Log::debug ('Password reset for ' .$ user ->username .' worked ' );
115+ return redirect ()->guest ('login ' )->with ('success ' , trans ('passwords.reset ' ));
96116 }
97- );
98117
99- return $ response == \Password::PASSWORD_RESET
100- ? $ this ->sendResetResponse ($ request , $ response )
101- : $ this ->sendResetFailedResponse ($ request , $ response );
102- }
118+ \Log::debug ('Password reset for ' .$ user ->username .' FAILED - this user exists but the token is not valid ' );
119+ return redirect ()->back ()->withInput ($ request ->only ('email ' ))->with ('error ' , trans ('passwords.token ' ));
120+
121+ }
122+
123+
124+ \Log::debug ('Password reset for ' .$ request ->input ('username ' ).' FAILED - user does not exist or does not have an email address - but make it look like it succeeded ' );
125+ return redirect ()->guest ('login ' )->with ('success ' , trans ('passwords.reset ' ));
103126
104- protected function sendResetFailedResponse (Request $ request , $ response )
105- {
106- return redirect ()->back ()
107- ->withInput (['username ' => $ request ->input ('username ' )])
108- ->withErrors (['username ' => trans ($ response ), 'password ' => trans ($ response )]);
109127 }
128+
129+
130+
110131}
0 commit comments