Files
Cleo/docs/README.md
Pierre 77e7cf5d85 feat: Migration complète vers architecture v2.0.1
CHANGEMENTS MAJEURS:
- Fusion des 3 bases de données (uof_frontal, uof_linet, logs) en une seule base 'cleo'
- Migration vers PDO avec pattern Singleton et requêtes préparées
- Configuration externalisée via variables d'environnement (.env)
- Séparation application (dva-front) et base de données (maria3)

SÉCURITÉ:
- Suppression des credentials en dur dans le code
- Implémentation de la classe Database avec gestion d'erreurs sécurisée
- Protection contre les injections SQL via requêtes préparées

INFRASTRUCTURE:
- Container dva-front : MariaDB supprimé, application PHP uniquement
- Container maria3 : Base de données centralisée MariaDB 11.4
- Script de déploiement optimisé (deploy-cleo-fast.sh)

CORRECTIONS:
- Ajout des tables manquantes (z_sessions, z_stats, marches_listes)
- Compatibilité PDO (fetch_assoc → fetch(PDO::FETCH_ASSOC))
- Suppression des commentaires debug dans les réponses AJAX
- Permissions fichiers (.env 644, logs 777 avec owner nobody)

DOCUMENTATION:
- Mise à jour README.md avec architecture actuelle
- Migration README.md marqué comme complété
- TODO.md avec état d'avancement et prochaines étapes (PROD IN4)

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-12 15:45:52 +02:00

219 lines
7.7 KiB
Markdown

