middleware('guest')->except('logout'); $this->apiCrm = new \LDCCRM\ApiV1(config('crm.endpoint'), config('crm.token')); } /** * index * @return \Illuminate\View\View */ public function index() { return view('front.basic.login'); } 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 > 2) { $connect = $this->apiCrm->loginCustomer($email, $password); if ($connect->status === 'KO') { if ($connect->code === 500) { return back()->withInput($request->except("password")) ->withErrors(trans('The connection is not possible at the moment, please try again later.')); } else { return back()->withInput($request->except("password")) ->withErrors("Falsche E-Mail oder falsches Passwort."); } } } } else { $userLocal->email_verify_token = Str::uuid(); $userLocal->save(); Mail::to($email)->send(new VerifyEmail($userLocal)); return back()->withInput($request->except("password")) ->withErrors( trans('Your account exists, but your email has not been confirmed. Please check your emails.') ); }//end if } else { $connect = $this->apiCrm->loginCustomer($email, $password); if ($connect->status === 'OK') { $userLocal = User::create([ 'crm_id' => $connect->user->crm_id, 'firstname' => $connect->user->firstname, 'lastname' => $connect->user->lastname, 'birth_date' => $connect->user->birth_date, 'email' => $email, // TODO : MOTDEPASSE ???. 'password' => Hash::make("MOTDEPASSE"), '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) { $userLocal = User::create([ 'crm_id' => $connect->user->crm_id, 'firstname' => $connect->user->firstname, 'lastname' => $connect->user->lastname, 'birth_date' => $connect->user->birth_date, 'email' => $email, // TODO : MOTDEPASSE ???. 'password' => Hash::make("MOTDEPASSE"), '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 back()->withInput($request->except("password")) ->withErrors( trans('Your account exists, but your email has not been confirmed. Please check your emails.') ); } elseif ($connect->code === 500) { return back()->withInput($request->except("password")) ->withErrors("Die Verbindung ist momentan nicht möglich, bitte versuchen Sie es später noch einmal."); } else { return back()->withInput($request->except("password")) ->withErrors("Falsche E-Mail oder falsches Passwort."); } //end if } //end if }//end if // phpcs:ignore // TODO : Modifier avec separation guard. $tmpPwd = "MOTDEPASSE"; if ($userLocal->role <= 2) { $tmpPwd = $password; } if (Auth::attempt(["email" => $email, "password" => $tmpPwd], $remember)) { if ($userLocal->role <= 2) { return redirect()->route('bo.dashboard'); } return redirect()->route('saisir-code'); } else { return back()->withInput($request->except('password'))->withErrors('Die eingegebenen IDs sind falsch.'); } } /** * logout * @return Illuminate\Http\RedirectResponse */ public function logout() { Auth::logout(); return redirect()->route('home'); } /** * confirm email * @param string $verifyToken * @return \Illuminate\View\View|Illuminate\Http\RedirectResponse */ public function confirmEmail(string $verifyToken) { $result = false; $user = User::where('email_verify_token', $verifyToken)->first(); if (!$user) { return view('front.basic.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('front.basic.confirm-email', compact('result')); } public function forgotPassword(Request $request) { if ($request->tokenValid && $request->token) { $tokenValid = $request->tokenValid; $token = $request->token; return view('front.basic.forgot-password', compact('tokenValid', 'token')); } return view('front.basic.forgot-password'); } public function forgotPasswordReset(Request $request, $token) { if (!$request->hasValidSignature(false)) { return redirect()->route('login') ->withErrors("Der Link zum Ändern Ihres Passworts ist nicht mehr gültig, bitte versuchen Sie es erneut."); } $tokenValid = false; $user = User::where('password_token', $token)->first(); if (!$user) { return redirect()->route('forgot-password', compact('tokenValid')) ->withErrors('Der Link zum Ändern des Passworts ist falsch.'); } $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, '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( trans('Your account exists, but your email has not been confirmed. Please check your emails.') ); } } else { if ($userCrm->code === 101) { return back()->withInput($request->only('email')) ->withErrors("Die von Ihnen eingegebene E-Mail ist bei uns nicht gespeichert."); } else { return back()->withErrors("Es ist ein Fehler aufgetreten. Bitte versuchen Sie es später noch einmal."); } } //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('login') ->with('success', 'Eine E-Mail zum Zurücksetzen Ihres Passworts wurde Ihnen zugeschickt.'); } 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('Der Link zum Ändern Ihres Passworts ist falsch, bitte versuchen Sie es noch einmal.'); } // 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('login') ->with('success', 'Sie können sich nun mit Ihrem neuen Passwort anmelden.'); } else { if ($update->code === 123) { return back() ->withErrors("Es scheint, dass Sie dieses Passwort bereits für Ihr Konto verwendet haben. Bitte versuchen Sie es erneut, indem Sie Ihr Passwort ändern."); } else { return back()->withErrors("Es ist ein Fehler aufgetreten. Bitte versuchen Sie es später noch einmal."); } } } }