<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Mailer\MailerInterface;
use App\Fonctions\Fonctions;
use Symfony\Component\Mime\Email;
use Symfony\Bridge\Twig\Mime\TemplatedEmail;
use App\Repository\TempsVerifRepository;
use App\Entity\TempsVerif;
use Symfony\Component\Mime\Address;
use Symfony\Component\Mailer\Exception\TransportExceptionInterface;
use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
class AuthenticationController extends AbstractController
{
public function __construct(SessionInterface $session,Fonctions $fonct,EntityManagerInterface $em)
{
$this->session = $session;
$this->em = $em;
$this->fonct = $fonct;
}
#[Route(path: '/', name: 'app_login')]
public function login(AuthenticationUtils $authenticationUtils): Response
{
if ($this->getUser()) {
return $this->redirectToRoute('app_home');
}
// get the login error if there is one
$error = $authenticationUtils->getLastAuthenticationError();
// last username entered by the user
$lastUsername = $authenticationUtils->getLastUsername();
return $this->render('security/login.html.twig', ['last_username' => $lastUsername, 'error' => $error]);
}
#[Route('/verification/compte', name: 'verification_compte')]
public function verification_compte(MailerInterface $mailer,Request $request,UserPasswordHasherInterface $passwordHasher,EntityManagerInterface $manger,TempsVerifRepository $TempsVerifRepository): Response
{
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
$recup_temp = $TempsVerifRepository->findOneBy(['id'=>1]);
$tempVerif=$recup_temp->getTemps();
if ($request->request->count()>0){
$code_1=$request->request->get('code_1');
$code_2=$request->request->get('code_2');
$code_3=$request->request->get('code_3');
$code_4=$request->request->get('code_4');
$code_5=$request->request->get('code_5');
$code_6=$request->request->get('code_6');
$code=$code_1.$code_2.$code_3.$code_4.$code_5.$code_6;
$user=$this->getUser();
$code_verfier=$this->session->get('code_verif');
$date=$this->session->get('date');
$DateNow = new \DateTime('now');
$int = $DateNow->diff($date);
$TempsRestant=($int->d * 24 * 60) + ($int->h * 60) + $int->i;
if ($TempsRestant<=$tempVerif) {
if( password_verify($code, $code_verfier)) {
$this->session->set('code_verif','');
$this->session->set('active_fonction',1);
$user=$this->getUser();
$action="verification Compte utilisateur";
$statut="Success";
$msg="Verification effectuée avec succés ";
$entity="User";
$identity="";
$old_v="";
$new_v="";
$log=$this->fonct->log($user,$action,$statut,$msg,$entity,$identity,$old_v,$new_v);
$this->em->persist($log);
$this->em->flush();
return $this->redirectToRoute('app_home');
}else{
$user=$this->getUser();
$action="verification Compte utilisateur";
$statut="Echouée";
$msg="Erreur, code de verification incorrect ";
$entity="User";
$identity="";
$old_v="";
$new_v="";
$log=$this->fonct->log($user,$action,$statut,$msg,$entity,$identity,$old_v,$new_v);
$this->em->persist($log);
$this->em->flush();
return $this->render('security/verification_compte.html.twig', [
'controller_name' => 'AccueilController',
'temps'=>$tempVerif,
'error' => 'Erreur, code de verification incorrect ',
]);
}
// code...
}else{
$user=$this->getUser();
$action="verification Compte utilisateur";
$statut="Echouée";
$msg="Erreur, code de verification a expiré, veuillez vous connectez a nouveau merci ";
$entity="User";
$identity="";
$old_v="";
$new_v="";
$log=$this->fonct->log($user,$action,$statut,$msg,$entity,$identity,$old_v,$new_v);
$this->em->persist($log);
$this->em->flush();
return $this->render('security/verification_compte.html.twig', [
'controller_name' => 'expire',
'temps'=>$tempVerif,
'error' => 'Erreur, code de verification a expiré, veuillez vous connectez a nouveau merci ',
]);
}
}
return $this->render('security/verification_compte.html.twig', [
'controller_name' => 'AccueilController',
'temps'=>$tempVerif,
'error' => '',
]);
}
#[Route(path: '/logout', name: 'app_logout')]
public function logout(): void
{
throw new \LogicException('This method can be blank - it will be intercepted by the logout key on your firewall.');
}
#[Route(path: '/first_logout', name: 'first_logout')]
public function first_logout()
{
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
return $this->render('security/statut.html.twig', [
'controller_name' => 'AccueilController',
'error' => '',
]);
}
#[Route(path: '/access_denied', name: 'access_denied')]
public function access_denied()
{
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
$user=$this->getUser();
$action="Acces page";
$statut="Echouée";
$msg="access denied sur cette page";
$entity="User";
$identity="";
$old_v="";
$new_v="";
$log=$this->fonct->log($user,$action,$statut,$msg,$entity,$identity,$old_v,$new_v);
$this->em->persist($log);
$this->em->flush();
$this->addFlash('access_denied',"Vous n'avez acces sur cette page, veuillez contacter votre superviseur");
return $this->render('security/access_denied.html.twig', [
'controller_name' => 'AccueilController',
'error' => '',
]);
}
////////////////sakina////////////
#[Route('/temps_verif', name: 'temps_verif')]
public function temps_verif(Request $request,TempsVerifRepository $TempsVerifRepository, EntityManagerInterface $em)
{
$this->denyAccessUnlessGranted('IS_AUTHENTICATED_FULLY');
$this->session->set('select', 3);
$this->session->set('Sousselect',77);
$recup_temp = $TempsVerifRepository->findOneBy(['id'=>1]);
// dd($recup_temp->getTemps());
return $this->render('security/temps_verif_code.html.twig', [
'recup_temp' => $recup_temp,
]);
}
#[Route('/modif_temps', name: 'app_modif_temps', methods: ['GET','POST'])]
public function modif_temps(Request $request, EntityManagerInterface $em,TempsVerifRepository $TempsVerifRepository): Response
{
if ($request->request->count()>0) {
// dd('ok');
$temps = $request->request->get('temps');
$id = $request->request->get('id');
$list_temp=$TempsVerifRepository->findOneBy(['id'=>$id]);
$list_temp->setTemps($temps);
$em->persist($list_temp);
$user=$this->getUser();
$action="Modification temps restant de verification code";
$statut="Success";
$msg="Opération réussi avec susccée";
$entity="User";
$identity="";
$old_v="";
$new_v="";
$log=$this->fonct->log($user,$action,$statut,$msg,$entity,$identity,$old_v,$new_v);
$this->em->persist($log);
$this->em->flush();
// code...
$this->addFlash('success', "Modification éffectuée avec succés");
return $this->redirectToRoute('temps_verif');
}
}
//////////////////endsakina///////////////////////
}