<?php
namespace Entrepreneurs\Bundle\FrontBundle\Controller;
use Entrepreneurs\Bundle\Admin\Controller\AdminController;
use Entrepreneurs\Bundle\AppBundle\Propel\EnseignantQuery;
use Entrepreneurs\Bundle\AppBundle\Propel\EnseignantStatut;
use Entrepreneurs\Bundle\AppBundle\Propel\EntrepreneurQuery;
use Entrepreneurs\Bundle\AppBundle\Propel\EntrepreneurStatut;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
use Symfony\Component\Security\Core\Encoder\EncoderFactoryInterface;
use Symfony\Component\Security\Core\Exception\BadCredentialsException;
class SecurityController extends AdminController
{
/**
* @Route(name="front_homepage", path="/")
*/
public function connexionAction(Request $request, EncoderFactoryInterface $factory, TokenStorageInterface $tokenStorage): Response
{
$session = $request->getSession()->all();
$spaces = [
'_security_entrepreneur' => 'entrepreneur_homepage',
'_security_enseignant' => 'enseignant_homepage',
];
foreach ($spaces as $space => $route) {
if (isset($session[$space])) {
return $this->redirectToRoute($route);
}
}
$template = 'Front/Security/connexion.html.twig';
$error = null;
$username = trim($request->request->get('_username'));
$password = trim($request->request->get('_password'));
if ($request->isMethod('post')) {
$user = null;
$provider = null;
if ($request->get('entrepreneur')) {
$template = 'Entrepreneur:Security:connexion.html.twig';
$user = EntrepreneurQuery::create()->findOneByEmail($username);
$route = 'entrepreneur_homepage';
$provider = 'entrepreneur';
if ($user && (EntrepreneurStatut::SUPPRIME == $user->getStatutId() || EntrepreneurStatut::SUSPENDU == $user->getStatutId())) {
$error = new BadCredentialsException('User account is locked.');
return $this->renderTwig($template, [
'last_username' => $username,
'error' => $error,
]);
}
} elseif ($request->get('enseignant')) {
$template = 'Enseignant:Security:connexion.html.twig';
$user = EnseignantQuery::create()->findOneByEmail($username);
$route = 'enseignant_homepage';
$provider = 'enseignant';
if ($user && (EnseignantStatut::SUPPRIME == $user->getStatutId() || EnseignantStatut::SUSPENDU == $user->getStatutId())) {
$error = new BadCredentialsException('User account is locked.');
return $this->renderTwig($template, [
'last_username' => $username,
'error' => $error,
]);
}
}
if ($user && $provider && $user->getPassword() && $user->getSalt()) {
$encoder = $factory->getEncoder($user);
if ($encoder->isPasswordValid($user->getPassword(), $password, $user->getSalt())) {
$token = new UsernamePasswordToken($user, $password, $user->getRoles());
$tokenStorage->setToken($token);
$request->getSession()->set('_security_'.$provider, serialize($token));
$request->getSession()->save();
return $this->redirectToRoute($route);
}
}
if ($user && (!$user->getPassword() || !$user->getSalt())) {
$error = new BadCredentialsException('Le compte n\'as pas été activé.');
} else {
$error = new BadCredentialsException('Bad credentials');
}
}
return $this->renderTwig($template, [
'last_username' => $username,
'error' => $error,
]);
}
}