Skip to content

Commit 7d500b6

Browse files
committed
feat(security): Enhance password management with Argon2 and secure session handling
- Implemented PasswordService for secure password hashing using Argon2. - Added methods for password verification and rehashing. - Configured SecureSessionService for secure user session management with Flask-Session. - Updated Docker Compose configuration for improved service dependencies and health checks. - Enhanced MariaDB Dockerfile with initialization script and performance optimizations. - Created comprehensive technical documentation for ACFC application, covering architecture, security, and deployment.
1 parent 4b02201 commit 7d500b6

9 files changed

Lines changed: 1586 additions & 221 deletions

File tree

DOCUMENTATION.md

Lines changed: 329 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,329 @@
1+
# ACFC - Documentation Technique Complète (au 21/08/2025)
2+
3+
## 📋 Vue d'ensemble
4+
5+
**ACFC** (Accounting, Customer Relationship Management, Billing & Stock Management) est une application web d'entreprise intégrée développée en Python Flask. Elle fournit une solution complète pour la gestion d'entreprise incluant la comptabilité, la gestion client (CRM), la facturation et la gestion des stocks pour l'entreprise ACFC.
6+
7+
### 🎯 Modules Métiers
8+
9+
- **👥 CRM (Clients)** : Gestion de la relation client, contacts, historique
10+
- **📦 Catalogue** : Gestion des produits et services
11+
- **💼 Commercial** : Devis, commandes, suivi commercial
12+
- **💰 Comptabilité** : Facturation, plan comptable, écritures
13+
- **📊 Stocks** : Inventaire, mouvements, valorisation
14+
15+
## 🏗️ Architecture Technique
16+
17+
### Stack Technologique
18+
19+
```ini
20+
Frontend: HTML5 + CSS3 + JavaScript + Jinja2
21+
Backend: Python 3.12 + Flask + SQLAlchemy
22+
Database: MariaDB (données) + MongoDB (logs)
23+
Server: Waitress WSGI + Nginx (reverse proxy)
24+
Deploy: Docker + Docker Compose
25+
```
26+
27+
### Architecture en Couches
28+
29+
```ini
30+
┌─────────────────────────────────────────┐
31+
│ Nginx (Reverse Proxy) │
32+
├─────────────────────────────────────────┤
33+
│ Flask Application (Port 5000) │
34+
│ ┌─────────────────────────────────────┐ │
35+
│ │ Blueprints (Modules) │ │
36+
│ │ ┌─────┬─────┬─────┬─────┬─────┐ │ │
37+
│ │ │ CRM │Cat. │Com. │Comp.│Stock│ │ │
38+
│ │ └─────┴─────┴─────┴─────┴─────┘ │ │
39+
│ └─────────────────────────────────────┘ │
40+
│ ┌─────────────────────────────────────┐ │
41+
│ │ Services (Security, etc.) │ │
42+
│ └─────────────────────────────────────┘ │
43+
│ ┌─────────────────────────────────────┐ │
44+
│ │ Models (SQLAlchemy) │ │
45+
│ └─────────────────────────────────────┘ │
46+
├─────────────────────────────────────────┤
47+
│ MariaDB (Port 3306) │ MongoDB │
48+
│ Données métiers │ (Port 27017) │
49+
│ │ Logs système │
50+
└─────────────────────────────────────────┘
51+
```
52+
53+
## 📁 Structure du Projet
54+
55+
```ini
56+
acfc_base/
57+
├── app_acfc/ # Application principale
58+
│ ├── application.py # Point d'entrée Flask
59+
│ ├── modeles.py # Modèles SQLAlchemy
60+
│ ├── services.py # Services (sécurité, etc.)
61+
│ ├── contextes_bp/ # Modules métiers (Blueprints)
62+
│ │ ├── clients.py # Module CRM
63+
│ │ ├── catalogue.py # Module Catalogue
64+
│ │ ├── commercial.py # Module Commercial
65+
│ │ ├── comptabilite.py # Module Comptabilité
66+
│ │ └── stocks.py # Module Stocks
67+
│ ├── templates/ # Templates HTML
68+
│ └── statics/ # Ressources statiques (CSS/JS)
69+
├── mariadb/ # Configuration base de données
70+
│ ├── dockerfile.mariadb # Dockerfile MariaDB
71+
│ └── init_db.sql # Script d'initialisation
72+
├── nginx/ # Configuration reverse proxy
73+
├── mongo/ # Configuration MongoDB
74+
├── docker-compose.yml # Orchestration des services
75+
└── requirements-app.txt # Dépendances Python
76+
```
77+
78+
## 🔐 Sécurité Implémentée
79+
80+
### Authentification
81+
82+
- **Hachage Argon2** : Protection des mots de passe (résistant GPU)
83+
- **Sessions sécurisées** : Stockage filesystem + chiffrement
84+
- **Protection force brute** : Compteur d'erreurs + verrouillage
85+
- **Expiration automatique** : Timeout 30 minutes
86+
87+
### Configuration Sécurisée
88+
89+
```python
90+
# services.py - Configuration Argon2
91+
PasswordHasher(
92+
time_cost=4, # 4 itérations
93+
memory_cost=2**16, # 64KB mémoire (anti-GPU)
94+
parallelism=3, # 3 threads parallèles
95+
hash_len=32, # Hash 256 bits
96+
salt_len=16 # Sel 128 bits
97+
)
98+
```
99+
100+
### Sessions
101+
102+
- **HTTPOnly cookies** : Protection XSS
103+
- **Signature cryptographique** : Intégrité des données
104+
- **Stockage filesystem** : Plus sécurisé que les cookies
105+
- **Clé secrète** : Via variables d'environnement
106+
107+
## 🗄️ Modèle de Données
108+
109+
### Entités Principales
110+
111+
```sql
112+
-- Utilisateurs et sécurité
113+
99_users (id, pseudo, sha_mdp, email, role, is_active...)
114+
115+
-- CRM - Gestion clients
116+
01_clients (id, type_client, id_part, id_pro, created_at...)
117+
011_part (id, prenom, nom, date_naissance...)
118+
012_pro (id, raison_sociale, siren, rna...)
119+
120+
-- Contacts
121+
02_mail (id, id_client, type_mail, mail, is_principal...)
122+
03_telephone (id, id_client, type_telephone, indicatif, telephone...)
123+
04_adresse (id, id_client, type_adresse, adresse_complete...)
124+
125+
-- Commercial
126+
11_commandes (id, id_client, montant_ht, tva, statut...)
127+
12_lignes_commande (id, id_commande, id_produit, quantite, prix...)
128+
129+
-- Comptabilité
130+
30_pcg (compte, libelle, type_compte...)
131+
31_operations (id, date_operation, libelle, montant...)
132+
133+
-- Stocks
134+
20_produits (id, reference, designation, prix_unitaire...)
135+
21_mouvements_stock (id, id_produit, type_mouvement, quantite...)
136+
```
137+
138+
### Relations Clés
139+
140+
- **Client polymorphe** : Part OU Pro selon type_client
141+
- **Contacts multiples** : N emails/téléphones par client
142+
- **Traçabilité complète** : created_at, updated_at sur toutes les entités
143+
- **Soft delete** : is_active pour conservation historique
144+
145+
## 🐳 Déploiement Docker
146+
147+
### Services Déployés
148+
149+
```yaml
150+
# docker-compose.yml
151+
services:
152+
acfc-app: # Application Flask (port 5000)
153+
acfc-nginx: # Reverse proxy (port 80/443)
154+
acfc-db: # MariaDB (port 3306)
155+
acfc-logs: # MongoDB (port 27017)
156+
```
157+
158+
### Variables d'Environnement (.env)
159+
160+
```bash
161+
# Base de données
162+
DB_HOST=localhost
163+
DB_PORT=3306
164+
DB_NAME=******
165+
DB_USER=******
166+
DB_PASSWORD=mot_de_passe_securise
167+
DB_ROOT_PASSWORD=mot_de_passe_root_securise
168+
169+
# Sessions
170+
SESSION_PASSKEY=cle_secrete_tres_longue_et_aleatoire
171+
172+
# MongoDB
173+
MONGO_INITDB_ROOT_USERNAME=admin
174+
MONGO_INITDB_ROOT_PASSWORD=mot_de_passe_mongo
175+
MONGO_INITDB_DATABASE=******
176+
```
177+
178+
### Commandes de Déploiement
179+
180+
```bash
181+
# Développement
182+
docker-compose up -d
183+
184+
# Production (avec rebuild)
185+
docker-compose up -d --build
186+
187+
# Logs en temps réel
188+
docker-compose logs -f
189+
190+
# Arrêt propre
191+
docker-compose down
192+
193+
# Nettoyage complet (ATTENTION: perte de données)
194+
docker-compose down -v
195+
```
196+
197+
## 📊 Monitoring et Logs
198+
199+
### Health Checks
200+
201+
- **MariaDB** : Vérification connexion SQL
202+
- **MongoDB** : Test ping base de données
203+
- **Application** : Endpoint de santé (à implémenter)
204+
205+
### Logging
206+
207+
```python
208+
# Configuration recommandée
209+
import logging
210+
logging.basicConfig(
211+
level=logging.INFO,
212+
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
213+
handlers=[
214+
logging.FileHandler('/app/logs/acfc.log'),
215+
logging.StreamHandler()
216+
]
217+
)
218+
```
219+
220+
## 🔧 Configuration de Développement
221+
222+
### Prérequis
223+
224+
- Python 3.12+
225+
- Docker & Docker Compose
226+
- Git
227+
228+
### Installation Locale
229+
230+
```bash
231+
# Clone du projet
232+
git clone <repository>
233+
cd acfc_base
234+
235+
# Environnement virtuel Python
236+
python -m venv venv
237+
source venv/bin/activate # Linux/Mac
238+
# ou
239+
venv\Scripts\activate # Windows
240+
241+
# Installation des dépendances
242+
pip install -r requirements-app.txt
243+
244+
# Configuration environnement
245+
cp .env.example .env
246+
# Éditer .env avec vos paramètres
247+
248+
# Démarrage des services
249+
docker-compose up -d
250+
251+
# Test de l'application
252+
curl http://localhost:5000
253+
```
254+
255+
### Debug Mode
256+
257+
```python
258+
# application.py - Mode développement
259+
if __name__ == '__main__':
260+
app.run(
261+
host="0.0.0.0",
262+
port=5000,
263+
debug=True, # Rechargement automatique
264+
use_reloader=True # Surveillance des fichiers
265+
)
266+
```
267+
268+
## 📈 Évolutions Futures
269+
270+
### Fonctionnalités Prévues
271+
272+
- [ ] **API REST complète** : Documentation OpenAPI/Swagger
273+
- [ ] **Authentification OAuth2** : SSO entreprise
274+
- [ ] **Tableau de bord** : Métriques temps réel
275+
- [ ] **Export avancé** : PDF, Excel, CSV
276+
- [ ] **Notifications** : Email, SMS, push
277+
- [ ] **Audit trail** : Traçabilité complète des actions
278+
- [ ] **Multi-tenant** : Support plusieurs entreprises
279+
280+
### Optimisations Techniques
281+
282+
- [ ] **Cache Redis** : Performance requêtes fréquentes
283+
- [ ] **Migrations Alembic** : Évolution schéma base
284+
- [ ] **Tests automatisés** : Coverage >80%
285+
- [ ] **CI/CD Pipeline** : GitLab/GitHub Actions
286+
- [ ] **Monitoring APM** : New Relic, DataDog
287+
- [ ] **Load balancing** : Haute disponibilité
288+
289+
## 🤝 Contribution
290+
291+
### Standards de Code
292+
293+
- **PEP 8** : Style Python
294+
- **Type hints** : Annotations obligatoires
295+
- **Docstrings** : Documentation des fonctions
296+
- **Tests unitaires** : Pytest
297+
298+
### Git Workflow
299+
300+
```bash
301+
# Branche de feature
302+
git checkout -b feature/nouvelle-fonctionnalite
303+
304+
# Commits atomiques et explicites
305+
git commit -m "feat(clients): ajout recherche avancée clients"
306+
307+
# Pull request avec review
308+
git push origin feature/nouvelle-fonctionnalite
309+
```
310+
311+
## 📞 Support
312+
313+
### Contacts
314+
315+
- **Équipe de développement** : Rémi Verschuur
316+
- **Documentation** : Ce fichier + commentaires code
317+
- **Issues** : Tracker Git du projet
318+
319+
### Ressources
320+
321+
- [Documentation Flask](https://flask.palletsprojects.com/)
322+
- [SQLAlchemy ORM](https://docs.sqlalchemy.org/)
323+
- [Docker Compose](https://docs.docker.com/compose/)
324+
- [MariaDB](https://mariadb.org/documentation/)
325+
326+
---
327+
328+
*Documentation mise à jour : Août 2025*
329+
*Version ACFC : 1.0*

0 commit comments

Comments
 (0)