diff --git a/documentation/content/docs/_meta.json b/documentation/content/docs/_meta.json
index 395369b..87e801a 100644
--- a/documentation/content/docs/_meta.json
+++ b/documentation/content/docs/_meta.json
@@ -1,10 +1,27 @@
{
"index": "Introduction",
+ "---core---": {
+ "type": "separator",
+ "label": "Architecture Core"
+ },
"features": "Fonctionnalités",
"stack": "Stack Technologique",
"database": "Modèle de Données",
- "api": "API & Intégrations",
+ "---security---": {
+ "type": "separator",
+ "label": "Sécurité & Conformité"
+ },
"security": "Sécurité",
"compliance": "Conformité (RGPD)",
+ "---api---": {
+ "type": "separator",
+ "label": "Intégrations & API"
+ },
+ "api": "API & Intégrations",
+ "api-reference": "Référence API",
+ "---ops---": {
+ "type": "separator",
+ "label": "Opérations"
+ },
"deployment": "Déploiement & Tests"
}
diff --git a/documentation/content/docs/api-reference.mdx b/documentation/content/docs/api-reference.mdx
new file mode 100644
index 0000000..5aaa090
--- /dev/null
+++ b/documentation/content/docs/api-reference.mdx
@@ -0,0 +1,191 @@
+---
+title: Référence API
+description: Documentation détaillée de tous les points de terminaison de l'API Memegoat.
+---
+
+## 📖 Référence API
+
+Cette page documente tous les points de terminaison disponibles sur l'API Memegoat. L'URL de base de l'API est `https://api.memegoat.fr`.
+
+
+ L'authentification est gérée via des **cookies HttpOnly sécurisés** (`iron-session`). Les tokens ne sont pas exposés dans le corps des réponses après connexion pour une sécurité maximale.
+
+
+### 🔐 Authentification (`/auth`)
+
+
+
+ Inscrit un nouvel utilisateur.
+
+ **Corps de la requête (JSON) :**
+ - `username` (string) : Nom d'utilisateur unique.
+ - `email` (string) : Adresse email valide.
+ - `password` (string) : Mot de passe (min. 8 caractères).
+
+ ```json
+ {
+ "username": "goat_user",
+ "email": "user@memegoat.fr",
+ "password": "strong-password"
+ }
+ ```
+
+
+
+ Authentifie un utilisateur et retourne les jetons de session. Si la 2FA est activée, retourne un indicateur.
+
+ **Corps de la requête :**
+ - `email` (string)
+ - `password` (string)
+
+ **Réponse (Succès) :**
+ ```json
+ {
+ "message": "User logged in successfully",
+ "userId": "uuid-v4"
+ }
+ ```
+ *Note: L'access_token et le refresh_token sont stockés dans un cookie HttpOnly chiffré.*
+
+ **Réponse (2FA requise) :**
+ ```json
+ {
+ "message": "2FA required",
+ "requires2FA": true,
+ "userId": "uuid-v4"
+ }
+ ```
+
+
+
+ Finalise la connexion si la 2FA est requise.
+
+ **Corps de la requête :**
+ - `userId` (uuid) : ID de l'utilisateur.
+ - `token` (string) : Code TOTP à 6 chiffres.
+
+
+
+ Obtient un nouvel `access_token` à partir du `refresh_token` stocké dans la session.
+ Met à jour automatiquement le cookie de session.
+
+
+
+ Invalide la session actuelle.
+
+
+
+### 👤 Utilisateurs (`/users`)
+
+
+
+ Récupère les informations détaillées de l'utilisateur connecté. Requiert l'authentification.
+
+
+
+ Extrait l'intégralité des données de l'utilisateur au format JSON (Conformité RGPD).
+ Contient le profil, les contenus et les favoris.
+
+
+
+ Met à jour les informations du profil.
+ - `displayName` (string)
+
+
+
+ Marque le compte pour suppression (Soft Delete).
+
+ Les données sont définitivement purgées après un délai légal de 30 jours.
+
+
+
+
+ - `POST /users/me/2fa/setup` : Génère un secret et QR Code.
+ - `POST /users/me/2fa/enable` : Active après vérification du jeton.
+ - `POST /users/me/2fa/disable` : Désactive avec jeton.
+
+
+
+ Liste tous les utilisateurs. Réservé aux administrateurs.
+ **Params :** `limit`, `offset`.
+
+
+
+### 🖼️ Contenus (`/contents`)
+
+
+
+ Recherche et filtre les contenus. Ces endpoints sont mis en cache (Redis + Navigateur).
+
+ **Query Params :**
+ - `sort` : `trend` | `recent` (uniquement sur `/explore`)
+ - `tag` (string)
+ - `category` (slug ou id)
+ - `author` (username)
+ - `query` (titre)
+ - `favoritesOnly` (bool)
+
+
+
+ Récupère un contenu par son ID ou son Slug.
+
+ **Détection de Bots (SEO) :**
+ Si l'User-Agent correspond à un robot d'indexation (Googlebot, Twitterbot, etc.), l'API retourne un rendu HTML minimal contenant les méta-tags **OpenGraph** et **Twitter Cards** pour un partage optimal. Pour les autres clients, les données sont retournées en JSON.
+
+
+
+ Upload un fichier avec traitement automatique.
+ **Type :** `multipart/form-data`
+
+ **Champs :**
+ - `file` (binary) : png, jpeg, webp, webm, gif.
+ - `type` : `meme` | `gif`
+ - `title` : string
+ - `categoryId`? : uuid
+ - `tags`? : string[]
+
+
+
+ Incrémente les statistiques de vue ou d'utilisation.
+
+
+
+ Supprime un contenu (Soft Delete). Doit être l'auteur.
+
+
+
+### 📂 Catégories, ⭐ Favoris, 🚩 Signalements
+
+
+
+ - `GET /categories` : Liste toutes les catégories.
+ - `POST /categories` : Création (Admin uniquement).
+
+
+
+ - `GET /favorites` : Liste les favoris de l'utilisateur.
+ - `POST /favorites/:contentId` : Ajoute un favori.
+ - `DELETE /favorites/:contentId` : Retire un favori.
+
+
+
+ - `POST /reports` : Signale un contenu ou un tag.
+ - `GET /reports` : Liste (Modérateurs).
+ - `PATCH /reports/:id/status` : Gère le workflow.
+
+
+
+### 🔑 Clés API & 🏷️ Tags
+
+
+
+ - `POST /api-keys` : Génère une clé `{ name, expiresAt? }`.
+ - `GET /api-keys` : Liste les clés actives.
+ - `DELETE /api-keys/:id` : Révoque une clé.
+
+
+
+ - `GET /tags` : Recherche de tags populaires ou récents.
+ **Params :** `query`, `sort`, `limit`.
+
+
diff --git a/documentation/content/docs/api.mdx b/documentation/content/docs/api.mdx
index 4429ca6..59f3a84 100644
--- a/documentation/content/docs/api.mdx
+++ b/documentation/content/docs/api.mdx
@@ -7,14 +7,18 @@ description: Documentation des API et services tiers
### Documentation API
-Documentation MDX.
+L'API Memegoat est documentée de manière exhaustive dans notre [Référence API](/docs/api-reference).
+Vous y trouverez la liste de tous les points de terminaison, les formats de requête et de réponse, ainsi que les niveaux d'autorisation requis.
### Authentification
-Le système utilise plusieurs méthodes d'authentification sécurisées :
-- **Sessions (JWT)** : Utilisation de JSON Web Tokens signés pour les sessions utilisateurs via le web. Les sessions sont persistées en base de données (`sessions`) pour permettre la révocation (Logout) et le suivi des appareils connectés.
-- **API Keys** : Pour les intégrations programmatiques. Les clés sont hachées en base de données (`key_hash`) et associées à un utilisateur. Elles peuvent être nommées et révoquées individuellement.
-- **Double Authentification (2FA)** : Support natif (TOTP) avec secret chiffré en base de données.
+Le système utilise plusieurs méthodes d'authentification sécurisées pour répondre à différents besoins :
+
+
+
+
+
+
### Webhooks / Services Externes
diff --git a/documentation/content/docs/compliance.mdx b/documentation/content/docs/compliance.mdx
index e50df44..192f051 100644
--- a/documentation/content/docs/compliance.mdx
+++ b/documentation/content/docs/compliance.mdx
@@ -9,9 +9,11 @@ Le projet Memegoat s'inscrit dans une démarche de respect de la vie privée et
### 🛡️ Principes Fondamentaux
-- **Minimisation des données** : Seules les données strictement nécessaires au fonctionnement du service sont collectées.
-- **Transparence** : Les utilisateurs sont informés de la finalité des traitements de leurs données.
-- **Sécurité** : Mise en œuvre de mesures techniques et organisationnelles pour protéger les données.
+
+
+
+
+
### 🔒 Mesures Techniques de Protection
@@ -20,19 +22,35 @@ Conformément à la section [Sécurité](/docs/security), les mesures suivantes
- **Hachage aveugle** : Pour permettre les opérations sur données chiffrées sans compromettre la confidentialité.
- **Hachage des mots de passe** : Utilisation de l'algorithme **Argon2id**.
- **Communications sécurisées** : Utilisation de **TLS 1.3** via Caddy.
+- **Suivi des Erreurs (Sentry)** : Configuration conforme avec désactivation de l'envoi des PII (Personally Identifiable Information) et masquage des données sensibles.
### 👤 Droits des Utilisateurs
-Conformément au RGPD, les utilisateurs disposent des droits suivants, facilités par l'architecture technique :
-- **Droit à l'effacement (droit à l'oubli)** : Mis en œuvre via un mécanisme de **Soft Delete** (`deleted_at`), suivi d'une purge définitive des données après un délai de conservation légal.
-- **Droit d'accès et portabilité** : L'utilisation de schémas structurés (Drizzle/PostgreSQL) permet l'extraction facile des données d'un utilisateur sur demande.
-- **Gestion du consentement** : Suivi rigoureux des versions de CGU et de politique de confidentialité acceptées (`terms_version`, `privacy_version`, `gdpr_accepted_at`).
+Conformément au RGPD, les utilisateurs disposent des droits suivants :
+
+
+ Mis en œuvre via un mécanisme de **Soft Delete** (`deleted_at`), suivi d'une purge définitive après 30 jours.
+
+
+
+ Route dédiée `GET /users/me/export` permettant l'extraction immédiate au format JSON.
+
+
+
+ Suivi des versions de CGU et politique de confidentialité (`terms_version`, `privacy_version`).
+
### ⏳ Conservation et Purge
-- **Purge Automatique** : Les données liées aux signalements (`reports`) disposent d'une date d'expiration (`expires_at`) pour garantir qu'elles ne sont pas conservées au-delà du nécessaire.
-- **Anonymisation technique** : Les adresses IP stockées dans les tables `audit_logs` et `sessions` sont hachées (`ip_hash`), ce qui permet d'identifier des comportements malveillants tout en protégeant l'identité réelle de l'utilisateur.
-- **Logs d'Audit** : Les journaux d'audit sont conservés pendant une période glissante pour répondre aux obligations de sécurité tout en respectant la minimisation.
+- **Purge Automatique (Jobs Cron)** : Un service de purge planifiée s'exécute régulièrement pour :
+ - Supprimer définitivement les comptes et contenus marqués pour suppression depuis plus de 30 jours.
+ - Nettoyer les sessions expirées ou révoquées.
+ - Supprimer les signalements (`reports`) ayant atteint leur date d'expiration.
+
+
+ Les adresses IP sont hachées (`ip_hash`) via SHA-256 dans les logs d'audit et de session.
+
+- **Logs d'Audit** : Les journaux d'audit sont conservés pour répondre aux obligations de sécurité tout en respectant la minimisation.
### 📍 Hébergement des Données
diff --git a/documentation/content/docs/database.mdx b/documentation/content/docs/database.mdx
index b9f0b12..efee022 100644
--- a/documentation/content/docs/database.mdx
+++ b/documentation/content/docs/database.mdx
@@ -17,12 +17,16 @@ erDiagram
USER ||--o{ SESSION : "detient"
USER ||--o{ API_KEY : "genere"
USER ||--o{ AUDIT_LOG : "genere"
+ USER ||--o{ FAVORITE : "ajoute"
CONTENT ||--o{ CONTENT_TAG : "possede"
TAG ||--o{ CONTENT_TAG : "est_lie_a"
CONTENT ||--o{ REPORT : "est_signale"
+ CONTENT ||--o{ FAVORITE : "est_mis_en"
TAG ||--o{ REPORT : "est_signale"
+ CATEGORY ||--o{ CONTENT : "catégorise"
+
ROLE ||--o{ USER_ROLE : "attribue_a"
ROLE ||--o{ ROLE_PERMISSION : "possede"
PERMISSION ||--o{ ROLE_PERMISSION : "est_lie_a"
@@ -93,15 +97,32 @@ erDiagram
contents {
uuid id PK
uuid user_id FK
+ uuid category_id FK
content_type type
varchar title
varchar storage_key
varchar mime_type
integer file_size
+ integer views
+ integer usage_count
timestamp created_at
timestamp updated_at
timestamp deleted_at
}
+ categories {
+ uuid id PK
+ varchar name
+ varchar slug
+ varchar description
+ varchar icon_url
+ timestamp created_at
+ timestamp updated_at
+ }
+ favorites {
+ uuid user_id PK, FK
+ uuid content_id PK, FK
+ timestamp created_at
+ }
tags {
uuid id PK
varchar name
@@ -182,6 +203,9 @@ erDiagram
timestamp created_at
}
+ users ||--o{ favorites : "user_id"
+ contents ||--o{ favorites : "content_id"
+ categories ||--o{ contents : "category_id"
users ||--o{ contents : "user_id"
users ||--o{ users_to_roles : "user_id"
roles ||--o{ users_to_roles : "role_id"
diff --git a/documentation/content/docs/deployment.mdx b/documentation/content/docs/deployment.mdx
index 62fbf92..ab9099a 100644
--- a/documentation/content/docs/deployment.mdx
+++ b/documentation/content/docs/deployment.mdx
@@ -9,10 +9,67 @@ description: Procédures de déploiement et stratégie de tests
Un conteneur **Caddy** est utilisé en tant que reverse proxy pour fournir le TLS et la gestion du FQDN.
-### Pré-requis
+### Pré-requis Système
-Liste des outils nécessaires (Node.js, pnpm, Docker).
+
+
+
+
+
+
-## 🧪 Tests
+### Procédure de Déploiement
-- **Unitaires** : sur le backend
+
+
+### Configuration de l'environnement
+Copiez le fichier `.env.example` vers `.env` et configurez les variables essentielles (clés PGP, secrets JWT, accès S3).
+
+
+
+### Installation des dépendances
+Utilisez pnpm pour installer les packages dans le monorepo :
+```bash
+pnpm install
+```
+
+
+
+### Initialisation de la base de données
+Exécutez les migrations Drizzle pour créer les tables et les types nécessaires.
+```bash
+pnpm --filter backend db:migrate
+```
+
+
+
+### Lancement des services
+Utilisez Docker Compose pour lancer l'infrastructure complète ou démarrez les services individuellement.
+```bash
+docker-compose up -d
+```
+
+
+
+## 🧪 Tests & Qualité
+
+
+
+ Exécutez la suite de tests unitaires avec Jest :
+ ```bash
+ pnpm test
+ ```
+
+
+ Vérifiez la conformité du code avec Biome :
+ ```bash
+ pnpm lint
+ ```
+
+
+ Validez la compilation de tous les modules :
+ ```bash
+ pnpm build
+ ```
+
+
diff --git a/documentation/content/docs/features.mdx b/documentation/content/docs/features.mdx
index 5d501cb..df49bdd 100644
--- a/documentation/content/docs/features.mdx
+++ b/documentation/content/docs/features.mdx
@@ -3,55 +3,73 @@ title: Fonctionnalités Techniques
description: Détails des fonctionnalités clés du projet Memegoat
---
-## 🚀 Fonctionnalités Techniques
+# 🚀 Fonctionnalités Techniques
Le projet Memegoat intègre un ensemble de fonctionnalités avancées pour garantir une expérience utilisateur fluide, sécurisée et performante.
-### 📧 Emailing
-Le système intègre un service d'envoi d'emails pour :
-- La vérification des comptes lors de l'inscription.
-- La récupération de mots de passe.
-- Les notifications de sécurité (nouvelles connexions, changements de profil).
-- Les alertes de modération.
+## 🏗️ Infrastructure & Médias
+
+### 📤 Publication & Traitement
+Le coeur de la plateforme permet la publication sécurisée de mèmes et de GIFs avec un pipeline de traitement complet :
+
+
+
+
+
+
+
+#### Détails du Pipeline :
+- **Transcodage Haute Performance** :
+ - **Images & GIFs** : Conversion vers **WebP** (via `sharp`). Support de l'**AVIF** intégré.
+ - **Vidéos** : Conversion vers **WebM** (VP9/Opus via `ffmpeg`). Support de l'**AV1** implémenté.
+- **Validation Stricte** :
+ - Limites de taille configurables (par défaut : 512 Ko pour les images, 1024 Ko pour les GIFs).
+- **Gestion du Cycle de Vie** : Support du **Soft Delete** (Droit à l'oubli) et de la restauration temporaire.
### 📦 Stockage S3 (MinIO)
-Pour la gestion des médias, Memegoat utilise **MinIO**, une solution de stockage d'objets compatible S3, auto-hébergée.
-- **Sécurité** : Le serveur MinIO est isolé dans le réseau interne de Docker et n'est pas exposé directement sur internet.
-- **Accès** : Le Backend fait office de proxy ou génère des URLs présignées pour l'accès aux fichiers, garantissant un contrôle total sur la diffusion des contenus.
-- **Performance** : Optimisé pour le service rapide de fichiers volumineux comme les GIFs.
+Pour la gestion des médias, Memegoat utilise **MinIO**, une solution de stockage d'objects compatible S3, auto-hébergée.
+
+
+ Le serveur MinIO est isolé dans le réseau interne de Docker et n'est pas exposé directement sur internet. Le Backend fait office de proxy ou génère des URLs présignées.
+
+
+---
+
+## 🔍 Expérience Utilisateur
### 🔍 SEO & Partage
La plateforme est optimisée pour le référencement naturel et le partage social :
-- **Metatags dynamiques** : Génération de balises OpenGraph et Twitter Cards pour chaque mème.
+- **Metatags dynamiques** : Le Backend détecte les robots (Twitter, Facebook, Google) et sert un rendu HTML spécifique avec les balises OpenGraph et Twitter Cards.
+- **URLs Sémantiques** : Chaque mème possède un slug unique généré à partir de son titre (ex: `memegoat.fr/contents/mon-super-meme`).
- **Indexation** : Structure sémantique HTML5 et Sitemap dynamique.
-- **Rendus côté serveur (SSR)** : Utilisation de Next.js pour un affichage instantané et une indexation parfaite par les robots.
+- **Rendus côté serveur (SSR)** : Utilisation de Next.js pour un affichage instantané pour les utilisateurs.
-### 🔗 URLs de Terminaison
-À l'instar de plateformes comme Tenor, Memegoat utilise des structures d'URLs courtes et sémantiques :
-- Format : `memegoat.fr/m/[slug-unique]` ou `memegoat.fr/g/[slug-unique]`.
-- Les slugs sont générés de manière à être lisibles par l'humain tout en garantissant l'unicité.
+### ⚡ Performance & Cache
+Pour garantir une réactivité maximale, Memegoat utilise plusieurs niveaux de cache :
+- **Cache Redis** : Les résultats des requêtes fréquentes (tendances, exploration) sont stockés dans un cache Redis côté serveur.
+- **Directives HTTP** : Utilisation rigoureuse des headers `Cache-Control` pour permettre la mise en cache par les navigateurs et les CDNs.
+
+---
+
+## 🛡️ Gouvernance & Sécurité
### 🕵️ Audit des Actions
Chaque action sensible sur la plateforme est tracée dans la table `audit_logs` :
- Modification de profil, suppression de contenu, changements de permissions.
- Enregistrement de l'auteur, de l'action, de l'horodatage et des détails techniques (IP hachée, User-Agent).
-- Outil essentiel pour la sécurité et la conformité RGPD.
### 👤 Gestion du Profil
Un système complet de gestion de profil permet aux utilisateurs de :
- Gérer leurs informations personnelles (nom d'affichage, avatar).
- Configurer la **Double Authentification (2FA)**.
- Consulter leurs sessions actives et révoquer des accès.
-- Les données sensibles sont protégées par **chiffrement PGP** au repos.
-### 🚩 Gestion des Signalements
+
+ Toutes les données sensibles du profil sont protégées par **chiffrement PGP** au repos.
+
+
+### 🚩 Modération & Signalements
Un système de modération intégré permet de maintenir la qualité du contenu :
-- Signalement de contenus (mèmes, GIFs) ou de tags inappropriés.
-- Workflow de traitement : `pending` -> `reviewed` -> `resolved` / `dismissed`.
+- Signalement de contenus ou de tags inappropriés.
+- Workflow : `pending` -> `reviewed` -> `resolved` / `dismissed`.
- Purge automatique des signalements obsolètes pour respecter la minimisation des données (RGPD).
-
-### 📤 Publication de Contenu
-Le coeur de la plateforme permet la publication de mèmes et de GIFs :
-- Support des formats images standards et animés.
-- Système de **Tags** pour catégoriser et faciliter la recherche.
-- Gestion du cycle de vie des contenus (Publication, Edition, Soft Delete).
diff --git a/documentation/content/docs/index.mdx b/documentation/content/docs/index.mdx
index 36594a6..1c0b9bd 100644
--- a/documentation/content/docs/index.mdx
+++ b/documentation/content/docs/index.mdx
@@ -5,15 +5,13 @@ description: Détails techniques du projet Memegoat
# 🐐 Détails Techniques - Memegoat
-Ce document regroupe l'ensemble des spécifications techniques du projet Memegoat.
+Bienvenue dans la documentation technique de Memegoat. Ce portail centralise toutes les spécifications, modèles et guides nécessaires à la compréhension et à l'évolution de la plateforme.
## 🏗️ Architecture Globale
-### Vue d'ensemble
+Memegoat repose sur une architecture **monorepo** moderne, garantissant une cohérence forte entre le frontend, le backend et l'infrastructure.
-Description de l'architecture en monorepo et des interactions entre les services.
-
-### Diagrammes
+### Interaction des Services
```mermaid
graph TD
@@ -22,22 +20,48 @@ graph TD
Frontend[Frontend: Next.js]
Backend[Backend: NestJS]
DB[(Database: PostgreSQL)]
- Storage[Storage: S3 Compatible]
+ Storage[Storage: S3/MinIO]
+ Cache[(Cache: Redis)]
+ Monitoring[Monitoring: Sentry]
User <--> Caddy
Caddy <--> Frontend
Caddy <--> Backend
Backend <--> DB
Backend <--> Storage
+ Backend <--> Cache
+ Backend --> Monitoring
```
-### Navigation
+### Navigation Rapide
-Consultez les différentes sections pour plus de détails :
-- [Fonctionnalités Techniques](/docs/features)
-- [Stack Technologique](/docs/stack)
-- [Modèle de Données](/docs/database)
-- [Sécurité](/docs/security)
-- [Conformité RGPD](/docs/compliance)
-- [API & Intégrations](/docs/api)
-- [Déploiement](/docs/deployment)
+Explorez les sections clés pour approfondir vos connaissances techniques :
+
+
+
+
+
+
+
+
+---
+
+
+ Cette documentation est destinée aux développeurs et aux administrateurs système. Pour toute question sur l'utilisation du site, merci de consulter l'aide en ligne sur [memegoat.fr](https://memegoat.fr).
+
diff --git a/documentation/content/docs/security.mdx b/documentation/content/docs/security.mdx
index 6e65ee4..17638ff 100644
--- a/documentation/content/docs/security.mdx
+++ b/documentation/content/docs/security.mdx
@@ -7,7 +7,12 @@ description: Mesures de sécurité implémentées
### Protection des Données (At Rest)
-- **Chiffrement PGP Natif** : Les données identifiantes (PII) comme l'email, le nom d'affichage et le **secret 2FA** sont chiffrées dans PostgreSQL via `pgcrypto` (`pgp_sym_encrypt`). Les clés de déchiffrement ne sont jamais stockées en base de données.
+- **Chiffrement PGP Natif** : Les données identifiantes (PII) comme l'email, le nom d'affichage et le **secret 2FA** sont chiffrées dans PostgreSQL via `pgcrypto` (`pgp_sym_encrypt`).
+
+
+ Les clés de déchiffrement ne sont jamais stockées en base de données. Elles sont injectées via les variables d'environnement au démarrage du service.
+
+
- **Hachage aveugle (Blind Indexing)** : Pour permettre la recherche et l'unicité sur les données chiffrées (comme l'email), un hash non réversible (SHA-256) est stocké séparément (`email_hash`).
- **Hachage des mots de passe** : Utilisation d'**Argon2id** (via `@node-rs/argon2`), configuré selon les recommandations de l'ANSSI pour résister aux attaques par force brute et par table de correspondance.
@@ -15,12 +20,18 @@ description: Mesures de sécurité implémentées
- **TLS 1.3** : Assuré par le reverse proxy **Caddy** avec renouvellement automatique des certificats Let's Encrypt.
- **Protocoles d'Authentification** :
- - **Sessions (JWT)** : Les jetons de rafraîchissement (`refresh_token`) sont stockés de manière sécurisée en base de données. L'IP de l'utilisateur est hachée (`ip_hash`) pour concilier sécurité et respect de la vie privée.
+ - **Sessions (iron-session)** : Utilisation de cookies sécurisés, `HttpOnly`, `Secure` et `SameSite: Strict`. Les tokens (JWT) sont stockés dans ces cookies chiffrés côté serveur, empêchant tout accès via JavaScript (XSS).
- **API Keys** : Les clés API sont hachées en base de données (**SHA-256**) via la colonne `key_hash`. Seul un préfixe est conservé en clair pour l'identification.
-### Infrastructure & Défense
+### Infrastructure & Surveillance
-- **Rate Limiting** : Protection contre le brute-force et le déni de service (DoS).
-- **CORS Policy** : Restriction stricte des origines autorisées.
-- **RBAC (Role Based Access Control)** : Gestion granulaire des permissions avec une structure complète de rôles et de permissions liées (`roles`, `permissions`, `roles_to_permissions`).
+
+
+
+
+
+
+
+- **CORS Policy** : Restriction stricte des origines autorisées, configurée dynamiquement selon l'environnement.
+- **Security Headers** : Utilisation de `helmet` pour activer les protections standards des navigateurs (XSS, Clickjacking, etc.).
- **Audit Logs** : Traçabilité complète des actions sensibles via la table `audit_logs`. Elle enregistre l'action, l'entité concernée, les détails au format JSONB, ainsi que l'IP hachée et le User-Agent pour l'imputabilité.
diff --git a/documentation/content/docs/stack.mdx b/documentation/content/docs/stack.mdx
index 33ff088..98008e8 100644
--- a/documentation/content/docs/stack.mdx
+++ b/documentation/content/docs/stack.mdx
@@ -7,22 +7,39 @@ description: Technologies utilisées dans le projet Memegoat
### Frontend
-- **Framework** : NextJS
-- **Gestion d'état** : Zustand
-- **Style** : Tailwind CSS
-- **Composants UI** : Shadcn/ui
+
+
+
+
+
+
### Backend
-- **Framework** : NestJS
-- **Langage** : TypeScript
-- **Base de données** : PostgresQL
-- **ORM** : DrizzleORM
+
+
+
+
+
+
+
+
+### Sécurité & Monitoring
+
+
+
+
+
+
+
+
+
### Infrastructure & DevOps
-- **Conteneurisation** : Docker / Docker Compose
-- **Reverse Proxy & TLS** : Caddy
-- **Stockage d'objets** : MinIO (compatible S3)
-- **CI/CD** : Gitea Actions
-- **Hébergement** : Hetzner Dedicated Server
+
+
+
+
+
+