feat(security): Ajoute l'authentification Keycloak SSO et migre les commandes

Supprime la commande AccountCommand, la migration et ajoute l'authentification
Keycloak SSO. Crée les vues de base pour le tableau de bord.
```
This commit is contained in:
Serreau Jovann
2026-01-15 18:04:01 +01:00
parent 662bb0bcc6
commit 3b0ce1314f
38 changed files with 1485 additions and 604 deletions

View File

@@ -1,28 +1,56 @@
{% extends 'mails/base.twig' %}
{# base.twig - Modèle d'e-mail MJML #}
<mjml>
<mj-head>
<mj-title>{{ system.subject }}</mj-title>
<mj-attributes>
<mj-all font-family="Inter, Helvetica, Arial, sans-serif"></mj-all>
<mj-text font-size="16px" line-height="24px" color="#333333"></mj-text>
<mj-button background-color="#4A90E2" color="#ffffff" border-radius="4px" font-size="16px" padding="10px 25px"></mj-button>
</mj-attributes>
<mj-style inline="inline">
.link-style {
color: #4A90E2;
text-decoration: none;
}
.footer-text {
font-size: 12px;
color: #888888;
}
</mj-style>
</mj-head>
<mj-body background-color="#F2F2F2">
{# Section d'en-tête #}
<mj-section background-color="#ffffff" padding-bottom="0px">
<mj-column>
{# Logo mis à jour pour SARL SITECONSEIL #}
<mj-image src="{{ system.path }}{{ asset('assets/images/logo.png') }}" alt="Logo LudikEvent" align="center" width="150px" padding-bottom="20px"></mj-image>
</mj-column>
</mj-section>
{% block content %}
<mj-text>Bonjour, </mj-text>
{# Section de contenu #}
<mj-section background-color="#ffffff" padding-top="0px" padding-bottom="0px">
{# Titre dynamique ajouté avant le bloc de contenu, directement dans la section #}
<mj-text font-size="20px" font-weight="bold" align="center" padding-bottom="20px">{{ system.subject }}</mj-text>
<mj-column width="100%">
{% block content %}
{% endblock %}
</mj-column>
</mj-section>
{% if 'ROLE_CUSTOMER' in datas.account.roles %}
<mj-text>Nous avons reçu une demande de réinitialisation de mot de passe pour votre espace client.</mj-text>
{% else %}
<mj-text>Nous avons reçu une demande de réinitialisation de mot de passe pour votre compte E-Cosplay.</mj-text>
{% endif %}
{# Section d'espacement #}
<mj-section background-color="#ffffff" padding-top="0px" padding-bottom="20px">
<mj-column>
<mj-spacer height="20px"></mj-spacer>
</mj-column>
</mj-section>
<mj-text>Pour réinitialiser votre mot de passe, veuillez cliquer sur le bouton ci-dessous. Ce lien est valable pour une durée limitée.</mj-text>
<mj-button href="{{ datas.resetLink }}">
Réinitialiser mon mot de passe
</mj-button>
<mj-text padding-top="20px">
Ce lien expirera le {{ datas.request.expiresAt|date('d/m/Y à H:i') }}.
<br/>
Veuillez l'utiliser avant cette date et heure.
</mj-text>
<mj-text>Si vous n'avez pas demandé cette réinitialisation de mot de passe, veuillez ignorer cet e-mail. Votre mot de passe actuel restera inchangé.</mj-text>
<mj-text padding-top="20px">Cordialement,</mj-text>
<mj-text>L'équipe E-Cosplay</mj-text>
{% endblock %}
{# Section de pied de page #}
<mj-section background-color="#F2F2F2" padding-top="20px" padding-bottom="20px">
<mj-column>
<mj-text align="center" css-class="footer-text">
&copy; {{ "now"|date("Y") }} LudikEvent. Tous droits réservés.
</mj-text>
</mj-column>
</mj-section>
</mj-body>
</mjml>