diff --git a/config/packages/security.yaml b/config/packages/security.yaml index 1dd6caa..f10228d 100644 --- a/config/packages/security.yaml +++ b/config/packages/security.yaml @@ -33,6 +33,12 @@ security: # https://symfony.com/doc/current/security/impersonating_user.html # switch_user: true + remember_me: + secret: '%kernel.secret%' + # three weeks lifetime (in seconds) + lifetime: 1814400 + token_provider: + doctrine: true # Easy way to control access for large sections of your site # Note: Only the *first* access control that matches will be used diff --git a/migrations/Version20241201211313.php b/migrations/Version20241201211313.php new file mode 100644 index 0000000..352b455 --- /dev/null +++ b/migrations/Version20241201211313.php @@ -0,0 +1,32 @@ +addSql('CREATE TABLE rememberme_token (series VARCHAR(88) NOT NULL, value VARCHAR(88) NOT NULL, lastUsed DATETIME NOT NULL --(DC2Type:datetime_immutable) + , class VARCHAR(100) NOT NULL, username VARCHAR(200) NOT NULL, PRIMARY KEY(series))'); + } + + public function down(Schema $schema): void + { + // this down() migration is auto-generated, please modify it to your needs + $this->addSql('DROP TABLE rememberme_token'); + } +} diff --git a/src/Controller/SecurityController.php b/src/Controller/SecurityController.php index 76bf5c4..dc7de33 100644 --- a/src/Controller/SecurityController.php +++ b/src/Controller/SecurityController.php @@ -7,7 +7,9 @@ use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; use Symfony\Component\Security\Http\Authentication\AuthenticationUtils; -class SecurityController extends AbstractController +use App\Controller\WebrootController; + +class SecurityController extends WebrootController { #[Route(path: '/login', name: 'app_login')] public function login(AuthenticationUtils $authenticationUtils): Response @@ -18,10 +20,16 @@ class SecurityController extends AbstractController // last username entered by the user $lastUsername = $authenticationUtils->getLastUsername(); - return $this->render('security/login.html.twig', [ - 'last_username' => $lastUsername, - 'error' => $error, - ]); + return $this->render('security/login.html.twig', array_merge( + $this->getControllerVariables(), [ + 'login_title' => $this->trans("login.title",domain:"security"), + 'login_button' => $this->trans("login.button",domain:"security"), + 'login_username' => $this->trans("login.username",domain:"security"), + 'login_password' => $this->trans("login.password",domain:"security"), + 'login_remember_me' => $this->trans("login.remember_me",domain:"security"), + 'last_username' => $lastUsername, + 'error' => $error, + ])); } #[Route(path: '/logout', name: 'app_logout')] diff --git a/src/Controller/WebrootController.php b/src/Controller/WebrootController.php index 1c52a2b..6afe151 100644 --- a/src/Controller/WebrootController.php +++ b/src/Controller/WebrootController.php @@ -5,16 +5,23 @@ namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; -use \Symfony\Component\HttpKernel\KernelInterface; +use Symfony\Component\HttpKernel\KernelInterface; +use Symfony\Contracts\Translation\TranslatorInterface; +use App\Utility\NullTranslator; abstract class WebrootController extends AbstractController { private ?string $project_dir = null; + private ?TranslatorInterface $tranlsator = null; + protected ?NullTranslator $nulltranslator = null; - public function __construct(KernelInterface $kernel) + + public function __construct(KernelInterface $kernel,TranslatorInterface $translator) { $this->project_dir = $kernel->getProjectDir(); + $this->translator = $translator; + $this->nulltranslator = new NullTranslator(); } public function getHeaderTitleFiglet(): ?string @@ -39,4 +46,9 @@ abstract class WebrootController extends AbstractController "header_title" => $this->getHeaderTitleFiglet(), ]; } + + public function trans(string $message,array $args=[],string $domain="messages",?string $locale=null): string + { + return $this->translator->trans($message,$args,domain:$domain,locale:$locale); + } } diff --git a/templates/base.html.twig b/templates/base.html.twig index 647c7bd..e7acb20 100644 --- a/templates/base.html.twig +++ b/templates/base.html.twig @@ -21,7 +21,6 @@ __ _____| |__ _ __ ___ ___ | |_ \ \ /\ / / _ \ '_ \| '__/ _ \ / _ \| __| \ V V / __/ |_) | | | (_) | (_) | |_ \_/\_/ \___|_.__/|_| \___/ \___/ \__| -123 {% endif %} {% endblock %} diff --git a/templates/security/login.html.twig b/templates/security/login.html.twig index 9b6579e..75eba16 100644 --- a/templates/security/login.html.twig +++ b/templates/security/login.html.twig @@ -2,7 +2,7 @@ {% block title %}Log in!{% endblock %} -{% block body %} +{% block main %}
+ {% endblock %} diff --git a/translations/security.de.yaml b/translations/security.de.yaml index 0eb2ebc..1dd673f 100644 --- a/translations/security.de.yaml +++ b/translations/security.de.yaml @@ -17,3 +17,9 @@ 'Invalid or expired login link.': 'Ungültiger oder abgelaufener Anmelde-Link.' 'Too many failed login attempts, please try again in %minutes% minute.': 'Zu viele fehlgeschlagene Anmeldeversuche, bitte versuchen Sie es in einer Minute noch einmal.' 'Too many failed login attempts, please try again in %minutes% minutes.': 'Zu viele fehlgeschlagene Anmeldeversuche, bitte versuchen Sie es in %minutes% Minuten noch einmal.' +login: + title: "Bitte melde dich an" + button: "Anmelden" + username: "Nutzername" + password: "Passwort" + remember_me: "An mich erinnern" diff --git a/translations/security.en.yaml b/translations/security.en.yaml index a71ad4e..b7048d2 100644 --- a/translations/security.en.yaml +++ b/translations/security.en.yaml @@ -17,3 +17,9 @@ 'Invalid or expired login link.': 'Invalid or expired login link.' 'Too many failed login attempts, please try again in %minutes% minute.': 'Too many failed login attempts, please try again in %minutes% minute.' 'Too many failed login attempts, please try again in %minutes% minutes.': 'Too many failed login attempts, please try again in %minutes% minutes.' +login: + title: "Please sign in" + button: "Log me in" + username: "Username" + password: "Password" + remember_me: "Remember me"