@@ -347,61 +347,66 @@ protected function taskForgot()
347347 $ config = $ this ->grav ['config ' ];
348348 $ data = $ this ->post ;
349349
350+ /** @var Language $language */
351+ $ language = $ this ->grav ['language ' ];
352+ $ messages = $ this ->grav ['messages ' ];
353+
350354 /** @var UserCollectionInterface $users */
351355 $ users = $ this ->grav ['accounts ' ];
352-
353356 $ email = $ data ['email ' ] ?? '' ;
354357
355358 // Sanitize $email
356359 $ email = htmlspecialchars (strip_tags ($ email ), ENT_QUOTES , 'UTF-8 ' );
357360
358- $ user = !empty ($ email ) ? $ users ->find ($ email , ['email ' ]) : null ;
359-
360- /** @var Language $language */
361- $ language = $ this ->grav ['language ' ];
362- $ messages = $ this ->grav ['messages ' ];
361+ // Find user if they exist
362+ $ user = $ users ->find ($ email , ['email ' ]);
363363
364- if (!isset ($ this ->grav ['Email ' ])) {
365- $ messages ->add ($ language ->translate ('PLUGIN_LOGIN.FORGOT_EMAIL_NOT_CONFIGURED ' ), 'error ' );
366- $ this ->setRedirect ($ this ->login ->getRoute ('forgot ' ) ?? '/ ' );
364+ if ($ user ->exists ()) {
365+ if (!isset ($ this ->grav ['Email ' ])) {
366+ $ messages ->add ($ language ->translate ('PLUGIN_LOGIN.FORGOT_EMAIL_NOT_CONFIGURED ' ), 'error ' );
367+ $ this ->setRedirect ($ this ->login ->getRoute ('forgot ' ) ?? '/ ' );
367368
368- return true ;
369- }
369+ return true ;
370+ }
370371
371- $ from = $ config ->get ('plugins.email.from ' );
372+ $ from = $ config ->get ('plugins.email.from ' );
372373
373- if (empty ($ from )) {
374- $ messages ->add ($ language ->translate ('PLUGIN_LOGIN.FORGOT_EMAIL_NOT_CONFIGURED ' ), 'error ' );
375- $ this ->setRedirect ($ this ->login ->getRoute ('forgot ' ) ?? '/ ' );
374+ if (empty ($ from )) {
375+ $ messages ->add ($ language ->translate ('PLUGIN_LOGIN.FORGOT_EMAIL_NOT_CONFIGURED ' ), 'error ' );
376+ $ this ->setRedirect ($ this ->login ->getRoute ('forgot ' ) ?? '/ ' );
376377
377- return true ;
378- }
378+ return true ;
379+ }
379380
380- $ userKey = $ user ->username ;
381- $ rateLimiter = $ this ->login ->getRateLimiter ('pw_resets ' );
382- $ rateLimiter ->registerRateLimitedAction ($ userKey );
381+ $ userKey = $ user ->username ;
382+ $ rateLimiter = $ this ->login ->getRateLimiter ('pw_resets ' );
383+ $ rateLimiter ->registerRateLimitedAction ($ userKey );
383384
384- if ($ rateLimiter ->isRateLimited ($ userKey )) {
385- $ messages ->add ($ language ->translate (['PLUGIN_LOGIN.FORGOT_CANNOT_RESET_IT_IS_BLOCKED ' , $ email , $ rateLimiter ->getInterval ()]), 'error ' );
386- $ this ->setRedirect ($ this ->login ->getRoute ('login ' ) ?? '/ ' );
385+ if ($ rateLimiter ->isRateLimited ($ userKey )) {
386+ $ messages ->add ($ language ->translate (['PLUGIN_LOGIN.FORGOT_CANNOT_RESET_IT_IS_BLOCKED ' , $ email , $ rateLimiter ->getInterval ()]), 'error ' );
387+ $ this ->setRedirect ($ this ->login ->getRoute ('login ' ) ?? '/ ' );
387388
388- return true ;
389- }
389+ return true ;
390+ }
390391
391- $ token = md5 (uniqid ((string )mt_rand (), true ));
392- $ expire = time () + 604800 ; // next week
392+ $ token = md5 (uniqid ((string )mt_rand (), true ));
393+ $ expire = time () + 604800 ; // next week
393394
394- $ user ->reset = $ token . ':: ' . $ expire ;
395- $ user ->save ();
395+ $ user ->reset = $ token . ':: ' . $ expire ;
396+ $ user ->save ();
396397
397- try {
398- Email::sendResetPasswordEmail ($ user );
398+ try {
399+ Email::sendResetPasswordEmail ($ user );
399400
401+ $ messages ->add ($ language ->translate ('PLUGIN_LOGIN.FORGOT_INSTRUCTIONS_SENT_VIA_EMAIL ' ), 'info ' );
402+ } catch (\Exception $ e ) {
403+ $ messages ->add ($ language ->translate ('PLUGIN_LOGIN.FORGOT_FAILED_TO_EMAIL ' ), 'error ' );
404+ }
405+ } else {
400406 $ messages ->add ($ language ->translate ('PLUGIN_LOGIN.FORGOT_INSTRUCTIONS_SENT_VIA_EMAIL ' ), 'info ' );
401- } catch (\Exception $ e ) {
402- $ messages ->add ($ language ->translate ('PLUGIN_LOGIN.FORGOT_FAILED_TO_EMAIL ' ), 'error ' );
403407 }
404408
409+
405410 $ this ->setRedirect ($ this ->login ->getRoute ('login ' ) ?? '/ ' );
406411
407412 return true ;
0 commit comments