Add complete French (fr) and Chinese (zh) translations for all documentation: - Root files: README, CHANGELOG, SECURITY, BETA-RELEASE - docs/: All 16 core documentation files - DOCS/: All 19 deep-dive documents including embedded/ and archive/ - package/secubox/: All 123+ package READMEs - Misc: secubox-tools/, scripts/, EXAMPLES/, config-backups/, streamlit-apps/ Total: 346 translation files created Each file includes language switcher links for easy navigation between English, French, and Chinese versions. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
9.7 KiB
9.7 KiB
Document de Conception Activation/Desactivation des Modules
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:
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 servicestop_module(module_id)→ arrete le servicerestart_module(module_id)→ redemarre le service
Nouvelles methodes (v0.3.1+)
// 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
{
"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
<div class="module-card enabled">
<div class="module-header">
<span class="module-icon">🛡️</span>
<span class="module-name">CrowdSec Dashboard</span>
<span class="module-badge enabled">✓ Active</span>
</div>
<div class="module-status">
<span class="status-dot running"></span>
<span>Service en cours d'execution</span>
</div>
<div class="module-actions">
<button class="btn-disable">Desactiver</button>
</div>
</div>
Classes 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
// 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)
#!/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)
## 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
# 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
- Ouvrir le tableau de bord SecuBox
- Verifier que les modules affichent "Active" ou "Desactive"
- Cliquer sur "Desactiver" → badge passe a "○ Desactive"
- Cliquer sur "Activer" → badge passe a "✓ Active"
- Verifier que le service demarre/s'arrete reellement
- Rafraichir la page → etat persiste (UCI)
Modules Affectes
SecuBox Hub (luci-app-secubox)
Fichiers a modifier:
root/usr/libexec/rpcd/luci.secubox- Backend RPCDhtdocs/luci-static/resources/secubox/api.js- API JShtdocs/luci-static/resources/view/secubox/dashboard.js- Tableau de bordhtdocs/luci-static/resources/view/secubox/modules.js- Liste des moduleshtdocs/luci-static/resources/secubox/dashboard.css- Stylesroot/usr/share/rpcd/acl.d/luci-app-secubox.json- Permissions ACLREADME.md- Documentation
System Hub (luci-app-system-hub)
Fichiers a modifier:
htdocs/luci-static/resources/view/system-hub/components.js- Vue composantshtdocs/luci-static/resources/view/system-hub/services.js- Vue servicesREADME.md- Documentation
Benefices
- Clarte conceptuelle: "Activer/Desactiver" est plus clair que "Demarrer/Arreter" pour des plugins
- Persistance: L'etat persiste apres redemarrage (UCI + init.d enable/disable)
- Coherence: Tous les modules suivent la meme logique
- Meilleure UX: L'utilisateur comprend qu'il active/desactive des fonctionnalites
- Alignement OpenWrt: Utilise les mecanismes natifs (
/etc/init.d/${service} enable/disable)
Prochaines Etapes
- 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 contact@cybermind.fr Licence: Apache-2.0