2020-10-29 15:40:23 +01:00
< ? php
namespace App\Http\Controllers ;
2020-11-02 16:18:06 +01:00
use App\Mail\PasswordReset ;
2020-10-30 16:12:14 +01:00
use App\Mail\VerifyEmail ;
2020-11-12 17:22:54 +01:00
use App\Models\Settings ;
2020-10-29 15:40:23 +01:00
use Illuminate\Http\Request ;
use Illuminate\Support\Facades\Auth ;
2020-10-30 16:12:14 +01:00
use Illuminate\Support\Str ;
2020-10-29 15:40:23 +01:00
use App\User ;
use CPCConnection ;
use Exception ;
2020-11-02 16:18:06 +01:00
use Illuminate\Support\Facades\Hash ;
2020-10-30 16:12:14 +01:00
use Illuminate\Support\Facades\Mail ;
2020-10-29 15:40:23 +01:00
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 ) {
2020-10-30 16:12:14 +01:00
if ( $userLocal -> email_verified === 1 ) {
if ( $userLocal -> role !== 1 ) {
2020-10-29 15:40:23 +01:00
try {
2020-10-30 16:12:14 +01:00
$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. " );
}
2020-10-29 15:40:23 +01:00
} catch ( Exception $e ) {
2020-10-30 16:12:14 +01:00
return redirect () -> back () -> withInput ( $request -> only ( " email " , " password " )) -> withErrors ( " La connexion est impossible pour le moment, veuillez réessayer plus tard. " );
die ();
2020-10-29 15:40:23 +01:00
}
}
2020-10-30 16:12:14 +01:00
} 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. " );
2020-10-29 15:40:23 +01:00
}
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' );
}
2020-10-30 16:12:14 +01:00
public function confirmEmail ( $verifyToken ) {
$result = false ;
$user = User :: where ( 'email_verify_token' , $verifyToken ) -> first ();
if ( ! $user )
return view ( 'front.basic.confirm-email' , compact ( 'result' ));
2020-11-13 17:42:59 +01:00
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' ));
}
2020-10-30 16:12:14 +01:00
return view ( 'front.basic.confirm-email' , compact ( 'result' ));
}
2020-11-02 16:18:06 +01:00
2020-11-12 17:22:54 +01:00
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. " );
2020-11-02 16:18:06 +01:00
$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 ();
2020-11-12 17:22:54 +01:00
$settings = Settings :: find ( 1 );
Mail :: to ( $email ) -> send ( new PasswordReset ( $user , $settings ));
2020-11-02 16:18:06 +01:00
return redirect () -> route ( 'login' ) -> with ( 'success' , 'Un mail de réinitialisation de votre mot de passe vous a été envoyé(e).' );
} else {
2020-11-12 17:22:54 +01:00
return redirect () -> back () -> withInput ( $request -> only ( 'email' )) -> withErrors ( " Le mail que vous avez entré n'est pas enregistré dans nos services. " );
2020-11-02 16:18:06 +01:00
}
}
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.' );
}
2020-10-29 15:40:23 +01:00
}