ajout envoi smtp (paramètres, test envois, envoi à 1 participant). protège vue mot de passe
- ajout filtre page statistiques
This commit is contained in:
144
SETTINGS.md
Normal file
144
SETTINGS.md
Normal file
@@ -0,0 +1,144 @@
|
||||
# Paramètres de l'Application
|
||||
|
||||
## Vue d'ensemble
|
||||
|
||||
L'application dispose maintenant d'un système de paramètres global qui permet de configurer le comportement de l'application. Les paramètres sont organisés par catégories pour une meilleure organisation.
|
||||
|
||||
## Accès aux paramètres
|
||||
|
||||
1. Connectez-vous à l'interface d'administration
|
||||
2. Cliquez sur le bouton "Paramètres" dans la barre d'outils
|
||||
3. Vous accédez à la page de configuration des paramètres
|
||||
|
||||
## Catégories de paramètres
|
||||
|
||||
### Affichage
|
||||
|
||||
Cette catégorie contient les paramètres liés à l'affichage de l'interface utilisateur.
|
||||
|
||||
#### Ordre aléatoire des propositions
|
||||
|
||||
- **Clé** : `randomize_propositions`
|
||||
- **Type** : Booléen (true/false)
|
||||
- **Valeur par défaut** : `false`
|
||||
- **Description** : Lorsque activé, les propositions sont affichées dans un ordre aléatoire pour chaque participant lors du vote.
|
||||
|
||||
**Comportement :**
|
||||
- **Désactivé (Off)** : Les propositions sont affichées dans l'ordre chronologique de création
|
||||
- **Activé (On)** : Les propositions sont mélangées aléatoirement pour chaque participant
|
||||
|
||||
**Impact :**
|
||||
- Ce paramètre affecte uniquement la page de vote (`/campaigns/[id]/vote/[participantId]`)
|
||||
- L'ordre aléatoire est appliqué à chaque chargement de la page
|
||||
- Chaque participant voit un ordre différent, ce qui peut réduire les biais liés à l'ordre d'affichage
|
||||
|
||||
### Email
|
||||
|
||||
Cette catégorie contient les paramètres de configuration SMTP pour l'envoi d'emails automatiques.
|
||||
|
||||
#### Configuration SMTP
|
||||
|
||||
- **smtp_host** : Serveur SMTP (ex: smtp.gmail.com)
|
||||
- **smtp_port** : Port SMTP (ex: 587 pour TLS, 465 pour SSL)
|
||||
- **smtp_username** : Nom d'utilisateur SMTP
|
||||
- **smtp_password** : Mot de passe SMTP (chiffré automatiquement)
|
||||
- **smtp_secure** : Connexion sécurisée SSL/TLS (booléen)
|
||||
- **smtp_from_email** : Adresse email d'expédition
|
||||
- **smtp_from_name** : Nom d'expédition
|
||||
|
||||
**Sécurité :**
|
||||
- Le mot de passe SMTP est automatiquement chiffré avec AES-256-GCM avant stockage
|
||||
- La clé de chiffrement est dérivée de `SUPABASE_ANON_KEY`
|
||||
- Seules les personnes ayant accès à la clé peuvent déchiffrer le mot de passe
|
||||
|
||||
**Fonctionnalités :**
|
||||
- Test de connexion SMTP intégré
|
||||
- Envoi d'email de test avec template HTML
|
||||
- Validation des paramètres avant sauvegarde
|
||||
- Interface avec masquage du mot de passe
|
||||
- Sauvegarde automatique avec feedback visuel
|
||||
|
||||
## Structure technique
|
||||
|
||||
### Base de données
|
||||
|
||||
La table `settings` contient les paramètres :
|
||||
|
||||
```sql
|
||||
CREATE TABLE settings (
|
||||
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
|
||||
key TEXT NOT NULL UNIQUE,
|
||||
value TEXT NOT NULL,
|
||||
category TEXT NOT NULL,
|
||||
description TEXT,
|
||||
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
|
||||
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
|
||||
);
|
||||
```
|
||||
|
||||
### Services
|
||||
|
||||
Le service `settingsService` fournit les méthodes suivantes :
|
||||
|
||||
- `getAll()` : Récupère tous les paramètres
|
||||
- `getByCategory(category)` : Récupère les paramètres d'une catégorie
|
||||
- `getByKey(key)` : Récupère un paramètre par sa clé
|
||||
- `getValue(key, defaultValue)` : Récupère la valeur d'un paramètre
|
||||
- `getBooleanValue(key, defaultValue)` : Récupère la valeur booléenne d'un paramètre
|
||||
- `setValue(key, value)` : Définit la valeur d'un paramètre
|
||||
- `setBooleanValue(key, value)` : Définit la valeur booléenne d'un paramètre
|
||||
- `getSmtpSettings()` : Récupère tous les paramètres SMTP
|
||||
- `setSmtpSettings(settings)` : Sauvegarde les paramètres SMTP avec chiffrement
|
||||
- `testSmtpConnection(settings)` : Teste la connexion SMTP
|
||||
- `sendTestEmail(settings, toEmail)` : Envoie un email de test
|
||||
|
||||
### Chiffrement
|
||||
|
||||
Le service `encryptionService` fournit les méthodes suivantes :
|
||||
|
||||
- `encrypt(value)` : Chiffre une valeur avec AES-256-GCM
|
||||
- `decrypt(encryptedValue)` : Déchiffre une valeur chiffrée
|
||||
- `isEncrypted(value)` : Vérifie si une valeur est chiffrée
|
||||
- `mask(value)` : Masque une valeur pour l'affichage
|
||||
|
||||
### Utilisation dans le code
|
||||
|
||||
```typescript
|
||||
import { settingsService } from '@/lib/services';
|
||||
|
||||
// Récupérer un paramètre booléen
|
||||
const randomizePropositions = await settingsService.getBooleanValue('randomize_propositions', false);
|
||||
|
||||
// Utiliser le paramètre
|
||||
if (randomizePropositions) {
|
||||
// Mélanger les propositions
|
||||
propositions.sort(() => Math.random() - 0.5);
|
||||
}
|
||||
|
||||
// Récupérer les paramètres SMTP
|
||||
const smtpSettings = await settingsService.getSmtpSettings();
|
||||
|
||||
// Envoyer un email de test
|
||||
const result = await settingsService.sendTestEmail(smtpSettings, 'test@exemple.com');
|
||||
```
|
||||
|
||||
## Migration
|
||||
|
||||
Pour ajouter la table des paramètres à une base de données existante :
|
||||
|
||||
1. **Paramètres de base** : Exécutez le script SQL dans `migration-settings.sql` dans l'éditeur SQL de Supabase
|
||||
2. **Paramètres SMTP** : Exécutez ensuite le script SQL dans `migration-smtp-settings.sql`
|
||||
|
||||
## Ajout de nouveaux paramètres
|
||||
|
||||
Pour ajouter un nouveau paramètre :
|
||||
|
||||
1. Ajoutez l'insertion dans le script de migration
|
||||
2. Utilisez le service `settingsService` dans votre code
|
||||
3. Mettez à jour cette documentation
|
||||
|
||||
## Sécurité
|
||||
|
||||
- Tous les paramètres sont accessibles en lecture publique
|
||||
- Seuls les administrateurs peuvent modifier les paramètres via l'interface d'administration
|
||||
- Les paramètres sont protégés par l'AuthGuard
|
||||
Reference in New Issue
Block a user