<?php
namespace App\Controller;
use App\Api\BrcBackend\Exception\UnauthorizedException;
use App\Form\LoginType;
use App\Service\Auth\UserAuthManager;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Form\FormError;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Contracts\Translation\TranslatorInterface;
final class AuthController extends AbstractController
{
/**
* @Route("/login", name="login", methods={"GET", "POST"})
*
* @param Request $request
* @param UserAuthManager $authManager
* @param TranslatorInterface $translator
*
* @return Response
*/
public function login(Request $request, UserAuthManager $authManager, TranslatorInterface $translator): Response
{
if ($authManager->isAuthenticated()) {
return $this->redirectToRoute('user_edit_company');
}
$form = $this->createForm(LoginType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
try {
$authManager->login($form->getData());
return $this->redirectToRoute('user_edit_company');
} catch (UnauthorizedException $ex) {
$form->addError(new FormError($translator->trans('login.form.invalid_credentials')));
} catch (\Throwable $ex) {
$form->addError(new FormError($translator->trans('login.form.service_unavailable')));
}
}
return $this->render('auth/login.html.twig', [
'form' => $form->createView(),
]);
}
/**
* @Route("/logout", name="logout", methods={"GET"})
*
* @param UserAuthManager $authManager
*
* @return Response
*/
public function logout(UserAuthManager $authManager): Response
{
if ($authManager->isAuthenticated()) {
$authManager->clear();
}
return $this->redirectToRoute('login');
}
}