# CLEO - Application de gestion de devis
## Vue d'ensemble
CLEO est une application web de gestion de devis développée en PHP 8.3 pour les PME. Elle utilise une architecture MVC classique avec un framework maison appelé "d6".
**Version actuelle** : 2.0.1 (migration complétée le 12 septembre 2025)
## Architecture technique
### Stack technologique
- **Langage** : PHP 8.3
- **Architecture** : MVC (Model-View-Controller)
- **Framework** : Framework maison "d6"
- **Base de données** : MariaDB 11.4
- **Connexion DB** : PDO avec requêtes préparées
- **Configuration** : Variables d'environnement (.env)
- **Gestion des dépendances** : Composer
- **Bibliothèques principales** :
- PHPMailer 6.8 (envoi d'emails)
- PHPSpreadsheet 1.28 (export/import Excel)
- phpseclib 3.0 (fonctions de sécurité)
### Structure des dossiers
```
cleo/
├── config/ # Configuration de l'application
│ ├── conf.php # Configuration principale (DB, paths, etc.)
│ └── init.php # Initialisation et définition des constantes
├── controllers/ # Contrôleurs MVC
│ ├── cjx*.php # Contrôleurs AJAX
│ └── c*.php # Contrôleurs standards
├── models/ # Modèles de données
├── views/ # Vues et templates
│ └── layouts/ # Layouts réutilisables
├── pub/ # Ressources publiques
│ └── res/
│ └── d6/ # Framework d6
├── vendor/ # Dépendances Composer
└── index.php # Point d'entrée principal
```
## Fonctionnalités métier
### Modules principaux
1. **Gestion des devis** (`cdevis.php`, `mdevis.php`, `vdevis.php`)
- Création, modification, duplication de devis
- Workflow de validation multi-niveaux
- Historisation des modifications
- Calcul automatique des marges
- Gestion des remises par paliers de quantité
2. **Gestion des clients** (`cclients.php`)
- Base clients avec contacts
- Segmentation par secteur géographique
- Types de clients paramétrables
- Import/export de données
3. **Gestion des marchés** (`cmarches.php`)
- Catalogue de marchés
- Association aux devis
- Visibilité paramétrable par rôle
4. **Administration** (`cusers.php`, `csap.php`)
- Gestion des utilisateurs
- Système de rôles et permissions
- Interface d'administration
### Système de rôles
- **DIR-CO** (Direction commerciale) : Accès complet, vision globale
- **DV** (Directeur des ventes) : Gestion de son équipe de RR
- **RR** (Responsable régional) : Gestion de ses propres devis
- **Admin** (rôle 90) : Administration système
## Base de données
### Architecture actuelle
- **Base unique** : `cleo` sur le container `maria3`
- **Connexion** : PDO avec pattern Singleton
- **Sécurité** : Requêtes préparées systématiques
### Tables principales
- `devis` : Table principale des devis
- `devis_produits` : Lignes de produits des devis
- `devis_histo` : Historique des modifications
- `clients` : Base clients
- `produits` : Catalogue produits
- `produits_familles` : Familles de produits avec marges
- `marches` : Référentiel des marchés
- `users` : Utilisateurs et hiérarchie
- `x_*` : Tables de référence (statuts, types, etc.)
- `y_pages` : Configuration des pages/routes
## Points de sécurité
### Vulnérabilités corrigées (v2.0.1)
**1. Stockage des mots de passe**
- Credentials externalisés dans `.env`
- Variables d'environnement utilisées systématiquement
**2. Protection contre les injections SQL**
- Migration complète vers PDO
- Requêtes préparées dans la classe `Database`
- Pattern Singleton pour la connexion
**3. Gestion des erreurs sécurisée**
- Classe `Database` avec gestion d'erreurs centralisée
- Logging contrôlé par variables d'environnement
- Mode debug désactivable en production
### Vulnérabilités restantes à traiter
#### 1. Injections SQL résiduelles
- **Localisation** : Certains contrôleurs (`controllers/cjx*.php`)
- **Problème** : Concaténations directes dans certaines requêtes complexes
- **Recommandation** : Audit complet et migration progressive
#### 2. Configuration IP en dur
- **Localisation** : `config/conf.php`
- **Problème** : Certaines IPs encore hardcodées
- **Recommandation** : Migration complète vers `.env`
### Points positifs de sécurité
- Utilisation de `password_hash()` avec bcrypt pour les mots de passe utilisateurs
- Fonction `nettoie_input()` pour la sanitisation des entrées
- Gestion des sessions PHP native
- Contrôle d'accès basé sur les rôles
## Performances et optimisations
### Points d'attention
1. **Requêtes non optimisées** : Pas de pagination visible dans les listes
2. **Absence de cache** : Requêtes répétitives non mises en cache
3. **Chargement des données** : Chargement complet des listes sans limite
### Recommandations
- Implémenter une pagination côté serveur
- Ajouter un système de cache (Redis/Memcached)
- Optimiser les requêtes avec des index appropriés
- Utiliser le lazy loading pour les données volumineuses
## Qualité du code
### Points forts
- Structure MVC claire et cohérente
- Séparation des responsabilités respectée
- Nommage cohérent des fichiers et fonctions
- Utilisation de Composer pour les dépendances
### Axes d'amélioration
1. **Standards PHP modernes**
- Absence de namespaces
- Pas d'autoloading PSR-4
- Manque de typage strict PHP 8.3
2. **Documentation**
- Peu de commentaires PHPDoc
- Absence de documentation API
- Pas de README technique
3. **Tests**
- Aucun test unitaire visible
- Pas de tests d'intégration
- Absence de CI/CD
4. **Gestion des erreurs**
- Try/catch non systématiques
- Logging basique via `eLog()`
- Pas de monitoring applicatif
## Plan d'amélioration recommandé
### Court terme (Sécurité - En cours)
1. ✅ Migrer les credentials vers des variables d'environnement
2. ✅ Remplacer les requêtes SQL par des requêtes préparées (classe Database)
3. ✅ Implémenter une gestion d'erreurs sécurisée
4. ⏳ Auditer et corriger les failles XSS potentielles
### Moyen terme (Qualité et maintenabilité)
1. Migrer vers une structure PSR-4 avec namespaces
2. Implémenter des tests unitaires (PHPUnit)
3. Ajouter une documentation PHPDoc complète
4. Mettre en place un système de logging structuré (Monolog)
### Long terme (Evolution et performance)
1. Considérer la migration vers un framework moderne (Symfony/Laravel)
2. Implémenter une API REST pour découpler front/back
3. Ajouter un système de cache performant
4. Mettre en place un pipeline CI/CD
## Architecture de déploiement
### Environnement DEV (Actuel - IN3)
- **Container `dva-front`** : Application PHP 8.3 + Nginx (Alpine Linux)
- IP : 13.23.33.42
- MariaDB : **Supprimé** (12/09/2025)
- **Container `maria3`** : Base de données MariaDB 11.4
- IP : 13.23.33.4
- Base : `cleo`
### Environnement PROD (Futur - IN4)
- **Container `nx4`** : Application PHP
- **Container `maria4`** : Base de données
## Conclusion
CLEO v2.0.1 représente une évolution majeure avec la migration réussie vers une architecture sécurisée :
- ✅ Base de données unique et centralisée
- ✅ Connexions PDO avec requêtes préparées
- ✅ Configuration externalisée
- ✅ Séparation application/base de données
Les priorités de sécurité critiques ont été adressées. L'application peut maintenant évoluer sereinement vers des standards plus modernes tout en maintenant sa stabilité opérationnelle.
---
*Document mis à jour le 12 septembre 2025*
*Version 2.0.1 - Post-migration*