# Guide de Validation des Modules SecuBox 🌐 **Langues :** [English](../docs/validation-guide.md) | Français | [äž­æ–‡](../docs-zh/validation-guide.md) **Version :** 1.0.0 **DerniĂšre mise Ă  jour :** 2025-12-28 **Statut :** Actif > **📚 RĂ©fĂ©rence ComplĂšte :** > Ceci est un guide de validation dĂ©taillĂ©. Pour les commandes rapides, voir [QUICK-START.md](quick-start.md) > > **Documentation Connexe :** > - Guide complet : [DEVELOPMENT-GUIDELINES.md §8](development-guidelines.md#validation-checklist) > - Checklist prĂ©-commit : [DEVELOPMENT-GUIDELINES.md §8.1](development-guidelines.md#pre-commit-checklist) > - Checklist post-dĂ©ploiement : [DEVELOPMENT-GUIDELINES.md §8.3](development-guidelines.md#post-deploy-checklist) > - Guide des permissions : [PERMISSIONS-GUIDE.md](permissions-guide.md) > - Briefing automatisation : [CODEX.md](codex.md) --- ## Voir Aussi - **Commandes Rapides :** [QUICK-START.md](quick-start.md) - **RĂ©fĂ©rence des Permissions :** [PERMISSIONS-GUIDE.md](permissions-guide.md) - **Garde-fous d'Automatisation :** [CODEX.md](codex.md) - **ProcĂ©dures de DĂ©ploiement :** [DEVELOPMENT-GUIDELINES.md §9](development-guidelines.md#deployment-procedures) Ce guide explique les vĂ©rifications de validation effectuĂ©es sur les modules SecuBox lors de la gĂ©nĂ©ration et avant le push git. ## Aperçu SecuBox utilise une approche de validation multi-niveaux : 1. **Validation Ă  la GĂ©nĂ©ration de Module** - Valide les modules nouvellement créés/modifiĂ©s 2. **Validation PrĂ©-Push** - Bloque le push git si des problĂšmes critiques sont trouvĂ©s 3. **Validation Ă  l'ExĂ©cution** - VĂ©rifications continues sur les modules dĂ©ployĂ©s ## Outils de Validation ### 1. validate-module-generation.sh Validation complĂšte pour un seul module pendant/aprĂšs la gĂ©nĂ©ration. **Utilisation :** ```bash ./secubox-tools/validate-module-generation.sh luci-app-cdn-cache ``` **VĂ©rifications effectuĂ©es :** - ✅ ComplĂ©tude et exactitude du Makefile - ✅ Convention de nommage des scripts RPCD (doit utiliser le prĂ©fixe `luci.`) - ✅ Permissions d'exĂ©cution des scripts RPCD - ✅ Structure des scripts RPCD (gestionnaires list/call) - ✅ ValiditĂ© JSON du fichier ACL - ✅ Les permissions ACL couvrent les mĂ©thodes RPCD - ✅ ValiditĂ© JSON du fichier menu - ✅ Les chemins de menu correspondent aux emplacements des fichiers de vue - ✅ Les fichiers de vue JavaScript existent - ✅ Utilisation du mode strict JavaScript - ✅ Les appels de mĂ©thodes RPC correspondent aux mĂ©thodes RPCD - ✅ Les noms d'objets ubus correspondent aux noms des scripts RPCD - ✅ ValiditĂ© de la configuration UCI (si prĂ©sente) - ✅ Scan de sĂ©curitĂ© (identifiants codĂ©s en dur, commandes dangereuses) - ✅ PrĂ©sence de documentation **Codes de sortie :** - `0` - Toutes les vĂ©rifications rĂ©ussies - `1` - Erreurs critiques trouvĂ©es (le module ne doit pas ĂȘtre dĂ©ployĂ©) ### 2. pre-push-validation.sh Valide tous les modules avant d'autoriser le push git. **Utilisation :** ```bash # Automatique (via hook git) : git push # la validation s'exĂ©cute automatiquement # Manuel : ./secubox-tools/pre-push-validation.sh ``` **VĂ©rifications effectuĂ©es :** - ✅ VĂ©rification des modifications git indexĂ©es - ✅ Conventions de nommage RPCD sur tous les modules - ✅ Validation des chemins de menu sur tous les modules - ✅ Validation de la syntaxe JSON - ✅ Permissions d'exĂ©cution RPCD - ✅ Couverture des mĂ©thodes ACL - ✅ Validation du Makefile - ✅ Scans de sĂ©curitĂ© - ✅ Validation complĂšte des modules modifiĂ©s **Codes de sortie :** - `0` - Push autorisĂ© - `1` - Push bloquĂ© (erreurs critiques) ### 3. validate-modules.sh Validation rapide de tous les modules (outil existant). **Utilisation :** ```bash ./secubox-tools/validate-modules.sh ``` Voir `secubox-tools/README.md` pour plus de dĂ©tails. ## Installation des Hooks Git Pour activer la validation automatique avant le push git : ```bash ./secubox-tools/install-git-hooks.sh ``` Cela crĂ©e un lien symbolique de `.git/hooks/pre-push` vers `secubox-tools/pre-push-validation.sh`. ## Conventions de Nommage Critiques ### 1. Le Script RPCD DOIT Correspondre Ă  l'Objet ubus **RĂšgle :** Le nom de fichier du script RPCD DOIT correspondre exactement au nom de l'objet ubus dĂ©clarĂ© en JavaScript. **Pourquoi :** Le systĂšme RPC de LuCI recherche les scripts RPCD par leur nom de fichier. Si le nom ne correspond pas, vous obtenez : - `RPC call failed with error -32000: Object not found` - `Command failed: Method not found` **Exemple :** ```javascript // JavaScript (htdocs/luci-static/resources/view/cdn-cache/overview.js) var callStatus = rpc.declare({ object: 'luci.cdn-cache', // ← Doit correspondre au nom du fichier RPCD method: 'status' }); ``` ```bash # Le nom du fichier script RPCD DOIT ĂȘtre : root/usr/libexec/rpcd/luci.cdn-cache # ← Exactement 'luci.cdn-cache' ``` **Erreurs courantes :** - ❌ `root/usr/libexec/rpcd/cdn-cache` (prĂ©fixe `luci.` manquant) - ❌ `root/usr/libexec/rpcd/luci-cdn-cache` (utilise un tiret au lieu d'un point) - ❌ `root/usr/libexec/rpcd/cdn_cache` (utilise un underscore) **Validation :** ```bash # VĂ©rifier le nommage : ./secubox-tools/validate-module-generation.sh luci-app-cdn-cache # Rechercher : # ✓ RPCD script follows naming convention (luci.* prefix) # ✓ CRITICAL: RPCD script name matches ACL ubus object ``` ### 2. Les Chemins de Menu DOIVENT Correspondre aux Emplacements des Fichiers de Vue **RĂšgle :** Les entrĂ©es `path` du JSON de menu DOIVENT correspondre aux chemins rĂ©els des fichiers de vue. **Pourquoi :** LuCI charge les vues en fonction du chemin dans le menu. Mauvais chemin = HTTP 404. **Exemple :** ```json // Menu (root/usr/share/luci/menu.d/luci-app-netifyd-dashboard.json) { "action": { "type": "view", "path": "netifyd-dashboard/overview" // ← Doit correspondre Ă  l'emplacement du fichier } } ``` ```bash # Le fichier de vue DOIT exister Ă  : htdocs/luci-static/resources/view/netifyd-dashboard/overview.js # ↑ MĂȘme chemin que le menu ↑ ``` **Erreurs courantes :** - ❌ Menu : `"path": "netifyd/overview"` mais fichier Ă  `view/netifyd-dashboard/overview.js` - ❌ Menu : `"path": "overview"` mais fichier Ă  `view/netifyd-dashboard/overview.js` **Validation :** ```bash # VĂ©rifier les chemins : ./secubox-tools/validate-module-generation.sh luci-app-netifyd-dashboard # Rechercher : # ✓ Menu path 'netifyd-dashboard/overview' → view file EXISTS ``` ### 3. Tous les Objets ubus DOIVENT Utiliser le PrĂ©fixe `luci.` **RĂšgle :** Chaque dĂ©claration d'objet ubus doit commencer par `luci.` **Pourquoi :** Convention de nommage cohĂ©rente pour les applications LuCI. Le systĂšme ACL l'attend. **Exemple :** ```javascript // ✅ Correct : object: 'luci.cdn-cache' object: 'luci.system-hub' object: 'luci.wireguard-dashboard' // ❌ Incorrect : object: 'cdn-cache' // PrĂ©fixe luci. manquant object: 'systemhub' // PrĂ©fixe luci. manquant ``` **Validation :** ```bash # VĂ©rifier la convention : ./secubox-tools/validate-modules.sh # Rechercher : # ✓ ubus object 'luci.cdn-cache' follows naming convention ``` ## Checklist de GĂ©nĂ©ration de Module Utilisez cette checklist lors de la gĂ©nĂ©ration d'un nouveau module : ### Phase 1 : GĂ©nĂ©ration Initiale - [ ] CrĂ©er le rĂ©pertoire du module : `luci-app-/` - [ ] GĂ©nĂ©rer le Makefile avec tous les champs requis - [ ] CrĂ©er le script RPCD Ă  `root/usr/libexec/rpcd/luci.` - [ ] Rendre le script RPCD exĂ©cutable : `chmod +x` - [ ] Ajouter le shebang au RPCD : `#!/bin/sh` - [ ] ImplĂ©menter les mĂ©thodes RPCD (list, call, status, etc.) - [ ] CrĂ©er le fichier ACL avec les permissions read/write - [ ] CrĂ©er le JSON de menu avec les chemins corrects - [ ] CrĂ©er les fichiers JavaScript de vue - [ ] Ajouter `'use strict';` Ă  tous les fichiers JS ### Phase 2 : Validation - [ ] ExĂ©cuter la validation de gĂ©nĂ©ration de module : ```bash ./secubox-tools/validate-module-generation.sh luci-app- ``` - [ ] Corriger toutes les ERREURS (critiques) - [ ] Examiner tous les AVERTISSEMENTS (recommandĂ©) ### Phase 3 : Validation d'IntĂ©gration - [ ] VĂ©rifier que le nom du script RPCD correspond Ă  l'objet ubus : ```bash grep -r "object:" luci-app-/htdocs --include="*.js" ls -la luci-app-/root/usr/libexec/rpcd/ # Les noms doivent correspondre exactement ``` - [ ] VĂ©rifier que les chemins de menu correspondent aux fichiers de vue : ```bash grep '"path":' luci-app-/root/usr/share/luci/menu.d/*.json ls -R luci-app-/htdocs/luci-static/resources/view/ # Les chemins doivent s'aligner ``` - [ ] VĂ©rifier que les permissions ACL couvrent toutes les mĂ©thodes RPCD : ```bash grep 'case "$2"' luci-app-/root/usr/libexec/rpcd/* grep -A 20 '"ubus":' luci-app-/root/usr/share/rpcd/acl.d/*.json # Toutes les mĂ©thodes doivent ĂȘtre dans ACL ``` ### Phase 4 : PrĂ©-Commit - [ ] ExĂ©cuter la validation complĂšte : ```bash ./secubox-tools/validate-modules.sh ``` - [ ] Examiner les rĂ©sultats du scan de sĂ©curitĂ© - [ ] VĂ©rifier la validitĂ© JSON : ```bash find luci-app- -name "*.json" -exec python3 -m json.tool {} \; > /dev/null ``` - [ ] Optionnel : ExĂ©cuter shellcheck sur RPCD : ```bash shellcheck luci-app-/root/usr/libexec/rpcd/* ``` ### Phase 5 : Commit Git - [ ] Indexer les modifications : ```bash git add luci-app- ``` - [ ] Commiter avec un message descriptif : ```bash git commit -m "feat: implement module - Add RPCD backend with methods: status, get_*, set_* - Create views for overview, settings, etc. - Configure ACL permissions - Add menu entries đŸ€– Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 " ``` - [ ] Pousser (la validation s'exĂ©cute automatiquement) : ```bash git push ``` ## Erreurs de Validation Courantes et Corrections ### Erreur : Le nom du script RPCD ne correspond pas Ă  l'objet ubus ``` ✗ ERROR: luci-app-cdn-cache: RPCD script 'cdn-cache' does NOT match ubus object 'luci.cdn-cache' ``` **Correction :** ```bash cd luci-app-cdn-cache/root/usr/libexec/rpcd mv cdn-cache luci.cdn-cache ``` ### Erreur : Chemin menu → fichier NON TROUVÉ ``` ✗ ERROR: luci-app-netifyd: Menu path 'netifyd/overview' → file NOT FOUND Expected: htdocs/luci-static/resources/view/netifyd/overview.js ``` **Option de correction 1 :** Mettre Ă  jour le chemin du menu pour correspondre au fichier : ```bash # Éditer root/usr/share/luci/menu.d/luci-app-netifyd-dashboard.json # Changer : "path": "netifyd/overview" # En : "path": "netifyd-dashboard/overview" ``` **Option de correction 2 :** DĂ©placer le fichier de vue pour correspondre au menu : ```bash mv htdocs/luci-static/resources/view/netifyd-dashboard \ htdocs/luci-static/resources/view/netifyd ``` ### Erreur : Le script RPCD N'EST PAS exĂ©cutable ``` ✗ ERROR: luci-app-cdn-cache: luci.cdn-cache is NOT executable ``` **Correction :** ```bash chmod +x luci-app-cdn-cache/root/usr/libexec/rpcd/luci.cdn-cache ``` ### Erreur : MĂ©thode 'get_stats' du RPCD non trouvĂ©e dans ACL ``` ⚠ WARNING: luci-app-cdn-cache: Method 'get_stats' from RPCD not in ACL ``` **Correction :** ```bash # Éditer root/usr/share/rpcd/acl.d/luci-app-cdn-cache.json # Ajouter 'get_stats' au tableau read.ubus : { "luci-app-cdn-cache": { "read": { "ubus": { "luci.cdn-cache": ["status", "get_config", "get_stats"] ↑ Ajouter ici } } } } ``` ### Erreur : Syntaxe JSON invalide ``` ✗ ERROR: luci-app-cdn-cache: acl.d JSON is INVALID - syntax error ``` **Correction :** ```bash # Valider le JSON : python3 -m json.tool root/usr/share/rpcd/acl.d/luci-app-cdn-cache.json # ProblĂšmes courants : # - Virgule manquante entre les Ă©lĂ©ments du tableau # - Virgule en fin de dernier Ă©lĂ©ment # - Guillemets non Ă©chappĂ©s dans les chaĂźnes ``` ## Contourner la Validation (NON RECOMMANDÉ) Dans de rares cas, vous pourriez avoir besoin de contourner la validation : ```bash # Ignorer la validation prĂ©-push : git push --no-verify # Ignorer la validation de gĂ©nĂ©ration de module : # (impossible Ă  contourner - c'est uniquement informatif) ``` **⚠ AVERTISSEMENT :** Contourner la validation peut conduire Ă  des modules cassĂ©s en production ! ## IntĂ©gration avec CI/CD ### GitHub Actions Ajouter la validation Ă  votre workflow : ```yaml name: Validate Modules on: [push, pull_request] jobs: validate: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Install dependencies run: | sudo apt-get update sudo apt-get install -y python3 shellcheck - name: Run module validation run: | chmod +x secubox-tools/validate-modules.sh ./secubox-tools/validate-modules.sh - name: Run pre-push validation run: | chmod +x secubox-tools/pre-push-validation.sh ./secubox-tools/pre-push-validation.sh ``` ## Bonnes Pratiques 1. **Toujours valider avant de commiter** ```bash ./secubox-tools/validate-module-generation.sh luci-app- ``` 2. **Installer les hooks git pour une validation automatique** ```bash ./secubox-tools/install-git-hooks.sh ``` 3. **Corriger les erreurs immĂ©diatement** - N'accumulez pas de dette de validation 4. **Examiner les avertissements** - Ils indiquent souvent de vrais problĂšmes 5. **Tester sur OpenWrt** avant de marquer comme terminĂ© : ```bash scp bin/packages/*/base/luci-app-*.ipk root@192.168.1.1:/tmp/ ssh root@192.168.1.1 opkg install /tmp/luci-app-*.ipk /etc/init.d/rpcd restart /etc/init.d/uhttpd restart ``` 6. **Documenter les exigences spĂ©cifiques au module** dans le README du module ## DĂ©pannage ### Le script de validation ne s'exĂ©cute pas ```bash # S'assurer que les scripts sont exĂ©cutables : chmod +x secubox-tools/*.sh # VĂ©rifier les dĂ©pendances : which python3 # Pour la validation JSON which shellcheck # Pour la validation des scripts shell ``` ### Le hook git ne s'exĂ©cute pas ```bash # VĂ©rifier que le hook est installĂ© : ls -la .git/hooks/pre-push # RĂ©installer les hooks : ./secubox-tools/install-git-hooks.sh ``` ### Faux positifs dans la validation Si la validation signale incorrectement une erreur, veuillez le signaler : - CrĂ©er un ticket avec la sortie complĂšte de la validation - Inclure le nom du module et la vĂ©rification spĂ©cifique qui a Ă©chouĂ© - Nous mettrons Ă  jour la logique de validation ## Ressources SupplĂ©mentaires - [CLAUDE.md](claude.md) - Documentation principale du projet - [secubox-tools/README.md](https://github.com/CyberMind-FR/secubox-openwrt/blob/master/secubox-tools/README.md) - Documentation des outils - [Feature Regeneration Prompts](feature-regeneration-prompts.md) - Prompts de gĂ©nĂ©ration de modules ## Support Si vous rencontrez des problĂšmes de validation : 1. Consultez ce guide pour les erreurs courantes 2. ExĂ©cutez la validation avec une sortie verbeuse 3. Examinez CLAUDE.md pour les conventions de nommage 4. CrĂ©ez un ticket sur GitHub avec la sortie de la validation