diff --git a/app/Filament/Pages/Auth/RequestPasswordReset.php b/app/Filament/Pages/Auth/RequestPasswordReset.php new file mode 100644 index 0000000..2e55377 --- /dev/null +++ b/app/Filament/Pages/Auth/RequestPasswordReset.php @@ -0,0 +1,85 @@ +schema([ + $this->getEmailFormComponent()->label('Email'), + ]); + } + + public function request(): void + { + try { + $this->rateLimit(3); + } catch (TooManyRequestsException $exception) { + Notification::make() + ->title(__('filament-panels::pages/auth/password-reset/request-password-reset.notifications.throttled.title', [ + 'seconds' => $exception->secondsUntilAvailable, + 'minutes' => ceil($exception->secondsUntilAvailable / 60), + ])) + ->body(array_key_exists('body', __('filament-panels::pages/auth/password-reset/request-password-reset.notifications.throttled') ?: []) ? __('filament-panels::pages/auth/password-reset/request-password-reset.notifications.throttled.body', [ + 'seconds' => $exception->secondsUntilAvailable, + 'minutes' => ceil($exception->secondsUntilAvailable / 60), + ]) : null) + ->danger() + ->send(); + + return; + } + + $data = $this->form->getState(); + + $status = Password::broker(Filament::getAuthPasswordBroker())->sendResetLink( + $data, + function (CanResetPassword $user, string $token): void { + if (! method_exists($user, 'notify')) { + $userClass = $user::class; + + throw new Exception("Model [{$userClass}] does not have a [notify()] method."); + } + + $settings = app(MailSettings::class); + $notification = new ResetPasswordNotification($token); + $notification->url = Filament::getResetPasswordUrl($token, $user); + + $settings->loadMailSettingsToConfig(); + + $user->notify($notification); + }, + ); + + if ($status !== Password::RESET_LINK_SENT) { + Notification::make() + ->title(__($status)) + ->danger() + ->send(); + + return; + } + + Notification::make() + ->title(__($status)) + ->success() + ->send(); + + $this->form->fill(); + } +} diff --git a/app/Providers/Filament/AdminPanelProvider.php b/app/Providers/Filament/AdminPanelProvider.php index 73dab81..619f09a 100644 --- a/app/Providers/Filament/AdminPanelProvider.php +++ b/app/Providers/Filament/AdminPanelProvider.php @@ -4,6 +4,7 @@ use App\Filament\Pages\Auth\EmailVerification; use App\Filament\Pages\Auth\Login; +use App\Filament\Pages\Auth\RequestPasswordReset; use App\Livewire\MyProfileExtended; use App\Settings\GeneralSettings; use Filament\Http\Middleware\Authenticate; @@ -31,6 +32,7 @@ public function panel(Panel $panel): Panel ->id('admin') ->path('admin') ->login(Login::class) + ->passwordReset(RequestPasswordReset::class) ->emailVerification(EmailVerification::class) ->favicon(fn (GeneralSettings $settings) => Storage::url($settings->site_favicon)) ->brandName(fn (GeneralSettings $settings) => $settings->brand_name)