feat(backend): service de configuration avec cache et encryption (#5)
Implémentation du service de configuration dynamique pour le déploiement on-premise de l'application. Nouveaux fichiers : - entities/configuration.entity.ts : Entité TypeORM - modules/config/config.service.ts : Service avec cache et encryption - modules/config/config.module.ts : Module NestJS - modules/config/index.ts : Export centralisé Fonctionnalités : ✅ Cache en mémoire au démarrage (16 configurations) ✅ Chiffrement AES-256-CBC pour valeurs sensibles ✅ Conversion automatique de types (string/number/boolean/json) ✅ Méthodes get/set avec traçabilité ✅ Récupération par catégorie (email/app/security) ✅ Masquage automatique des mots de passe ✅ Support setup wizard (isSetupCompleted) Sécurité : - Clé de chiffrement depuis CONFIG_ENCRYPTION_KEY - Format iv:encrypted pour AES-256-CBC - Mots de passe masqués dans les API Intégration : - AppConfigModule ajouté à app.module.ts - Service global exporté pour utilisation dans toute l'app - Chargement automatique au démarrage (OnModuleInit) Tests : ✅ Build Docker réussi ✅ 16 configurations chargées en cache ✅ Service démarré sans erreur Ref: #5
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
import {
|
||||
Entity,
|
||||
PrimaryGeneratedColumn,
|
||||
Column,
|
||||
ManyToOne,
|
||||
JoinColumn,
|
||||
CreateDateColumn,
|
||||
UpdateDateColumn,
|
||||
} from 'typeorm';
|
||||
import { Users } from './users.entity';
|
||||
|
||||
@Entity('configuration')
|
||||
export class Configuration {
|
||||
@PrimaryGeneratedColumn('uuid')
|
||||
id: string;
|
||||
|
||||
@Column({ type: 'varchar', length: 100, unique: true, nullable: false })
|
||||
cle: string;
|
||||
|
||||
@Column({ type: 'text', nullable: true })
|
||||
valeur: string | null;
|
||||
|
||||
@Column({ type: 'varchar', length: 50, nullable: false })
|
||||
type: 'string' | 'number' | 'boolean' | 'json' | 'encrypted';
|
||||
|
||||
@Column({ type: 'varchar', length: 50, nullable: true })
|
||||
categorie: 'email' | 'app' | 'security' | null;
|
||||
|
||||
@Column({ type: 'text', nullable: true })
|
||||
description: string | null;
|
||||
|
||||
@UpdateDateColumn({ name: 'modifie_le' })
|
||||
modifieLe: Date;
|
||||
|
||||
@ManyToOne(() => Users, { nullable: true })
|
||||
@JoinColumn({ name: 'modifie_par' })
|
||||
modifiePar: Users | null;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user