diff --git a/app/Http/Controllers/Club/Auth/ForgotPasswordController.php b/app/Http/Controllers/Club/Auth/ForgotPasswordController.php index 9ab0cb14..99836c35 100644 --- a/app/Http/Controllers/Club/Auth/ForgotPasswordController.php +++ b/app/Http/Controllers/Club/Auth/ForgotPasswordController.php @@ -3,8 +3,6 @@ namespace App\Http\Controllers\Club\Auth; use App\Http\Controllers\Controller; -use Illuminate\Contracts\Auth\PasswordBroker; -use Illuminate\Contracts\View\View; use Illuminate\Foundation\Auth\SendsPasswordResetEmails; use Illuminate\Http\Request; use Illuminate\Support\Facades\Password; @@ -37,7 +35,7 @@ class ForgotPasswordController extends Controller * * @return \Illuminate\View\View */ - public function showLinkRequestForm(): View + public function showLinkRequestForm(): \Illuminate\View\View { return view('club.auth.passwords.email'); } @@ -47,7 +45,7 @@ class ForgotPasswordController extends Controller * * @return \Illuminate\Contracts\Auth\PasswordBroker */ - public function broker(): PasswordBroker + public function broker(): \Illuminate\Contracts\Auth\PasswordBroker { return Password::broker('customers'); } @@ -58,7 +56,7 @@ class ForgotPasswordController extends Controller * * @return \Illuminate\Http\RedirectResponse */ - protected function sendResetLinkResponse() + protected function sendResetLinkResponse(): \Illuminate\Http\RedirectResponse { return back()->with('info', trans($this->message)); } @@ -71,8 +69,10 @@ class ForgotPasswordController extends Controller * @param string $response * @return \Illuminate\Http\RedirectResponse */ - protected function sendResetLinkFailedResponse(Request $request, string $response) - { + protected function sendResetLinkFailedResponse( + Request $request, + string $response + ): \Illuminate\Http\RedirectResponse { // ! Ne pas notifier que l'utilisateur n'existe pas. if ($response === 'passwords.user') { return back()->with('info', trans($this->message)); diff --git a/app/Http/Controllers/Club/Auth/ResetPasswordController.php b/app/Http/Controllers/Club/Auth/ResetPasswordController.php index 2d7f3b19..07c0fbca 100644 --- a/app/Http/Controllers/Club/Auth/ResetPasswordController.php +++ b/app/Http/Controllers/Club/Auth/ResetPasswordController.php @@ -3,15 +3,17 @@ namespace App\Http\Controllers\Club\Auth; use App\Http\Controllers\Controller; +use App\Models\Customer; use Illuminate\Auth\Events\PasswordReset; -use Illuminate\Contracts\Auth\PasswordBroker; -use Illuminate\Contracts\Auth\StatefulGuard; -use Illuminate\Contracts\View\View; use Illuminate\Foundation\Auth\ResetsPasswords; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Password; use Illuminate\Support\Str; +use Illuminate\Validation\ValidationException; +use LDC\LDCCRM\Exceptions\ApiErrorException; +use LDC\LDCCRM\Exceptions\CrmException; +use LDC\LDCCRM\Exceptions\ValidationException as ExceptionsValidationException; class ResetPasswordController extends Controller { @@ -32,7 +34,7 @@ class ResetPasswordController extends Controller * * @return \Illuminate\Contracts\Auth\StatefulGuard */ - protected function guard(): StatefulGuard + protected function guard(): \Illuminate\Contracts\Auth\StatefulGuard { return Auth::guard('club'); } @@ -45,32 +47,49 @@ class ResetPasswordController extends Controller * @param \Illuminate\Http\Request $request * @return \Illuminate\Contracts\View\View */ - public function showResetForm(Request $request): View + public function showResetForm(Request $request): \Illuminate\Contracts\View\View { $token = $request->route()->parameter('token'); - return view('club.auth.passwords.reset')->with( - ['token' => $token, 'email' => $request->email] - ); + return view('club.auth.passwords.reset')->with([ + 'token' => $token, + 'email' => $request->email + ]); } /** * Reset the given user's password. * - * @param mixed $customer - * @param mixed $password + * @param \App\Models\Customer $customer + * @param string $password * @return void * @throws \Illuminate\Validation\ValidationException If something goes wrong. */ - protected function resetPassword(mixed $customer, mixed $password): void + protected function resetPassword(Customer $customer, string $password): void { - /** @var \App\Models\Customer $customer */ + /** @var \LDC\LDCCRM\CrmApiV4 */ + $crm = app('crmAPI'); - $customer->password = $password; + try { + if (!($crmCustomer = $crm->getCustomer($customer->hashcode))) { + throw ValidationException::withMessages([ + 'error' => trans('Changement impossible, compte inexistant.') + ]); + } + $crmCustomer->password = $password; + $crmCustomer->save(); + } catch (\TypeError | CrmException | ApiErrorException $e) { + report($e); + throw ValidationException::withMessages([ + 'error' => trans('Une erreur est survenue, merci de réessayer ultérieurement.') + ]); + } catch (ExceptionsValidationException $e) { + throw ValidationException::withMessages([ + 'password' => $e->getMessage() + ]); + } $customer->setRememberToken(Str::random(60)); - $customer->last_connection = \now(); - $customer->saveOrFail(); event(new PasswordReset($customer)); @@ -93,7 +112,7 @@ class ResetPasswordController extends Controller * * @return \Illuminate\Contracts\Auth\PasswordBroker */ - public function broker(): PasswordBroker + public function broker(): \Illuminate\Contracts\Auth\PasswordBroker { return Password::broker('customers'); } diff --git a/app/Models/Customer.php b/app/Models/Customer.php index c3d7daa8..d00570ab 100644 --- a/app/Models/Customer.php +++ b/app/Models/Customer.php @@ -6,6 +6,7 @@ use App\Enums\Departaimants\DepartaimantCollectionType; use App\Models\Notification; use App\Notifications\Customer\DestroyCustomer; use App\Notifications\Customer\DestroyedCustomer; +use App\Notifications\Customer\ResetPassword; use App\Notifications\Customer\VerifyEmail; use App\Traits\Models\ActivityLog; use Illuminate\Contracts\Auth\MustVerifyEmail; @@ -226,6 +227,19 @@ class Customer extends Authenticatable implements MustVerifyEmail $this->notify(new VerifyEmail()); } + /** + * Send the password reset notification. + * + * @param mixed $token + * @return void + */ + public function sendPasswordResetNotification(mixed $token) + { + $this->deleteIfDoesNotExistsInCrm(); + /** @var string $token */ + $this->notify(new ResetPassword($token)); + } + /** * Get all user Departaimant collection or create them if they dont exists. * diff --git a/app/Notifications/Customer/ResetPassword.php b/app/Notifications/Customer/ResetPassword.php index bc2e46dd..dc25a310 100644 --- a/app/Notifications/Customer/ResetPassword.php +++ b/app/Notifications/Customer/ResetPassword.php @@ -38,22 +38,16 @@ class ResetPassword extends NotificationsResetPassword */ public function toMail(mixed $notifiable): \Illuminate\Notifications\Messages\MailMessage { - // phpcs:enable - /** @var \App\Models\Customer $notifiable */ - $resetUrl = $this->resetUrl($notifiable); - /** @var string $firstname */ - $firstname = $notifiable->username; - return (new MailMessage()) ->template('notifications::email-club') ->subject(trans('Mot de passe oublié - :site_name', ['site_name' => config('app.name')])) /** @var string $firstname */ - ->greeting(trans('Bonjour :name', ['name' => $firstname])) + ->greeting(trans('Bonjour :name', ['name' => $notifiable->api_data->firstname])) ->line(trans( "Afin réinitialiser votre mot de passe pour vous connecter à :site_name, cliquez sur le lien suivant :", ['site_name' => config('app.name')] )) /** @var string $verificationUrl */ - ->action(trans('Réinitialisez votre mot de passe'), $resetUrl); + ->action(trans('Réinitialisez votre mot de passe'), $this->resetUrl($notifiable)); } }