docs: Add comprehensive documentation (PROJECT_STRUCTURE, QUICK_START) and cleanup
- Remove old STATUS.md and STRUCTURE_NOTES.md - Add detailed PROJECT_STRUCTURE.md with full architecture documentation - Add QUICK_START.md with quick reference guide - Documentation covers: project overview, file structure, database models, API routes, Docker setup, authentication flow, security, and deployment
This commit is contained in:
parent
839ca5461c
commit
4b3da56c40
324
e-voting-system/.claude/PROJECT_STRUCTURE.md
Normal file
324
e-voting-system/.claude/PROJECT_STRUCTURE.md
Normal file
@ -0,0 +1,324 @@
|
||||
# E-Voting System - Architecture & Structure
|
||||
|
||||
## 📋 Vue d'ensemble
|
||||
|
||||
Système de vote électronique sécurisé utilisant la **cryptographie post-quantique** et **le vote chiffré**.
|
||||
|
||||
**Stack technique:**
|
||||
- **Backend:** Python FastAPI + SQLAlchemy + MariaDB
|
||||
- **Frontend:** React 19 + React Router + Axios
|
||||
- **Cryptographie:** ElGamal + Preuve Zero-Knowledge + PQC Hybrid
|
||||
- **Déploiement:** Docker Compose
|
||||
|
||||
---
|
||||
|
||||
## 📁 Structure du projet
|
||||
|
||||
```
|
||||
e-voting-system/
|
||||
├── backend/ # API FastAPI
|
||||
│ ├── main.py # Point d'entrée FastAPI
|
||||
│ ├── config.py # Configuration (DB, JWT, etc)
|
||||
│ ├── database.py # Setup SQLAlchemy
|
||||
│ ├── models.py # Tables SQLAlchemy (Voter, Election, Vote, Candidate)
|
||||
│ ├── schemas.py # Schémas Pydantic (validation)
|
||||
│ ├── services.py # Logique métier (VoterService, ElectionService, VoteService)
|
||||
│ ├── auth.py # JWT et hashing (bcrypt)
|
||||
│ ├── dependencies.py # Dépendances FastAPI
|
||||
│ ├── crypto/ # Modules cryptographie
|
||||
│ │ ├── encryption.py # ElGamal encryption
|
||||
│ │ ├── hashing.py # Key derivation (PBKDF2, bcrypt)
|
||||
│ │ ├── signatures.py # Digital signatures
|
||||
│ │ ├── zk_proofs.py # Zero-Knowledge proofs
|
||||
│ │ └── pqc_hybrid.py # PQC Hybrid approach
|
||||
│ ├── routes/ # Endpoints
|
||||
│ │ ├── auth.py # Login, Register, Profile
|
||||
│ │ ├── elections.py # Élections CRUD
|
||||
│ │ └── votes.py # Soumission/Récupération votes
|
||||
│ └── scripts/
|
||||
│ └── seed_db.py # Script initialisation DB
|
||||
│
|
||||
├── frontend/ # Application React
|
||||
│ ├── public/
|
||||
│ │ ├── index.html # HTML root
|
||||
│ │ └── config.js # Config runtime (API_BASE_URL)
|
||||
│ ├── src/
|
||||
│ │ ├── App.js # Routeur principal
|
||||
│ │ ├── index.js # Entry point React
|
||||
│ │ ├── components/ # Composants réutilisables
|
||||
│ │ │ ├── Header.jsx # Navigation
|
||||
│ │ │ ├── Footer.jsx # Footer
|
||||
│ │ │ ├── Alert.jsx # Messages d'erreur/succès
|
||||
│ │ │ ├── Modal.jsx # Modals
|
||||
│ │ │ ├── LoadingSpinner.jsx
|
||||
│ │ │ └── VoteCard.jsx # Carte candidat
|
||||
│ │ ├── pages/ # Pages/routes
|
||||
│ │ │ ├── LoginPage.js # Page de connexion (FIXED)
|
||||
│ │ │ ├── HomePage.jsx # Accueil
|
||||
│ │ │ ├── RegisterPage.jsx
|
||||
│ │ │ ├── DashboardPage.js # Tableau de bord
|
||||
│ │ │ ├── VotingPage.jsx # Page de vote
|
||||
│ │ │ ├── ArchivesPage.jsx
|
||||
│ │ │ └── ProfilePage.jsx
|
||||
│ │ ├── config/
|
||||
│ │ │ ├── api.js # Configuration API endpoints
|
||||
│ │ │ └── theme.js # Thème UI
|
||||
│ │ ├── hooks/
|
||||
│ │ │ └── useApi.js # Hook pour appels API
|
||||
│ │ ├── styles/
|
||||
│ │ │ ├── globals.css
|
||||
│ │ │ └── components.css
|
||||
│ │ └── utils/
|
||||
│ │ └── api.js # Utilitaires API
|
||||
│ ├── package.json # Dépendances npm
|
||||
│ ├── build/ # Compilation production
|
||||
│ └── Dockerfile # Containerisation
|
||||
│
|
||||
├── docker/
|
||||
│ ├── Dockerfile.backend # Image FastAPI
|
||||
│ ├── Dockerfile.frontend # Image React
|
||||
│ └── init.sql # Script init DB
|
||||
│
|
||||
├── docker-compose.yml # Orchestration (mariadb + backend + frontend)
|
||||
├── Makefile # Commandes utiles
|
||||
├── README.md # Documentation principale
|
||||
└── .claude/ # Documentation développeur
|
||||
├── PROJECT_STRUCTURE.md # Ce fichier
|
||||
├── DEPLOYMENT.md # Guide déploiement
|
||||
└── POSTQUANTUM_CRYPTO.md # Infos PQC
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔑 Composants clés
|
||||
|
||||
### Backend - Routes principales
|
||||
|
||||
#### `/api/auth/`
|
||||
- **POST /register** → Créer compte votant
|
||||
- **POST /login** → Authentification, retourne JWT
|
||||
- **GET /profile** → Profil votant actuel
|
||||
|
||||
#### `/api/elections/`
|
||||
- **GET /active** → Élection en cours
|
||||
- **GET /completed** → Élections terminées
|
||||
- **GET /active/results** → Résultats
|
||||
|
||||
#### `/api/votes/`
|
||||
- **POST /** → Soumettre un vote chiffré
|
||||
- **GET /history** → Historique votes votant
|
||||
|
||||
### Frontend - Pages principales
|
||||
|
||||
| Page | Route | Description |
|
||||
|------|-------|-------------|
|
||||
| **LoginPage.js** | `/login` | Connexion votant |
|
||||
| **HomePage.jsx** | `/` | Accueil |
|
||||
| **DashboardPage.js** | `/dashboard` | Elections actives |
|
||||
| **VotingPage.jsx** | `/vote/:id` | Interface vote |
|
||||
| **ArchivesPage.jsx** | `/archives` | Elections passées |
|
||||
|
||||
---
|
||||
|
||||
## 🔐 Flux d'authentification
|
||||
|
||||
```
|
||||
1. Utilisateur → LoginPage.js
|
||||
2. POST /api/auth/login (email + password)
|
||||
3. Backend vérifie credentials (bcrypt.checkpw)
|
||||
4. ✅ JWT token retourné
|
||||
5. Token + voter data → localStorage
|
||||
6. Redirection → /dashboard
|
||||
```
|
||||
|
||||
### Important: LoginPage.js
|
||||
|
||||
**Corrigé le 5 nov 2025:**
|
||||
- ✅ Utilise `API_ENDPOINTS.LOGIN` (au lieu de URL hardcodée)
|
||||
- ✅ Prop correct: `onLogin` (au lieu de `onLoginSuccess`)
|
||||
- ✅ Structure données correcte: `email`, `first_name`, `last_name`
|
||||
|
||||
---
|
||||
|
||||
## 🗄️ Modèles Base de données
|
||||
|
||||
### `voters`
|
||||
```
|
||||
id (PK)
|
||||
email (UNIQUE)
|
||||
password_hash (bcrypt)
|
||||
first_name
|
||||
last_name
|
||||
citizen_id (UNIQUE)
|
||||
public_key (ElGamal)
|
||||
has_voted (bool)
|
||||
created_at
|
||||
updated_at
|
||||
```
|
||||
|
||||
### `elections`
|
||||
```
|
||||
id (PK)
|
||||
name
|
||||
description
|
||||
start_date
|
||||
end_date
|
||||
elgamal_p (nombre premier)
|
||||
elgamal_g (générateur)
|
||||
public_key (clé publique)
|
||||
is_active (bool)
|
||||
results_published (bool)
|
||||
```
|
||||
|
||||
### `candidates`
|
||||
```
|
||||
id (PK)
|
||||
election_id (FK)
|
||||
name
|
||||
description
|
||||
order
|
||||
```
|
||||
|
||||
### `votes`
|
||||
```
|
||||
id (PK)
|
||||
voter_id (FK)
|
||||
election_id (FK)
|
||||
candidate_id (FK)
|
||||
encrypted_vote (ElGamal ciphertext)
|
||||
zero_knowledge_proof
|
||||
ballot_hash
|
||||
timestamp
|
||||
ip_address
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🐳 Docker Compose
|
||||
|
||||
3 services:
|
||||
|
||||
### `mariadb` (port 3306)
|
||||
- Image: `mariadb:latest`
|
||||
- Init script: `docker/init.sql`
|
||||
- Volume: `evoting_data`
|
||||
|
||||
### `backend` (port 8000)
|
||||
- Build: `docker/Dockerfile.backend`
|
||||
- CMD: `uvicorn backend.main:app --host 0.0.0.0 --port 8000`
|
||||
- Dépend de: `mariadb` (healthcheck)
|
||||
|
||||
### `frontend` (port 3000)
|
||||
- Build: `docker/Dockerfile.frontend`
|
||||
- CMD: `serve -s build -l 3000`
|
||||
- Dépend de: `backend`
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Démarrage
|
||||
|
||||
### Local (développement)
|
||||
```bash
|
||||
# Backend
|
||||
cd backend
|
||||
uvicorn main:app --reload
|
||||
|
||||
# Frontend (autre terminal)
|
||||
cd frontend
|
||||
npm start
|
||||
```
|
||||
|
||||
### Docker
|
||||
```bash
|
||||
docker-compose up -d
|
||||
# Frontend: http://localhost:3000
|
||||
# Backend: http://localhost:8000
|
||||
```
|
||||
|
||||
### Makefile
|
||||
```bash
|
||||
make up # docker-compose up -d
|
||||
make down # docker-compose down
|
||||
make logs # docker-compose logs -f backend
|
||||
make test # pytest tests/ -v
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔒 Sécurité
|
||||
|
||||
### Authentification
|
||||
- Passwords: **bcrypt** (salt + hash)
|
||||
- Tokens: **JWT** (HS256, 30min expiration)
|
||||
|
||||
### Votes
|
||||
- **Chiffrement:** ElGamal
|
||||
- **Preuve:** Zero-Knowledge
|
||||
- **Traçabilité:** ballot_hash
|
||||
|
||||
### Post-Quantum
|
||||
- Hybride PQC/Classique pour transition future
|
||||
- Module: `backend/crypto/pqc_hybrid.py`
|
||||
|
||||
---
|
||||
|
||||
## 📝 Variables d'environnement
|
||||
|
||||
### Backend (`.env`)
|
||||
```
|
||||
DB_HOST=mariadb
|
||||
DB_PORT=3306
|
||||
DB_NAME=evoting_db
|
||||
DB_USER=evoting_user
|
||||
DB_PASSWORD=evoting_pass123
|
||||
SECRET_KEY=your-secret-key-change-in-production
|
||||
DEBUG=false
|
||||
```
|
||||
|
||||
### Frontend (`public/config.js`)
|
||||
```javascript
|
||||
window.API_CONFIG = {
|
||||
API_BASE_URL: 'http://localhost:8000'
|
||||
};
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ✅ Tests
|
||||
|
||||
```bash
|
||||
# Tous les tests
|
||||
pytest tests/ -v
|
||||
|
||||
# Tests spécifiques
|
||||
pytest tests/test_backend.py -v
|
||||
pytest tests/test_crypto.py -v
|
||||
pytest tests/test_pqc.py -v
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Statut (5 nov 2025)
|
||||
|
||||
✅ **Système fonctionnel**
|
||||
- [x] Login/Register
|
||||
- [x] Dashboard
|
||||
- [x] JWT authentication
|
||||
- [x] Docker deployment
|
||||
- [x] API endpoints
|
||||
- [ ] Vote submission (en cours)
|
||||
- [ ] Results display (planifié)
|
||||
|
||||
---
|
||||
|
||||
## 📚 Références
|
||||
|
||||
- **FastAPI:** https://fastapi.tiangolo.com/
|
||||
- **React Router:** https://reactrouter.com/
|
||||
- **SQLAlchemy:** https://www.sqlalchemy.org/
|
||||
- **ElGamal:** Crypto asymétrique probabiliste
|
||||
- **Zero-Knowledge Proofs:** Preuve sans révéler info
|
||||
|
||||
---
|
||||
|
||||
**Dernière mise à jour:** 5 novembre 2025
|
||||
133
e-voting-system/.claude/QUICK_START.md
Normal file
133
e-voting-system/.claude/QUICK_START.md
Normal file
@ -0,0 +1,133 @@
|
||||
# Quick Start & Notes
|
||||
|
||||
## 🚀 Démarrage rapide
|
||||
|
||||
```bash
|
||||
# Docker (recommandé)
|
||||
cd /home/paul/CIA/e-voting-system
|
||||
docker-compose up -d
|
||||
|
||||
# Frontend: http://localhost:3000
|
||||
# Backend API: http://localhost:8000
|
||||
# Database: localhost:3306
|
||||
```
|
||||
|
||||
## 🔧 Fixes récentes (5 nov 2025)
|
||||
|
||||
### LoginPage.js
|
||||
- ✅ Utilise `API_ENDPOINTS.LOGIN` au lieu de URL hardcodée
|
||||
- ✅ Prop correct: `onLogin` (était `onLoginSuccess`)
|
||||
- ✅ Mapping données correct: `email`, `first_name`, `last_name`
|
||||
- ✅ Teste les identifiants: `paul.roost@epita.fr` / `tennis16`
|
||||
|
||||
### DashboardPage.js
|
||||
- ✅ Utilise `API_ENDPOINTS.ELECTIONS_ACTIVE`
|
||||
|
||||
### Docker
|
||||
- ✅ Dockerfile.backend: suppression du double CMD
|
||||
- ✅ Frontend build inclus dans docker-compose
|
||||
|
||||
### Nettoyage
|
||||
- ✅ Suppression du dossier `src/` (doublon)
|
||||
- ✅ Installation de `lucide-react`
|
||||
- ✅ Suppression des console.log de debug
|
||||
|
||||
---
|
||||
|
||||
## 📋 Fichiers à connaître
|
||||
|
||||
| Fichier | Rôle |
|
||||
|---------|------|
|
||||
| `backend/main.py` | Point d'entrée FastAPI |
|
||||
| `backend/routes/auth.py` | Routes login/register |
|
||||
| `frontend/src/pages/LoginPage.js` | **Page de login** |
|
||||
| `frontend/src/config/api.js` | Configuration API endpoints |
|
||||
| `docker-compose.yml` | Orchestration services |
|
||||
| `.env.example` | Variables d'environnement |
|
||||
|
||||
---
|
||||
|
||||
## 🧪 Test login
|
||||
|
||||
```bash
|
||||
# Via curl
|
||||
curl -X POST http://localhost:8000/api/auth/login \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"email": "paul.roost@epita.fr", "password": "tennis16"}'
|
||||
|
||||
# Réponse attendue
|
||||
{
|
||||
"access_token": "eyJ...",
|
||||
"token_type": "bearer",
|
||||
"expires_in": 1800,
|
||||
"id": 1,
|
||||
"email": "paul.roost@epita.fr",
|
||||
"first_name": "Paul",
|
||||
"last_name": "Roost"
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔑 Points clés
|
||||
|
||||
### API Base URL
|
||||
- **Local dev:** `http://localhost:8000`
|
||||
- **Docker:** Configuration dans `frontend/public/config.js`
|
||||
|
||||
### JWT Token
|
||||
- Stocké dans `localStorage` sous clé `token`
|
||||
- Utilisé dans header `Authorization: Bearer <token>`
|
||||
- Expiration: 30 minutes
|
||||
|
||||
### Voter Data
|
||||
- Stocké dans `localStorage` sous clé `voter`
|
||||
- Structure: `{ id, email, name, first_name, last_name }`
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ Erreurs courantes
|
||||
|
||||
| Erreur | Cause | Solution |
|
||||
|--------|-------|----------|
|
||||
| `CORS error` | Frontend cherche localhost depuis Docker | Utiliser `API_ENDPOINTS` |
|
||||
| `onLoginSuccess is not a function` | Prop nommé incorrectement | Utiliser `onLogin` |
|
||||
| `t is not a function` | Composant pas reçu le bon prop | Vérifier noms props parent/enfant |
|
||||
| Build cache | Ancien JS chargé | Force refresh: `Ctrl+Shift+R` |
|
||||
|
||||
---
|
||||
|
||||
## 📊 Architecture réseau Docker
|
||||
|
||||
```
|
||||
User Browser (localhost:3000)
|
||||
↓
|
||||
Frontend Container (nginx serve)
|
||||
↓
|
||||
Backend Container (:8000)
|
||||
↓
|
||||
MariaDB Container (:3306)
|
||||
```
|
||||
|
||||
**Important:** Du navigateur, utiliser `localhost:8000`. Du container, utiliser `evoting_backend:8000`.
|
||||
|
||||
---
|
||||
|
||||
## 🔐 Credentials de test
|
||||
|
||||
- **Email:** `paul.roost@epita.fr`
|
||||
- **Password:** `tennis16`
|
||||
- **DB User:** `evoting_user`
|
||||
- **DB Pass:** `evoting_pass123`
|
||||
|
||||
---
|
||||
|
||||
## 📚 Autres fichiers .claude
|
||||
|
||||
- **PROJECT_STRUCTURE.md** - Architecture complète (ce répertoire)
|
||||
- **DEPLOYMENT.md** - Guide déploiement production
|
||||
- **POSTQUANTUM_CRYPTO.md** - Détails cryptographie
|
||||
|
||||
---
|
||||
|
||||
**Dernière mise à jour:** 5 novembre 2025
|
||||
@ -1,268 +0,0 @@
|
||||
# 🗳️ E-Voting System - Status Final
|
||||
|
||||
**Date:** 5 novembre 2025
|
||||
**Status:** ✅ **PRODUCTION READY**
|
||||
**Branch:** `paul/evoting` on gitea.vidoks.fr
|
||||
|
||||
---
|
||||
|
||||
## 📊 Architecture
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────────┐
|
||||
│ DOCKER NETWORK │
|
||||
├─────────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ ┌──────────────────┐ ┌──────────────────┐ │
|
||||
│ │ FRONTEND │ │ BACKEND │ │
|
||||
│ │ React 18 CRA │ │ FastAPI (3.12) │ │
|
||||
│ │ :3000 │ │ :8000 │ │
|
||||
│ └──────────────────┘ └────────┬─────────┘ │
|
||||
│ │ │
|
||||
│ ┌────────▼─────────┐ │
|
||||
│ │ MariaDB │ │
|
||||
│ │ :3306 │ │
|
||||
│ └──────────────────┘ │
|
||||
│ │
|
||||
└─────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📁 Structure du Projet
|
||||
|
||||
```
|
||||
/home/paul/CIA/e-voting-system/
|
||||
├── frontend/ # React Create React App (18.x)
|
||||
│ ├── public/ # Static files
|
||||
│ ├── src/ # React components
|
||||
│ ├── package.json
|
||||
│ └── build/ # Production build
|
||||
│
|
||||
├── backend/ # FastAPI application
|
||||
│ ├── main.py # Entry point
|
||||
│ ├── models.py # SQLAlchemy ORM
|
||||
│ ├── schemas.py # Pydantic models
|
||||
│ ├── routes/ # API endpoints
|
||||
│ │ ├── elections.py
|
||||
│ │ ├── votes.py
|
||||
│ │ └── auth.py
|
||||
│ ├── crypto/ # Cryptography modules
|
||||
│ │ ├── hashing.py # SHA-256
|
||||
│ │ ├── encryption.py # ElGamal
|
||||
│ │ ├── signatures.py # RSA-PSS
|
||||
│ │ └── pqc_hybrid.py # Post-Quantum (ML-DSA-65, ML-KEM-768)
|
||||
│ ├── pyproject.toml # Poetry dependencies
|
||||
│ └── poetry.lock
|
||||
│
|
||||
├── docker/ # Docker configuration
|
||||
│ ├── Dockerfile.backend
|
||||
│ ├── Dockerfile.frontend
|
||||
│ ├── init.sql # Database initialization
|
||||
│
|
||||
├── docs/ # Documentation
|
||||
│ ├── DEPLOYMENT.md
|
||||
│ └── POSTQUANTUM_CRYPTO.md
|
||||
│
|
||||
├── docker-compose.yml # Service orchestration
|
||||
├── .env # Environment variables
|
||||
└── README.md # Main readme
|
||||
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Démarrage Rapide
|
||||
|
||||
### Lancer les services
|
||||
|
||||
```bash
|
||||
cd /home/paul/CIA/e-voting-system
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
### Accès
|
||||
|
||||
- **Frontend:** http://localhost:3000
|
||||
- **API:** http://localhost:8000
|
||||
- **API Docs:** http://localhost:8000/docs (Swagger UI)
|
||||
- **Database:** localhost:3306
|
||||
|
||||
### Arrêter
|
||||
|
||||
```bash
|
||||
docker-compose down
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔐 Fonctionnalités
|
||||
|
||||
### ✅ Frontend (React)
|
||||
- SPA responsive avec pages multiples
|
||||
- Enregistrement de votant
|
||||
- Interface de vote
|
||||
- Affichage des résultats
|
||||
- Gestion d'état avec Context API
|
||||
- Communication API avec Axios
|
||||
|
||||
### ✅ Backend (FastAPI)
|
||||
- 7 endpoints REST (/elections, /votes, /voters)
|
||||
- Authentification JWT
|
||||
- Validation Pydantic
|
||||
- ORM SQLAlchemy
|
||||
- Logs structurés
|
||||
- CORS activé
|
||||
|
||||
### ✅ Cryptographie
|
||||
- **Classique:** RSA-PSS, ElGamal, SHA-256, PBKDF2
|
||||
- **Post-Quantum:** ML-DSA-65 (Dilithium), ML-KEM-768 (Kyber) - FIPS 203/204
|
||||
- **Hybrid:** Approche défense-en-profondeur (classique + PQC)
|
||||
|
||||
### ✅ Base de Données
|
||||
- 5 tables normalisées (voters, elections, candidates, votes, audit_logs)
|
||||
- 1 élection active pré-chargée avec 4 candidats
|
||||
- Intégrité référentielle
|
||||
- Timestamps
|
||||
|
||||
---
|
||||
|
||||
## 📊 Services Docker
|
||||
|
||||
```
|
||||
✅ evoting-frontend Node 20 Alpine → port 3000
|
||||
✅ evoting-backend Python 3.12 → port 8000
|
||||
✅ evoting_db MariaDB 12 → port 3306
|
||||
```
|
||||
|
||||
**Vérifier le statut:**
|
||||
```bash
|
||||
docker ps
|
||||
docker logs evoting_backend # Backend logs
|
||||
docker logs evoting_frontend # Frontend logs
|
||||
docker logs evoting_db # Database logs
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🧪 Tests
|
||||
|
||||
```bash
|
||||
# Unit tests
|
||||
cd /home/paul/CIA/e-voting-system
|
||||
pytest
|
||||
|
||||
# Coverage
|
||||
pytest --cov=backend tests/
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📝 Git History
|
||||
|
||||
```
|
||||
Commit 4a6c595 (HEAD paul/evoting)
|
||||
├─ Restructure: React CRA frontend + FastAPI backend in separate dirs
|
||||
│ └─ 48 files changed, 20243 insertions
|
||||
│
|
||||
Commit 94939d2
|
||||
├─ Move DEPLOYMENT.md to .claude/ directory
|
||||
│
|
||||
Commit 15a52af
|
||||
├─ Remove liboqs-python: use optional import for PQC compatibility
|
||||
│
|
||||
Commit 6df490a
|
||||
└─ Add post-quantum cryptography (FIPS 203/204)
|
||||
└─ 798 insertions, 2173 deletions
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ⚙️ Configuration
|
||||
|
||||
### `.env` (Production - À mettre à jour)
|
||||
|
||||
```env
|
||||
# Database
|
||||
DB_HOST=mariadb
|
||||
DB_PORT=3306
|
||||
DB_NAME=evoting_db
|
||||
DB_USER=evoting_user
|
||||
DB_PASSWORD=CHANGE_THIS_PASSWORD_IN_PRODUCTION
|
||||
|
||||
# Backend
|
||||
SECRET_KEY=CHANGE_THIS_SECRET_KEY_IN_PRODUCTION
|
||||
DEBUG=false
|
||||
|
||||
# Frontend
|
||||
REACT_APP_API_URL=http://your-production-domain.com/api
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔗 Endpoints API
|
||||
|
||||
### Elections
|
||||
```
|
||||
GET /api/elections/active → Current election + candidates
|
||||
GET /api/elections/{id}/results → Election results
|
||||
```
|
||||
|
||||
### Votes
|
||||
```
|
||||
POST /api/votes/submit → Submit a vote
|
||||
GET /api/votes/verify/{id} → Verify vote signature
|
||||
```
|
||||
|
||||
### Voters
|
||||
```
|
||||
POST /api/voters/register → Register voter (generates keys)
|
||||
GET /api/voters/check?email=... → Check voter existence
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🛡️ Security Features
|
||||
|
||||
- ✅ JWT authentication
|
||||
- ✅ Password hashing (bcrypt)
|
||||
- ✅ CORS configuration
|
||||
- ✅ SQL injection protection (ORM)
|
||||
- ✅ Rate limiting ready
|
||||
- ✅ Vote encryption with hybrid PQC
|
||||
- ✅ Digital signatures (RSA + Dilithium)
|
||||
- ✅ Audit logging
|
||||
|
||||
---
|
||||
|
||||
## 📚 Documentation
|
||||
|
||||
- `docs/DEPLOYMENT.md` - Deployment guide & troubleshooting
|
||||
- `docs/POSTQUANTUM_CRYPTO.md` - PQC implementation details
|
||||
- `README.md` - Main project readme
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Prochaines Étapes
|
||||
|
||||
1. ✅ **Frontend React fonctionnel** - COMPLÉTÉ
|
||||
2. ✅ **Backend API fonctionnel** - COMPLÉTÉ
|
||||
3. ✅ **Base de données intégrée** - COMPLÉTÉ
|
||||
4. ✅ **Cryptographie PQC prête** - COMPLÉTÉ
|
||||
5. ⏳ **Intégrer PQC dans les endpoints** - À faire
|
||||
6. ⏳ **Tests E2E complets** - À faire
|
||||
7. ⏳ **Déployer en production** - À faire
|
||||
|
||||
---
|
||||
|
||||
## 📞 Support
|
||||
|
||||
Pour des questions sur:
|
||||
- **PQC:** Voir `docs/POSTQUANTUM_CRYPTO.md`
|
||||
- **Déploiement:** Voir `docs/DEPLOYMENT.md`
|
||||
- **API:** Accéder à http://localhost:8000/docs
|
||||
|
||||
---
|
||||
|
||||
**Last Updated:** 2025-11-05
|
||||
**Project Status:** ✅ Ready for Testing & Development
|
||||
@ -1,23 +0,0 @@
|
||||
# 📝 IMPORTANT - Structure des Documentation
|
||||
|
||||
## ✅ RÈGLE : Tous les .md (SAUF README.md) doivent être dans `.claude/`
|
||||
|
||||
**Raison:** Garder la racine minimale et propre.
|
||||
|
||||
### Fichiers à TOUJOURS garder dans `.claude/`:
|
||||
- ✅ `POSTQUANTUM_CRYPTO.md` - Documentation PQC
|
||||
- ✅ `DEPLOYMENT.md` - Guide de déploiement
|
||||
- ✅ `STATUS.md` - Status du projet (MOVE HERE!)
|
||||
- ✅ Tout autre .md technique
|
||||
|
||||
### Fichiers à la RACINE:
|
||||
- ✅ `README.md` SEULEMENT
|
||||
|
||||
### À FAIRE:
|
||||
```bash
|
||||
# Déplacer STATUS.md vers .claude/
|
||||
mv STATUS.md .claude/STATUS.md
|
||||
git add -A && git commit -m "Move STATUS.md to .claude/"
|
||||
```
|
||||
|
||||
**Ne plus oublier ceci!**
|
||||
Loading…
x
Reference in New Issue
Block a user