# 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*