role; switch ($role) { case '1': case '2': return '/bo'; case '3': return '/pro'; default: return '/home'; } } /** * Create a new controller instance. * * @return void */ public function __construct() { $this->middleware('guest')->except('logout'); $this->apiCrm = new \LDCCRM\ApiV1(config('crm.endpoint'), config('crm.token')); } public function authenticate(Request $request) { $request->validate([ 'email' => 'required|email', 'password' => 'required', ]); $email = filter_var($request->email, FILTER_SANITIZE_EMAIL); $password = $request->password; $remember = $request->remember !== null ? true : false; $userLocal = User::where('email', $email)->first(); if ($userLocal) { if ($userLocal->email_verified === 1) { if ($userLocal->role !== 1 && $userLocal->role !== 2) { $connect = $this->apiCrm->loginCustomer($email, $password); if ($connect->status === 'OK') { /** @var \Illuminate\Auth\SessionGuard */ $guard = Auth::guard('web'); $guard->login($userLocal, $remember); $url = $this->redirectTo(); return redirect()->to($url); } else { if ($connect->code === 500) { return back()->withInput($request->except("password")) ->withErrors("La connexion est impossible pour le moment, veuillez réessayer plus tard."); } else { return 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 back()->withInput($request->except("password")) ->withErrors("Votre compte existe mais votre email n'est pas confirmé, merci de vérifier vos emails."); } } else { //création d'un compte local car il existe en crm $connect = $this->apiCrm->loginCustomer($email, $password); if ($connect->status === 'OK') { $userLocal = User::create([ 'crm_id' => $connect->user->crm_id, 'crm_hashcode' => $connect->user->hashcode, 'firstname' => $connect->user->firstname, 'lastname' => $connect->user->lastname, 'email' => $email, 'password' => Hash::make("MOTDEPASSE"), // Quelle infamie!!! 'email_verified' => 1 ]); } else { if ($connect->code === 116) { // Compte existant mais non activé $userLocal = User::create([ 'crm_id' => $connect->user->crm_id, 'crm_hashcode' => $connect->user->hashcode, 'firstname' => $connect->user->firstname, 'lastname' => $connect->user->lastname, 'email' => $email, 'password' => Hash::make("MOTDEPASSE"), // Quelle infamie!!! ]); $userLocal->email_verify_token = Str::uuid(); $userLocal->save(); Mail::to($email)->send(new VerifyEmail($userLocal)); return 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 back()->withInput($request->except("password")) ->withErrors("La connexion est impossible pour le moment, veuillez réessayer plus tard."); } else { return back()->withInput($request->except("password")) ->withErrors("Email ou mot de passe incorrect."); } } } if ($userLocal->role === 1 || $userLocal->role === 2) { if (Auth::attempt(["email" => $email, "password" => $password], $remember)) { return redirect()->route('bo.dashboard'); } else { return back()->withInput($request->except('password'))->withErrors('Les identifiants entrés sont incorrects.'); } } } public function confirmEmail($verifyToken) { $result = false; $user = User::where('email_verify_token', $verifyToken)->first(); if (!$user) { return view('front.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 { if ($activation->code === 110) { // User already active $user->email_verified = 1; $user->email_verify_token = null; $user->save(); $result = true; } } //envoi de mail à contact.jeusselin@jeusselin.fr $email = "contact.jeusselin@jeusselin.fr"; Mail::to($email)->send(new InformProVerified($user)); return view('front.confirm-email', compact('result')); } public function forgotPassword(Request $request) { if ($request->tokenValid && $request->token) { $tokenValid = $request->tokenValid; $token = $request->token; return view('front.forgot-password', compact('tokenValid', 'token')); } return view('front.forgot-password'); } public function forgotPasswordReset(Request $request, $token) { if (!$request->hasValidSignature(false)) { return redirect()->route('login')->withErrors("Le lien de changement de votre mot de passe n'est plus valide, veuillez réessayer."); } $tokenValid = false; $user = User::where('password_token', $token)->first(); if (!$user) { return redirect()->route('forgot-password', compact('tokenValid'))->withErrors('Le lien de changement du mot de passe est incorrect.'); } $tokenValid = true; return redirect()->route('forgot-password', compact('tokenValid', 'token')); } public function mailPassword(Request $request) { $email = filter_var($request->email, FILTER_SANITIZE_STRING); $user = User::where('email', $email)->first(); if (!$user) { $userCrm = $this->apiCrm->getCustomerByEmail($email); if ($userCrm->status === 'OK') { $user = User::create([ 'crm_id' => $userCrm->user->crm_id, 'crm_hashcode' => $userCrm->user->hashcode, 'firstname' => $userCrm->user->firstname, 'lastname' => $userCrm->user->lastname, 'email' => $email, 'password' => Hash::make("MOTDEPASSE"), // TODO : ??? '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 back()->withInput($request->only('email'))->withErrors("Le mail que vous avez entré n'est pas enregistré dans nos services."); }else{ return back()->withErrors("Une erreur est survenue, veuillez réessayer plus tard."); } } } $user->password_token = Str::uuid(); $user->save(); Mail::to($email)->send(new PasswordReset($user)); return redirect()->route('login')->with('success', 'Un mail de réinitialisation de votre mot de passe vous a été envoyé(e).'); } public function changePassword(Request $request) { $request->validate([ 'password' => 'required|min:8|confirmed', ]); $user = User::where('password_token', filter_var($request->token, FILTER_SANITIZE_STRING))->first(); if (!$user) return 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'){ return redirect()->route('login')->with('success', 'Vous pouvez désormais vous connecter avec votre nouveau mot de passe.'); }else{ return back()->withErrors("Une erreur est survenue, veuillez réessayer plus tard."); } } }