# Document de Conception Activation/Desactivation des Modules > **Languages:** [English](../../DOCS/archive/MODULE-ENABLE-DISABLE-DESIGN.md) | Francais | [δΈ­ζ–‡](../../DOCS-zh/archive/MODULE-ENABLE-DISABLE-DESIGN.md) **Version:** 0.3.1 **Date:** 2025-12-27 **Auteur:** Claude Code + CyberMind ## Objectif Remplacer la logique **demarrage/arret** des modules SecuBox par une logique **activation/desactivation** (active/desactive), car les modules sont des **plugins installes** qu'on souhaite activer ou desactiver, plutot que des services qu'on demarre ou arrete ponctuellement. ## Changements Conceptuels ### Avant (v0.2.x) ``` Module installe β†’ peut etre "En cours" ou "Arrete" Actions: Demarrer / Arreter / Redemarrer Etat affiche: "En cours" (vert) ou "Arrete" (gris) ``` ### Apres (v0.3.1+) ``` Module installe β†’ peut etre "Active" ou "Desactive" Actions: Activer / Desactiver Etat affiche: "Active" (vert) ou "Desactive" (gris) Info complementaire: "Service en cours" (si active + en cours) ``` ## Architecture Technique ### 1. Configuration UCI Chaque module dans `/etc/config/secubox` aura un champ `enabled`: ```uci config module 'crowdsec' option name 'CrowdSec Dashboard' option package 'luci-app-crowdsec-dashboard' option config 'crowdsec' option category 'security' option enabled '1' # NOUVEAU: 1 = active, 0 = desactive option icon 'πŸ›‘οΈ' option color '#ef4444' ``` ### 2. Methodes RPCD (`luci.secubox`) #### Anciennes methodes (OBSOLETES) - `start_module(module_id)` β†’ demarre le service - `stop_module(module_id)` β†’ arrete le service - `restart_module(module_id)` β†’ redemarre le service #### Nouvelles methodes (v0.3.1+) ```javascript // Active un module (config UCI + demarrage service) enable_module(module_id) β†’ uci set secubox.${module}.enabled='1' β†’ uci commit secubox β†’ /etc/init.d/${service} enable β†’ /etc/init.d/${service} start β†’ return { success: true, message: "Module active" } // Desactive un module (config UCI + arret service) disable_module(module_id) β†’ uci set secubox.${module}.enabled='0' β†’ uci commit secubox β†’ /etc/init.d/${service} disable β†’ /etc/init.d/${service} stop β†’ return { success: true, message: "Module desactive" } // Verifie si un module est active check_module_enabled(module_id) β†’ return uci get secubox.${module}.enabled == '1' // Verifie si le service tourne (info complementaire) check_service_running(module_id) β†’ return pgrep -f ${service} > /dev/null ``` ### 3. Structure de donnees retournee ```json { "modules": [ { "id": "crowdsec", "name": "CrowdSec Dashboard", "category": "security", "installed": true, "enabled": true, // Etat principal (config UCI) "running": true, // Etat du service (info) "status": "active", // enabled + running = "active" "icon": "πŸ›‘οΈ", "color": "#ef4444" }, { "id": "netdata", "name": "Netdata Monitoring", "category": "monitoring", "installed": true, "enabled": false, // Module desactive "running": false, "status": "disabled", // Statut affiche "icon": "πŸ“Š", "color": "#22c55e" } ] } ``` ### 4. Etats Possibles | enabled | running | status | Badge UI | Description | |---------|---------|----------|---------------|-------------| | `true` | `true` | `active` | Active | Module active et service tourne | | `true` | `false` | `error` | Erreur | Module active mais service arrete (probleme) | | `false` | `false` | `disabled` | Desactive | Module desactive (etat normal) | | `false` | `true` | `unknown` | Inconnu | Etat incoherent (rare) | ## Interface Utilisateur ### Tableau de Bord Principal (SecuBox Hub) **Avant:** ``` [CrowdSec Dashboard] ● En cours [Arreter] [Redemarrer] [Netdata Monitor] β—‹ Arrete [Demarrer] ``` **Apres:** ``` [CrowdSec Dashboard] βœ“ Active [Desactiver] [Netdata Monitor] β—‹ Desactive [Activer] ``` ### Carte de Module Individuel ```html
πŸ›‘οΈ CrowdSec Dashboard βœ“ Active
Service en cours d'execution
``` ### Classes CSS ```css /* Etats des modules */ .module-badge.enabled { background: linear-gradient(135deg, #22c55e, #16a34a); color: white; } .module-badge.disabled { background: var(--sh-bg-secondary); color: var(--sh-text-muted); } .module-badge.error { background: linear-gradient(135deg, #f59e0b, #d97706); color: white; } /* Indicateurs de statut */ .status-dot.running { background: #22c55e; animation: pulse 2s infinite; } .status-dot.stopped { background: #94a3b8; } ``` ## API JavaScript ### Fichier: `secubox/api.js` ```javascript // Anciennes methodes (OBSOLETES - a supprimer) startModule: callStartModule, // OBSOLETE stopModule: callStopModule, // OBSOLETE restartModule: callRestartModule, // OBSOLETE // Nouvelles methodes (v0.3.1+) enableModule: callEnableModule, // NOUVEAU disableModule: callDisableModule, // NOUVEAU // Declarations RPC var callEnableModule = rpc.declare({ object: 'luci.secubox', method: 'enable_module', params: ['module_id'], expect: { success: false, message: '' } }); var callDisableModule = rpc.declare({ object: 'luci.secubox', method: 'disable_module', params: ['module_id'], expect: { success: false, message: '' } }); ``` ## Migration des Donnees ### Script de migration (a executer une fois) ```bash #!/bin/sh # migrate-to-enable-disable.sh . /lib/functions.sh migrate_module() { local module="$1" local running=$(pgrep -f "$module" > /dev/null && echo "1" || echo "0") # Si le service tourne actuellement, on l'active if [ "$running" = "1" ]; then uci set secubox.${module}.enabled='1' else # Sinon, on le desactive par defaut uci set secubox.${module}.enabled='0' fi } # Migrer tous les modules config_load secubox config_foreach migrate_module module uci commit secubox echo "Migration completed" ``` ## Documentation Utilisateur ### README.md (a ajouter) ```markdown ## Gestion des Modules Les modules SecuBox sont des plugins installes qui peuvent etre **actives** ou **desactives**. ### Activer un module - Cliquez sur le bouton **"Activer"** sur la carte du module - Le module sera configure pour demarrer automatiquement au boot - Le service associe demarrera immediatement ### Desactiver un module - Cliquez sur le bouton **"Desactiver"** sur la carte du module - Le module ne demarrera plus automatiquement au boot - Le service associe s'arretera immediatement ### Etats des modules | Badge | Signification | |-------|---------------| | βœ“ Active | Module active et service en cours d'execution | | Erreur | Module active mais service arrete (verifier les journaux) | | β—‹ Desactive | Module desactive (normal) | **Note:** Les modules restent installes meme lorsqu'ils sont desactives. Pour les supprimer completement, utilisez le gestionnaire de paquets APK. ``` ## Tests a Effectuer ### Tests Unitaires RPCD ```bash # Test enable_module ubus call luci.secubox enable_module '{"module_id":"crowdsec"}' # Attendu: {"success":true,"message":"Module active"} # Verifier config UCI uci get secubox.crowdsec.enabled # Attendu: 1 # Verifier service /etc/init.d/crowdsec enabled && echo "OK" || echo "FAIL" pgrep crowdsec && echo "Running" || echo "Not running" # Test disable_module ubus call luci.secubox disable_module '{"module_id":"crowdsec"}' # Attendu: {"success":true,"message":"Module desactive"} # Verifier uci get secubox.crowdsec.enabled # Attendu: 0 ``` ### Tests Interface 1. Ouvrir le tableau de bord SecuBox 2. Verifier que les modules affichent "Active" ou "Desactive" 3. Cliquer sur "Desactiver" β†’ badge passe a "β—‹ Desactive" 4. Cliquer sur "Activer" β†’ badge passe a "βœ“ Active" 5. Verifier que le service demarre/s'arrete reellement 6. Rafraichir la page β†’ etat persiste (UCI) ## Modules Affectes ### SecuBox Hub (`luci-app-secubox`) **Fichiers a modifier:** - `root/usr/libexec/rpcd/luci.secubox` - Backend RPCD - `htdocs/luci-static/resources/secubox/api.js` - API JS - `htdocs/luci-static/resources/view/secubox/dashboard.js` - Tableau de bord - `htdocs/luci-static/resources/view/secubox/modules.js` - Liste des modules - `htdocs/luci-static/resources/secubox/dashboard.css` - Styles - `root/usr/share/rpcd/acl.d/luci-app-secubox.json` - Permissions ACL - `README.md` - Documentation ### System Hub (`luci-app-system-hub`) **Fichiers a modifier:** - `htdocs/luci-static/resources/view/system-hub/components.js` - Vue composants - `htdocs/luci-static/resources/view/system-hub/services.js` - Vue services - `README.md` - Documentation ## Benefices 1. **Clarte conceptuelle**: "Activer/Desactiver" est plus clair que "Demarrer/Arreter" pour des plugins 2. **Persistance**: L'etat persiste apres redemarrage (UCI + init.d enable/disable) 3. **Coherence**: Tous les modules suivent la meme logique 4. **Meilleure UX**: L'utilisateur comprend qu'il active/desactive des fonctionnalites 5. **Alignement OpenWrt**: Utilise les mecanismes natifs (`/etc/init.d/${service} enable/disable`) ## Prochaines Etapes - [x] Creer ce document de conception - [ ] Implementer les modifications RPCD - [ ] Mettre a jour l'API JavaScript - [ ] Mettre a jour les interfaces UI - [ ] Mettre a jour les permissions ACL - [ ] Creer script de migration UCI - [ ] Mettre a jour la documentation - [ ] Tester sur routeur de test - [ ] Deployer en production --- **Mainteneur:** CyberMind **Licence:** Apache-2.0