<?php
namespace App\Controller\UserBack;
use App\Entity\UserBack\UserBack;
use App\Form\UserBack\NewPasswordType;
use App\Form\UserBack\ResetPasswordType;
use App\Service\Common\DomainManager;
use App\Service\SecurityManager;
use App\Service\UserBack\UserBackManager;
use Exception;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Contracts\Translation\TranslatorInterface;
/**
* Class SecurityController
* @package App\Controller\UserBack
*/
class SecurityController extends AbstractController
{
/**
* @var SecurityManager
*/
private $securityManager;
/**
* @var TranslatorInterface
*/
private $translator;
/**
* @var UserBackManager
*/
private $userBackManager;
public function __construct(
SecurityManager $securityManager,
DomainManager $domainManager,
TranslatorInterface $translator,
UserBackManager $userBackManager
)
{
$this->securityManager = $securityManager;
$this->domainManager = $domainManager;
$this->translator = $translator;
$this->userBackManager = $userBackManager;
}
/**
* @Route("/login", name="login")
* @param AuthenticationUtils $authenticationUtils
* @return Response
*/
public function login(AuthenticationUtils $authenticationUtils): Response
{
$error = $authenticationUtils->getLastAuthenticationError();
$lastUsername = $authenticationUtils->getLastUsername();
return $this->render('user-back/login.html.twig', [
'lastUsername' => $lastUsername,
'error' => $error
]);
}
/**
* verify if user have a reset password
* verify if token is valid
* verify if the link is not expired
* update password user
* redirect to dashboard logged (enjoy \o/)
* @Route("/new-password", name="new_password")
* @param Request $request
* @return Response
* @throws Exception
*/
public function createPassword(Request $request): Response
{
$form = $this->createForm(NewPasswordType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
if (!$this->securityManager->createPassword($form)) {
return $this->redirectToRoute('reset_password');
}
return $this->redirectToRoute('home');
}
$this->securityManager->formIsNotValid($form);
return $this->render("user-back/new_password.html.twig", [
'form' => $form->createView(),
]);
}
/**
* @Route("/reset-password", name="reset_password")
* @param Request $request
* @return Response
* @throws Exception
*/
public function resetPassword(Request $request): Response
{
$form = $this->createForm(ResetPasswordType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$email = $form->get('email')->getData();
if (!$email || !$this->securityManager->sendResetPassword($email)) {
$this->addFlash('warning', $this->translator->trans('user.email.no.exist', [], 'users'));
return $this->redirectToRoute('reset_password');
}
return $this->render("user-back/send_password.html.twig", []);
}
return $this->render("user-back/reset_password.html.twig", [
'form' => $form->createView(),
]);
}
/**
* @Route("/user-back/edit/{uuid}/password", name="user_back_password")
* @param Request $request
* @param UserBack $userBack
* @return Response
*/
public function resetEditUserBackPassword(Request $request, UserBack $userBack): Response
{
$userBack->setPassword($userBack->getPassword());
$form = $this->createForm(NewPasswordType::class, $userBack);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$this->securityManager->editPassword($userBack);
$this->addFlash('success', $this->translator->trans('password.edit.success', [], 'forms'));
}
$this->securityManager->formIsNotValid($form);
return $this->render("user-back/reset_edit_password.html.twig", [
'userBack' => $userBack,
'form' => $form->createView(),
]);
}
}