Le champ de connexion accepte désormais les deux :
- Si la saisie contient un @, Auth::attempt() cherche par email
- Sinon, cherche par name
Champ renommé login dans le formulaire et la LoginRequest.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Dark mode complet : darkMode:'class' Tailwind, sélecteur clair/sombre/auto
dans la navigation (mémorisé dans localStorage, sans flash au chargement) ;
53 vues et 8 composants Breeze mis à jour avec classes dark:
- Composant user-picker : fenêtre modale avec recherche temps réel (nom/email)
remplace les <select> d'ajout de membres dans sections et sources
- Paramètres : option "Désactiver la vérification automatique des mises à jour"
(case à cochage auto-soumise, route POST parametres/updates)
- Panneau "Paramètres généraux" remonté en tête de la page de paramètres
- README recentré sur l'installation manuelle hébergement PHP+MySQL
- VERSION 1.0.1
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Paramètres du site :
- Nouvelle section "Serveur SMTP" avec host, port, chiffrement,
identifiant, mot de passe, adresse/nom d'expéditeur
- Bouton "Envoyer un e-mail de test" (AJAX via Symfony EsmtpTransport) :
tente la connexion + envoie un message réel à l'admin
- Badge "Configuré — 2FA actif" quand SMTP est en place
- Suppression de la configuration possible
Authentification 2FA :
- Si SMTP configuré : après validation identifiant/mot de passe,
l'utilisateur est déconnecté, un PIN à 6 chiffres est généré,
haché (bcrypt) et stocké en session, envoyé par e-mail (10 min)
- Page /2fa : saisie du PIN, bouton "Renvoyer le code", retour login
- Si l'envoi e-mail échoue : fallback sans 2FA (logue l'erreur)
- Si SMTP non configuré : login standard inchangé
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>