middleware('guest')->except('logout'); // $this->apiCrm = new \LDCCRM\ApiV1(config('crm.endpoint'), config('crm.token')); } /** * Get the view of the index. * * @return \Illuminate\View\View */ public function index() { return view('theme::fo.login'); } /** * Authenticate the user. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\RedirectResponse */ public function authenticate(Request $request) { $request->validate([ 'email' => 'required|email', 'password' => 'required', ]); $email = filter_var($request->email, FILTER_SANITIZE_EMAIL); $password = $request->password; /** @var \App\Models\Customer $userLocal */ $userLocal = Customer::where('email', $email)->first(); if ($userLocal) { if ($userLocal->email_verified === 1) { $connect = $this->apiCrm->loginCustomer($email, $password); if ($connect->status === 'KO') { if ($connect->code === 500) { return redirect()->back() ->withInput($request->except("password")) ->withErrors("La connexion est impossible pour le moment, veuillez réessayer plus tard."); } else { return redirect()->back() ->withInput($request->except("password")) ->withErrors("Email ou mot de passe incorrect."); } } } else { $userLocal->email_verify_token = Str::uuid(); $userLocal->save(); Mail::to($email)->send(new VerifyEmail($userLocal)); return redirect()->back() ->withInput($request->except("password")) ->withErrors("Votre compte existe mais votre email n'est pas confirmé, merci de vérifier vos emails."); } //end if } else { $connect = $this->apiCrm->loginCustomer($email, $password); if ($connect->status === 'OK') { /** @var \App\Models\Customer $userLocal */ $userLocal = Customer::create([ 'crm_id' => $connect->user->crm_id, 'firstname' => $connect->user->firstname, 'lastname' => $connect->user->lastname, 'birth_date' => $connect->user->birth_date, 'email' => $email, 'password' => Hash::make($password), 'address' => $connect->user->address, 'address2' => $connect->user->address2, 'town' => $connect->user->city, 'postal_code' => $connect->user->postcode, 'country' => $connect->user->country, 'email_verified' => 1 ]); } else { // Compte existant mais non activé. if ($connect->code === 116) { /** @var \App\Models\Customer $userLocal */ $userLocal = Customer::create([ 'crm_id' => $connect->user->crm_id, 'firstname' => $connect->user->firstname, 'lastname' => $connect->user->lastname, 'birth_date' => $connect->user->birth_date, 'email' => $email, 'password' => Hash::make($password), 'address' => $connect->user->address, 'address2' => $connect->user->address2, 'town' => $connect->user->city, 'postal_code' => $connect->user->postcode, 'country' => $connect->user->country ]); $userLocal->email_verify_token = Str::uuid(); $userLocal->save(); Mail::to($email)->send(new VerifyEmail($userLocal)); return redirect()->back() ->withInput($request->except("password")) ->withErrors("Votre compte existe mais votre email n'est pas confirmé, merci de vérifier vos emails."); } elseif ($connect->code === 500) { return redirect()->back() ->withInput($request->except("password")) ->withErrors("La connexion est impossible pour le moment, veuillez réessayer plus tard."); } else { return redirect()->back() ->withInput($request->except("password")) ->withErrors("Email ou mot de passe incorrect."); } //end if } //end if } //end if Auth::login($userLocal); return redirect()->route('fo.saisir-code'); } /** * Logout. * * @return Illuminate\Http\RedirectResponse */ public function logout() { Auth::logout(); return redirect()->route('fo.home'); } /** * Confirm email. * * @param string $verifyToken * @return \Illuminate\View\View|Illuminate\Http\RedirectResponse */ public function confirmEmail(string $verifyToken) { $result = false; $user = Customer::where('email_verify_token', $verifyToken)->first(); if (!$user) { return view('theme::fo.confirm-email', compact('result')); } $activation = $this->apiCrm->activateCustomer($user->crm_id); if ($activation->status === 'OK') { $user->email_verified = 1; $user->email_verify_token = null; $user->save(); $result = true; } else { // User already active. if ($activation->code === 110) { $user->email_verified = 1; $user->email_verify_token = null; $user->save(); $result = true; } } return view('theme::fo.confirm-email', compact('result')); } /** * Display the view to request a password reset link * * @param \Illuminate\Http\Request $request * @return \Illuminate\Contracts\View\View|\Illuminate\Contracts\View\Factory */ public function forgotPassword(Request $request) { if ($request->tokenValid && $request->token) { $tokenValid = $request->tokenValid; $token = $request->token; return view('theme::fo.forgot-password', compact('tokenValid', 'token')); } return view('theme::fo.forgot-password'); } /** * Display the view to reset a password * * @param \Illuminate\Http\Request $request * @param string $token * @return \Illuminate\Contracts\View\View|\Illuminate\Contracts\View\Factory */ public function forgotPasswordReset(Request $request, string $token) { if (!$request->hasValidSignature(false)) { return redirect()->route('fo.login') ->withErrors("Le lien de changement de votre mot de passe n'est plus valide, veuillez réessayer."); } $tokenValid = false; $user = Customer::where('password_token', $token)->first(); if (!$user) { return redirect()->route('fo.forgot-password', compact('tokenValid')) ->withErrors('Le lien de changement du mot de passe est incorrect.'); } $tokenValid = true; return redirect()->route('fo.forgot-password', compact('tokenValid', 'token')); } /** * Send the reset password mail * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\RedirectResponse */ public function mailPassword(Request $request) { $email = filter_var($request->email, FILTER_SANITIZE_STRING); $user = Customer::where('email', $email)->first(); if (!$user) { $userCrm = $this->apiCrm->getCustomerByEmail($email); if ($userCrm->status === 'OK') { $user = Customer::create([ 'crm_id' => $userCrm->user->crm_id, 'firstname' => $userCrm->user->firstname, 'lastname' => $userCrm->user->lastname, 'birth_date' => $userCrm->user->birth_date, 'email' => $email, // TODO : MOTDEPASSE ??? 'password' => Hash::make("MOTDEPASSE"), 'address' => $userCrm->user->address, 'address2' => $userCrm->user->address2, 'town' => $userCrm->user->city, 'postal_code' => $userCrm->user->postcode, 'country' => $userCrm->user->country, 'email_verified' => 1 ]); if ($userCrm->user->status === 0) { $user->email_verified = 0; $user->email_verify_token = Str::uuid(); $user->save(); Mail::to($email)->send(new VerifyEmail($user)); return back()->withInput($request->except("password")) ->withErrors("Votre compte existe mais votre email n'est pas confirmé, merci de vérifier vos emails."); } } else { if ($userCrm->code === 101) { return redirect()->back() ->withInput($request->only('email')) ->withErrors("Le mail que vous avez entré n'est pas enregistré dans nos services."); } else { return redirect()->back() ->withErrors("Une erreur est survenue, veuillez réessayer plus tard."); } } //end if } //end if $user->password_token = Str::uuid(); $user->save(); /** @var \App\Models\Settings $settings */ $settings = app(Settings::class); Mail::to($email)->send(new PasswordReset($user, $settings)); return redirect()->route('fo.login') ->with('success', 'Un mail de réinitialisation de votre mot de passe vous a été envoyé(e).'); } /** * Change the password * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\RedirectResponse */ public function changePassword(Request $request) { $request->validate([ 'password' => 'required|min:8|confirmed', ]); $user = Customer::where('password_token', filter_var($request->token, FILTER_SANITIZE_STRING))->first(); if (!$user) { return redirect()->back() ->withErrors('Le lien de changement de votre mot de passe est incorrect, veuillez réessayer.'); } // TODO : Ajouter controle du contenu du mot de passe. $newPassword = $request->password; $update = $this->apiCrm->changePwdCustomer($user->crm_id, $newPassword); if ($update->status === 'OK') { $user->password_token = null; $user->save(); return redirect()->route('fo.login') ->with('success', 'Vous pouvez désormais vous connecter avec votre nouveau mot de passe.'); } else { if ($update->code === 123) { return redirect()->back() ->withErrors("Il semblerait que vous ayez déjà utilisé ce mot de passe pour votre compte. Veuillez réessayer en changeant de mot de passe."); } else { return redirect()->back() ->withErrors("Une erreur est survenue, veuillez réessayer plus tard."); } } } }