148 lines
6.2 KiB
PHP
148 lines
6.2 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Mail\PasswordReset;
|
|
use App\Mail\VerifyEmail;
|
|
use App\Models\Settings;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Auth;
|
|
use Illuminate\Support\Str;
|
|
use App\User;
|
|
use CPCConnection;
|
|
use Exception;
|
|
use Illuminate\Support\Facades\Hash;
|
|
use Illuminate\Support\Facades\Mail;
|
|
|
|
class LoginController extends Controller
|
|
{
|
|
|
|
public function __construct() {
|
|
$this->middleware('guest')->except('logout');
|
|
}
|
|
|
|
public function index() {
|
|
return view('front.basic.login');
|
|
}
|
|
|
|
public function authenticate(Request $request)
|
|
{
|
|
$email = $request->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) {
|
|
try {
|
|
$cpcConnect = new CPCConnection(config('crm.CRM_PLATOS_WSDL'), config('crm.WS_SERVCE_LOGIN'), config('crm.WS_SERVCE_PASSWORD'));
|
|
$cpcConnect->connect();
|
|
try {
|
|
// ---- Authentification du user
|
|
// En attendant la mise à jour de la crm, on envoi un mot de passe bidon (le même qu'a l'inscription)
|
|
$cpcConnect->authenticateUser ($email, 'MOTDEPASSE');
|
|
} catch (Exception $e) {
|
|
return redirect()->back()->withInput($request->only("email", "password"))->withErrors("Email ou mot de passe incorrect.");
|
|
}
|
|
} catch (Exception $e) {
|
|
return redirect()->back()->withInput($request->only("email", "password"))->withErrors("La connexion est impossible pour le moment, veuillez réessayer plus tard.");
|
|
die();
|
|
}
|
|
}
|
|
} else {
|
|
$userLocal->email_verify_token = Str::uuid();
|
|
$userLocal->save();
|
|
Mail::to($email)->send(new VerifyEmail($userLocal));
|
|
return redirect()->back()->withInput($request->only("email", "password"))->withErrors("Votre compte éxiste mais votre email n'est pas confirmer, merci de vérifier vos emails.");
|
|
}
|
|
|
|
if (Auth::attempt(["email" => $email, "password" => $password], $remember)) {
|
|
if ($userLocal->role === 1)
|
|
return redirect()->route('bo.dashboard');
|
|
return redirect()->route('home');
|
|
} else {
|
|
return redirect()->back()->withInput($request->only('email', 'remember'))->withErrors('Les identifiants entrés sont incorrects.');
|
|
}
|
|
} else {
|
|
return redirect()->back()->withInput($request->only('email', 'remember'))->withErrors('Les identifiants entrés sont incorrects.');
|
|
}
|
|
|
|
|
|
}
|
|
|
|
public function logout() {
|
|
Auth::logout();
|
|
return redirect()->route('home');
|
|
}
|
|
|
|
public function confirmEmail($verifyToken) {
|
|
$result = false;
|
|
$user = User::where('email_verify_token', $verifyToken)->first();
|
|
if (!$user)
|
|
return view('front.basic.confirm-email', compact('result'));
|
|
|
|
try {
|
|
$cpcConnect = new CPCConnection(config('crm.CRM_PLATOS_WSDL'), config('crm.WS_SERVCE_LOGIN'), config('crm.WS_SERVCE_PASSWORD'));
|
|
$cpcConnect->connect();
|
|
try {
|
|
$cpcConnect->activateUser($user->crm_id);
|
|
$user->email_verified = 1;
|
|
$user->save();
|
|
$result = true;
|
|
} catch (Exception $e) {
|
|
return view('front.basic.confirm-email', compact('result'));
|
|
}
|
|
} catch (Exception $e) {
|
|
return view('front.basic.confirm-email', compact('result'));
|
|
}
|
|
|
|
return view('front.basic.confirm-email', compact('result'));
|
|
}
|
|
|
|
public function forgotPassword(Request $request) {
|
|
$token = isset($request->token) ? $request->token : NULL;
|
|
if ($token !== NULL) {
|
|
if (! $request->hasValidSignature())
|
|
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 view('front.basic.forgot-password', compact('tokenValid'))->withErrors('Le lien de changement du mot de passe est incorrect.');
|
|
$tokenValid = true;
|
|
return view('front.basic.forgot-password', compact('tokenValid', 'token'));
|
|
} else {
|
|
return view('front.basic.forgot-password');
|
|
}
|
|
}
|
|
|
|
public function mailPassword(Request $request) {
|
|
$email = filter_var($request->email, FILTER_SANITIZE_STRING);
|
|
$user = User::where('email', $email)->first();
|
|
if ($user) {
|
|
$user->password_token = Str::uuid();
|
|
$user->save();
|
|
$settings = Settings::find(1);
|
|
Mail::to($email)->send(new PasswordReset($user, $settings));
|
|
return redirect()->route('login')->with('success', 'Un mail de réinitialisation de votre mot de passe vous a été envoyé(e).');
|
|
} else {
|
|
return redirect()->back()->withInput($request->only('email'))->withErrors("Le mail que vous avez entré n'est pas enregistré dans nos services.");
|
|
}
|
|
}
|
|
|
|
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 redirect()->back()->withErrors('Le lien de changement de votre mot de passe est incorrect, veuillez réessayer.');
|
|
$newPassword = $request->password;
|
|
$user->password = Hash::make($newPassword);
|
|
$user->password_token = null;
|
|
$user->save();
|
|
return redirect()->route('login')->with('success', 'Vous pouvez désormais vous connecter avec votre nouveau mot de passe.');
|
|
}
|
|
}
|