diff --git a/src/Listener/InterceptListener.php b/src/Listener/InterceptListener.php index f5d9586..aab53e9 100644 --- a/src/Listener/InterceptListener.php +++ b/src/Listener/InterceptListener.php @@ -39,7 +39,7 @@ final readonly class InterceptListener { * nor submitting login credentials; so present the login page now */ $this->logger->debug("presenting login page: {$event->getRequest()->getClientIp()}"); $content = $this->twig->render('login.html.twig', [ - 'nonce_value' => $this->makeNonce(), + 'nonce' => $this->makeNonce(), ]); $event->setResponse(new Response($content, Response::HTTP_UNAUTHORIZED, ['Content-Type' => 'text/html'] diff --git a/src/Listener/LoginListener.php b/src/Listener/LoginListener.php index c08eeba..9ab37b9 100644 --- a/src/Listener/LoginListener.php +++ b/src/Listener/LoginListener.php @@ -98,7 +98,7 @@ final readonly class LoginListener { if ($nonceItem->isHit() && $nonceItem->get()) { /* mark nonce as spent */ $nonceItem->set(false); /* invalid */ - $nonceItem->expiresAfter(60); /* keep for 1 minute */ + $nonceItem->expiresAfter(static::NONCE_TTL); /* keep breifly */ $this->noncePool->save($nonceItem); /* token authentication successful, grant access and set response */ @@ -159,7 +159,7 @@ final readonly class LoginListener { if (($nonceItem->isHit() && $nonceItem->get()) || ! $nonceItem->isHit()) { /* mark nonce as spent */ $nonceItem->set(false); /* invalid */ - $nonceItem->expiresAfter(60); /* keep for 1 minute */ + $nonceItem->expiresAfter(static::NONCE_TTL); /* keep breifly */ $this->noncePool->save($nonceItem); /* password authentication successful, grant access and set response */ @@ -239,19 +239,17 @@ final readonly class LoginListener { $status = Response::HTTP_UNAUTHORIZED; $message = $this->config->errorMessage(); } + $answer = [ + 'message' => $message, + 'nonce' => $this->makeNonce(), + ]; if ($json) { $contentType = 'application/json'; - $content = json_encode([ - 'message' => $message, - 'nonce' => $this->makeNonce(), - ]); + $content = json_encode($answer); } else { $contentType = 'text/html'; - $content = $this->twig->render('login.html.twig', [ - 'error_message' => $message, - 'nonce_value' => $this->makeNonce(), - ]); + $content = $this->twig->render('login.html.twig', $answer); } return new Response($content, $status, ["Content-Type" => $contentType]); diff --git a/src/Trait/MakeNonceTrait.php b/src/Trait/MakeNonceTrait.php index 22fc876..1a1f6cf 100644 --- a/src/Trait/MakeNonceTrait.php +++ b/src/Trait/MakeNonceTrait.php @@ -13,7 +13,7 @@ use Symfony\Component\HttpKernel\Exception\HttpException; trait MakeNonceTrait { /* 15 bytes neatly fits in base64 */ private const NONCE_LENGTH = 15; - private const NONCE_TTL = 60; + private const NONCE_TTL = 120; protected readonly CacheItemPoolInterface $noncePool; protected readonly LoggerInterface $logger; diff --git a/templates/login.html.twig b/templates/login.html.twig index d502ed7..4b0c79f 100644 --- a/templates/login.html.twig +++ b/templates/login.html.twig @@ -2,9 +2,9 @@ {% block content %}

{{ env.title }}

-

{{ error_message|default }}

+

{{ message|default }}

- +