<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
use App\Utils\Utils;
use App\Entity\User;
use App\Entity\Question;
use App\Entity\Reponse;
class HomeController extends AbstractController
{
private $passwordEncoder;
public function __construct(UserPasswordEncoderInterface $passwordEncoder)
{
$this->passwordEncoder = $passwordEncoder;
}
/**
* @Route("/", name="home")
*/
public function index()
{
return $this->redirectToRoute('app_login');
}
/**
* @Route("/forgot", name="forgot_pwd")
*/
public function forgotPwd(Request $request)
{
$em = $this->getDoctrine()->getManager();
$path=$this->getParameter('log_directory');
if($request->request->get('username')!=null && $request->request->get('username')!=''){
$user=$em->getRepository(User::class)->findOneByUsername($request->request->get('username'));
if($user!=null){
//get user's responses
$responses=$em->getRepository(Reponse::class)->findBy(array('user'=>$user));
if($responses==null || count($responses)!=3){
return $this->render('security/forgot.html.twig', ['error'=>'Désolé vous ne pouvez poursuivre la procédure car vous n\'avez pas fourni de réponses aux questions secrètes lors de votre première connexion.']);
}
$questions=array();
foreach ($responses as $value) {
array_push($questions, $value->getQuestion());
}
return $this->render('security/question.html.twig', ['questions'=>$questions,'user'=>$user]);
}
return $this->render('security/forgot.html.twig', ['error'=>'Aucun compte avec ce nom d\'utilisateur n\'a été trouvé, vérifiez votre saisie.']);
}
return $this->render('security/forgot.html.twig', []);
}
/**
* @Route("/forgot/check", name="response_check")
*/
public function responseCheck(Request $request)
{
$em = $this->getDoctrine()->getManager();
$user=$em->getRepository(User::class)->find($request->request->get('user'));
//check each response
$responses=$em->getRepository(Reponse::class)->findBy(array('user'=>$user));
$resp1=false;
$resp2=false;
$resp3=false;
foreach ($responses as $item) {
if($item->getQuestion()->getId()==$request->request->get('question1')){
if($item->getValeur()==$request->request->get('response1'))
$resp1=true;
}
else if($item->getQuestion()->getId()==$request->request->get('question2')){
if($item->getValeur()==$request->request->get('response2'))
$resp2=true;
}
else if($item->getQuestion()->getId()==$request->request->get('question3')){
if($item->getValeur()==$request->request->get('response3'))
$resp3=true;
}
}
if($resp1 && $resp2 && $resp3)
return $this->render('security/password.html.twig', ['user'=>$user]);
//in case of wrong validation
$questions=array();
foreach ($responses as $value) {
array_push($questions, $value->getQuestion());
}
return $this->render('security/question.html.twig', ['questions'=>$questions,'user'=>$user,'error'=>'Désolé mais vos réponses ne sont pas correctes, vérifiez les et recommencez.']);
}
/**
* @Route("/forgot/password", name="forgot_password")
*/
public function passwordForgot(Request $request)
{
$em = $this->getDoctrine()->getManager();
$user=$em->getRepository(User::class)->find($request->request->get('user'));
$user->setPassword($this->passwordEncoder->encodePassword(
$user,
$request->request->get('password')
));
$em->persist($user);
$em->flush();
return $this->redirectToRoute('app_login');
}
}