<?php
namespace App\Controller;
use App\Entity\User;
use App\Form\RegistrationType;
use App\Notification\EmailNotification;
use App\Security\LoginFormAuthenticator;
use App\Service\NotificationHelper;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
use Symfony\Component\Security\Guard\GuardAuthenticatorHandler;
use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
class SecurityController extends AbstractController
{
/**
* @Route("/login", name="app_login")
*/
public function login(Request $request, AuthenticationUtils $authenticationUtils): Response
{
$targetUrl = ($request->getSession()->has('_security.main.target_path'))?$request->getSession()->get('_security.main.target_path'):$request->headers->get('referer');
if($this->getUser() !== null) {
return $this->redirectToRoute('user_dashboard');
}
// 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, 'referer'=> $targetUrl]);
}
/**
* @Route("/logout", name="app_logout")
*/
public function logout()
{
}
/**
* @Route("/register", name="app_register")
*/
public function register(Request $request, UserPasswordEncoderInterface $passwordEncoder, GuardAuthenticatorHandler $guardHandler, LoginFormAuthenticator $formAuthenticator, EmailNotification $emailNotification, NotificationHelper $notificationHelper, EntityManagerInterface $entityManager)
{
$targetUrl = $request->query->get('referer', null);
$request->getSession()->set('targetUrl', $targetUrl);
$form = $this->createForm(RegistrationType::class, null, ['referer' => $targetUrl]);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
/** @var User $user */
$user = $form->getData();
$referer = $form->get('referer')->getData();
$encodedPassword = $passwordEncoder->encodePassword($user, $user->getPassword());
$user->setPassword($encodedPassword);
if (true === $form['agreedTerms']->getData()){
$user->agreedTerms();
}
if($request->getLocale() == 'fr'){
$user->setPole('fr');
}else{
$user->setPole('en');
}
$entityManager->persist($user);
$entityManager->flush();
$this->addFlash('success', 'Création de compte effectuée avec success');
$notificationHelper->addNotificationAtRegistration($user);
if($request->getLocale() == 'fr'){
$subject = 'Votre compte a été créé';
}else{
$subject = 'Your account has been created';
}
$emailNotification->registrationUserAccount($user, $subject);
$autoAuth = $guardHandler->authenticateUserAndHandleSuccess(
$user,
$request,
$formAuthenticator,
'main'
);
if($referer !== "" && $referer!== null && filter_var($referer, FILTER_VALIDATE_URL) !== false) {
return $this->redirect($referer);
} else {
return $this->redirectToRoute('user_dashboard');
}
}
return $this->render('security/register.html.twig', [
'form' => $form->createView(),
]);
}
}