feat: Semaine 8

This commit is contained in:
gauvainboiche
2026-05-11 09:25:19 +02:00
parent 606e43e53f
commit 3315cb2336
123 changed files with 5748 additions and 0 deletions
+65
View File
@@ -0,0 +1,65 @@
# SecuVault
Coffre-fort de mots de passe partagés - FastAPI + Jinja2 + SQLite.
---
## Installation
```bash
uv init --python 3.12
uv run ./main.py
.venv\Scripts\activate
uv add uvicorn jinja2 bcrypt cryptography fastapi itsdangerous python-multipart
uvicorn main:app --reload --host localhost --port 8080
```
La base de données (`secuvault.db`) et la clé de chiffrement (`secret.key`) sont créées automatiquement au premier démarrage.
## Comptes de test
| Utilisateur | Équipes |
|-------------|---------------------|
| alice | devops |
| bob | devops + marketing |
| charlie | marketing |
## Architecture (3 couches strictes)
```
domain/ # RÈGLES MÉTIER UNIQUEMENT
models/ # Entités : User, Team, Secret (dataclasses)
exceptions.py # Erreurs métier (AccessDeniedError, ConflictError…)
services.py # Cas d'usage & contrôle d'accès (AUCUNE règle en dehors d'ici)
infra/ # ACCÈS AUX DONNÉES
crypto.py # Hachage bcrypt + chiffrement Fernet
database.py # Connexion SQLite, schéma, provisioning
repositories.py # CRUD : UserRepository, TeamRepository, SecretRepository
presentation/ # INTERFACE UTILISATEUR (contrôleurs minces)
schemas.py # Validation Pydantic des formulaires
routes/
auth.py # GET/POST /login, GET /logout
secrets.py # GET/POST /secrets (liste, détail, création, rotation)
templates/ # Jinja2 - affichage uniquement, aucune règle métier
```
## Fonctionnalités de sécurité
- **Chiffrement** : secrets chiffrés en AES-128-CBC + HMAC.
- **Hachage** : mots de passe hachés avec bcrypt.
- **Contrôle d'accès** : toutes les règles d'accès sont dans `domain/services.py` ; aucune vérification dans les routes ni les templates.
- **Verrouillage optimiste** : colonne `version` sur chaque secret ; une rotation concurrente est détectée et signalée à l'utilisateur (voir `ATTACKS.md`).
- **Session** : cookies signés (HMAC via `itsdangerous` / Starlette `SessionMiddleware`).
## Variable d'environnement
| Variable | Défaut (dev uniquement) | Usage |
|------------------|--------------------------------------------------|---------------------|
| `SESSION_SECRET` | `secuvault-dev-secret-please-change-in-production` | Clé de signature des cookies de session |
> **Production** : définir `SESSION_SECRET` avec une valeur aléatoire longue et garder `secret.key` hors du dépôt.