Skip to content

Commit

Permalink
Merge pull request #182 from code4romania/174-reset-password
Browse files Browse the repository at this point in the history
Reset password
  • Loading branch information
gheorghelupu17 authored Sep 23, 2024
2 parents c3583a4 + c891ef0 commit 367e5bd
Show file tree
Hide file tree
Showing 4 changed files with 84 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
<?php

declare(strict_types=1);

namespace App\Filament\Resources\UserResource\Actions;

use App\Models\User;
use Filament\Notifications\Notification;
use Filament\Pages\Actions\Action;
use Illuminate\Support\Facades\Password;
use Illuminate\Support\Facades\RateLimiter;

const HOUR_IN_SECONDS = 3600;
class ResetPasswordAction extends Action
{
public static function getDefaultName(): ?string
{
return 'reset_password';
}

protected function setUp(): void
{
parent::setUp();

$this->label(__('user.actions.reset_password'));
$this->outlined();
$this->action(function (User $record) {
$key = $this->getRateLimiterKey($record);
$maxAttempts = 1;

if (RateLimiter::tooManyAttempts($key, $maxAttempts)) {
Notification::make()
->title(__('general.warnings.reset_password_too_many_attempts'))
->danger()
->send();

return;
}

RateLimiter::increment($key, HOUR_IN_SECONDS);

$response = Password::broker(config('filament-breezy.reset_broker', config('auth.defaults.passwords')))->sendResetLink(['email' => $record->email]);
if ($response === Password::RESET_LINK_SENT) {
Notification::make()
->title(__('filament-breezy::default.reset_password.notification_success'))
->success()
->send();

return;
}
Notification::make()->title(match ($response) {
'passwords.throttled' => __('passwords.throttled'),
'passwords.user' => __('passwords.user')
})
->danger()
->send();
});
}

private function getRateLimiterKey(User $user): string
{
return 'reset-password:' . $user->id;
}
}
12 changes: 12 additions & 0 deletions app/Filament/Resources/UserResource/Pages/ViewUser.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,21 @@
namespace App\Filament\Resources\UserResource\Pages;

use App\Filament\Resources\UserResource;
use App\Filament\Resources\UserResource\Actions\ResetPasswordAction;
use Filament\Pages\Actions\EditAction;
use Filament\Resources\Pages\ViewRecord;

class ViewUser extends ViewRecord
{
protected static string $resource = UserResource::class;

protected function getActions(): array
{
return [
ResetPasswordAction::make()
->record($this->getRecord()),

EditAction::make(),
];
}
}
4 changes: 4 additions & 0 deletions lang/ro/general.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,8 @@
'date_from' => 'Dată început',
'date_until' => 'Dată sfârșit',
],

'warnings' => [
'reset_password_too_many_attempts' => 'Numărul maxim de email-uri trimise pentru resetarea parolei pentru acest utilizator a fost atins! Încercați din nou mai târziu.',
],
];
4 changes: 4 additions & 0 deletions lang/ro/user.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,4 +23,8 @@
'platform_coordinator' => 'Coordonator local IGSU/ISUJ',
'org_admin' => 'Admin organizație',
],

'actions' => [
'reset_password' => 'Resetează parola',
],
];

0 comments on commit 367e5bd

Please sign in to comment.