middleware('guest:club'); } /** * Display the form to request a password reset link. * * @return \Illuminate\View\View */ public function showLinkRequestForm(): \Illuminate\View\View { return view('club.auth.passwords.email'); } /** * Get the broker to be used during password reset. * * @return \Illuminate\Contracts\Auth\PasswordBroker */ public function broker(): \Illuminate\Contracts\Auth\PasswordBroker { return Password::broker('customers'); } /** * Get the response for a successful password reset link. * ! Dans les deux cas on ne divulgue pas si un user existe. * * @param \Illuminate\Http\Request $request * @param string $response * @return \Illuminate\Http\RedirectResponse * * @phpcs:disable */ protected function sendResetLinkResponse(Request $request, $response): \Illuminate\Http\RedirectResponse { //phpcs:enable return back()->with('info', trans($this->message)); } /** * Get the response for a failed password reset link. * ! Dans les deux cas on ne divulgue pas si un user existe. * * @param \Illuminate\Http\Request $request * @param string $response * @return \Illuminate\Http\RedirectResponse */ 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)); } // * Renvoyer les autres message d'erreur style throttle. return back() ->withInput($request->only('email')) ->withErrors(['email' => trans($response)]); } /** * Send a reset link to the given user. * ! Overload this method to re-create customer if he's deleted from local database but active in CRM. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\JsonResponse */ public function sendResetLinkEmail(Request $request) { $this->validateEmail($request); // Search for a local customer and re-create it if it's not in local database but in CRM. $email = $request->input('email'); $crm = app('crmAPI'); if (!Customer::query()->where('email', $email)->first() and $crmCustomer = $crm->getCustomer($email)) { $customer = Customer::firstOrNew([ 'email' => $crmCustomer->email ]); $customer->hashcode = $crmCustomer->hashcode; $customer->username = Utils::getUniquePseudo( $crmCustomer->firstname, $crmCustomer->lastname ); $customer->email_verified_at = $crmCustomer->status ? now() : null; $customer->saveOrFail(); } // We will send the password reset link to this user. Once we have attempted // to send the link, we will examine the response then see the message we // need to show to the user. Finally, we'll send out a proper response. $response = $this->broker()->sendResetLink( $this->credentials($request) ); return $response == Password::RESET_LINK_SENT ? $this->sendResetLinkResponse($request, $response) : $this->sendResetLinkFailedResponse($request, $response); } }