<?php
/**
* @copyright Copyright (c) 2022 Biceps
*/
namespace Biceps\DocumentBundle\Controller;
use Biceps\DocumentBundle\Entity\User;
use Exception;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\PasswordHasher\Hasher\PasswordHasherFactoryInterface;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
class SecurityController extends AbstractController
{
/**
* @Route("/login", name="login")
*/
public function login(Request $request, AuthenticationUtils $authUtils): Response
{
if (!$this->getUser()) {
$request->getSession()->set('lock', false);
}
$error = $authUtils->getLastAuthenticationError();
return $this->render('@Document/Security/login.html.twig', [
'last_username' => $authUtils->getLastUsername(),
'error' => $error,
'master' => $this->container->getParameter('master'),
]);
}
/**
* @Route("/logout", name="logout")
*/
public function logout(Request $request): RedirectResponse
{
$request->getSession()->set('lock', false);
return $this->redirectToRoute('login');
}
/**
* @Route("/lock", name="lock")
*/
public function lock(Request $request): Response
{
$session = $request->getSession();
if (!$session->get('lock', false)) {
$request->getSession()->set('lock', 'dashboard');
}
return $this->render('@Document/Security/lock.html.twig');
}
/**
* @Route("/unlock", name="unlock")
*/
public function unlock(Request $request, PasswordHasherFactoryInterface $hasher): RedirectResponse
{
$redirectTo = false;
$session = $request->getSession();
/** @var User $user */
$user = $this->getUser();
if ($user) {
$redirectTo = $session->get('lock');
$encoder = $hasher->getPasswordHasher($user);
if ($encoder->verify($user->getPassword(), $request->request->get('password', false), $user->getSalt())) {
$session->set('lock', false);
} else {
$redirectTo = 'lock';
}
}
try {
return $this->redirectToRoute($redirectTo ?: 'dashboard');
}catch(Exception $e){
return $this->redirectToRoute('dashboard');
}
}
}