secubox-openwrt/DOCS/archive/MODULE-ENABLE-DISABLE-DESIGN.md
CyberMind-FR 403283419c docs: Reorganize documentation structure and add architecture diagrams
Major documentation improvements and restructuring for better maintainability
and navigation.

## Structural Changes

### New Documentation Organization
- Move all documentation to DOCS/ directory for better organization
- Create DOCS/archive/ for historical documents
- Move deployment scripts to secubox-tools/ directory

### Archived Documents
- COMPLETION_REPORT.md → archive/ (project milestone)
- MODULE-ENABLE-DISABLE-DESIGN.md → archive/ (feature implemented)
- BUILD_ISSUES.md → archive/ (issues resolved)
- Add archive/README.md with archiving policy and document index

## Documentation Enhancements

### Version Standardization
- Add version headers to CLAUDE.md (v1.0.0)
- Add version headers to BUILD_ISSUES.md (v1.0.0)
- Standardize date format to YYYY-MM-DD across all docs

### Cross-References & Navigation
- Add "See Also" sections to PERMISSIONS-GUIDE.md
- Add "See Also" sections to VALIDATION-GUIDE.md
- Link quick references to detailed guides
- Improve documentation discoverability

### Architecture Diagrams (Mermaid)
Add 3 professional diagrams to DEVELOPMENT-GUIDELINES.md:

1. **System Architecture Diagram** (§2)
   - Complete data flow: Browser → LuCI → RPCD → ubus → System
   - Color-coded components by layer
   - Shows JavaScript, RPC, RPCD daemon, UCI, system services

2. **Deployment Workflow Diagram** (§9)
   - Step-by-step deployment process with validation checkpoints
   - Error recovery paths for common issues (403, 404, -32000)
   - Local validation, file transfer, permission fixes, service restarts

3. **Component Hierarchy Diagram** (§1)
   - Standard page structure and CSS class relationships
   - Page → Header → Stats → Content → Cards → Buttons
   - Shows design system component organization

## New Files

### TODO-ANALYSE.md
- Comprehensive documentation improvement roadmap
- Tasks categorized: Immediate, Short-term, Long-term, Optional
- Progress tracking with acceptance criteria
- Covers testing, security, performance guides
- Documentation automation plans

## Benefits

 Cleaner project structure (docs in DOCS/, tools in secubox-tools/)
 Better documentation navigation with cross-references
 Visual understanding through architecture diagrams
 Historical documents archived but accessible
 Standardized versioning across all documentation
 Clear roadmap for future documentation improvements

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-28 09:52:15 +01:00

9.8 KiB

Module Enable/Disable Design Document

Version: 0.3.1 Date: 2025-12-27 Author: Claude Code + CyberMind

🎯 Objectif

Remplacer la logique start/stop des modules SecuBox par une logique enable/disable (activé/désactivé), car les modules sont des plugins installés qu'on souhaite activer ou désactiver, plutôt que des services qu'on démarre ou arrête ponctuellement.

📋 Changements Conceptuels

Avant (v0.2.x)

Module installé → peut être "Running" ou "Stopped"
Actions: Start / Stop / Restart
État affiché: "Running" (vert) ou "Stopped" (gris)

Après (v0.3.1+)

Module installé → peut être "Enabled" ou "Disabled"
Actions: Enable / Disable
État affiché: "Activé" (vert) ou "Désactivé" (gris)
Info complémentaire: "Service running" (si enabled + running)

🏗️ 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'              # NEW: 1 = activé, 0 = désactivé
    option icon '🛡️'
    option color '#ef4444'

2. Méthodes RPCD (luci.secubox)

Anciennes méthodes (DEPRECATED)

  • start_module(module_id) → démarre le service
  • stop_module(module_id) → arrête le service
  • restart_module(module_id) → redémarre le service

Nouvelles méthodes (v0.3.1+)

// Active un module (config UCI + démarrage 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 activé" }

// Désactive un module (config UCI + arrêt 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 désactivé" }

// Vérifie si un module est activé
check_module_enabled(module_id)
 return uci get secubox.${module}.enabled == '1'

// Vérifie si le service tourne (info complémentaire)
check_service_running(module_id)
 return pgrep -f ${service} > /dev/null

3. Structure de données retournée

{
  "modules": [
    {
      "id": "crowdsec",
      "name": "CrowdSec Dashboard",
      "category": "security",
      "installed": true,
      "enabled": true,          // État principal (config UCI)
      "running": true,          // État du service (info)
      "status": "active",       // enabled + running = "active"
      "icon": "🛡️",
      "color": "#ef4444"
    },
    {
      "id": "netdata",
      "name": "Netdata Monitoring",
      "category": "monitoring",
      "installed": true,
      "enabled": false,         // Module désactivé
      "running": false,
      "status": "disabled",     // Status affiché
      "icon": "📊",
      "color": "#22c55e"
    }
  ]
}

4. États Possibles

enabled running status Badge UI Description
true true active ✓ Activé Module activé et service tourne
true false error ⚠️ Erreur Module activé mais service arrêté (problème)
false false disabled ○ Désactivé Module désactivé (état normal)
false true unknown ? Inconnu État incohérent (rare)

🎨 Interface Utilisateur

Dashboard Principal (SecuBox Hub)

Avant:

[CrowdSec Dashboard]  ● Running    [Stop] [Restart]
[Netdata Monitor]     ○ Stopped    [Start]

Après:

[CrowdSec Dashboard]  ✓ Activé     [Désactiver]
[Netdata Monitor]     ○ Désactivé  [Activer]

Module Individual Card

<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">✓ Activé</span>
  </div>
  <div class="module-status">
    <span class="status-dot running"></span>
    <span>Service en cours d'exécution</span>
  </div>
  <div class="module-actions">
    <button class="btn-disable">Désactiver</button>
  </div>
</div>

Classes CSS

/* Module states */
.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;
}

/* Status indicators */
.status-dot.running {
  background: #22c55e;
  animation: pulse 2s infinite;
}

.status-dot.stopped {
  background: #94a3b8;
}

📝 API JavaScript

Fichier: secubox/api.js

// Anciennes méthodes (DEPRECATED - à supprimer)
startModule: callStartModule,     // DEPRECATED
stopModule: callStopModule,       // DEPRECATED
restartModule: callRestartModule, // DEPRECATED

// Nouvelles méthodes (v0.3.1+)
enableModule: callEnableModule,   // NEW
disableModule: callDisableModule, // NEW

// Déclarations 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 Données

Script de migration (à exécuter 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 désactive par défaut
    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 (à ajouter)

## Gestion des Modules

Les modules SecuBox sont des plugins installés qui peuvent être **activés** ou **désactivés**.

### Activer un module
- Cliquez sur le bouton **"Activer"** sur la carte du module
- Le module sera configuré pour démarrer automatiquement au boot
- Le service associé démarrera immédiatement

### Désactiver un module
- Cliquez sur le bouton **"Désactiver"** sur la carte du module
- Le module ne démarrera plus automatiquement au boot
- Le service associé s'arrêtera immédiatement

### États des modules

| Badge | Signification |
|-------|---------------|
| ✓ Activé | Module activé et service en cours d'exécution |
| ⚠️ Erreur | Module activé mais service arrêté (vérifier les logs) |
| ○ Désactivé | Module désactivé (normal) |

**Note:** Les modules restent installés même lorsqu'ils sont désactivés. Pour les supprimer complètement, utilisez le gestionnaire de paquets APK.

🧪 Tests à Effectuer

Tests Unitaires RPCD

# Test enable_module
ubus call luci.secubox enable_module '{"module_id":"crowdsec"}'
# Expected: {"success":true,"message":"Module activé"}

# Vérifier config UCI
uci get secubox.crowdsec.enabled
# Expected: 1

# Vérifier 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"}'
# Expected: {"success":true,"message":"Module désactivé"}

# Vérifier
uci get secubox.crowdsec.enabled
# Expected: 0

Tests Interface

  1. Ouvrir le dashboard SecuBox
  2. Vérifier que les modules affichent "Activé" ou "Désactivé"
  3. Cliquer sur "Désactiver" → badge passe à "○ Désactivé"
  4. Cliquer sur "Activer" → badge passe à "✓ Activé"
  5. Vérifier que le service démarre/s'arrête réellement
  6. Rafraîchir la page → état persiste (UCI)

📦 Modules Affectés

SecuBox Hub (luci-app-secubox)

Fichiers à 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 - Dashboard
  • htdocs/luci-static/resources/view/secubox/modules.js - Module list
  • htdocs/luci-static/resources/secubox/dashboard.css - Styles
  • root/usr/share/rpcd/acl.d/luci-app-secubox.json - ACL permissions
  • README.md - Documentation

System Hub (luci-app-system-hub)

Fichiers à 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

🎯 Bénéfices

  1. Clarté conceptuelle: "Activer/Désactiver" est plus clair que "Démarrer/Arrêter" pour des plugins
  2. Persistance: L'état persiste après redémarrage (UCI + init.d enable/disable)
  3. Cohérence: Tous les modules suivent la même logique
  4. Meilleure UX: L'utilisateur comprend qu'il active/désactive des fonctionnalités
  5. Alignement OpenWrt: Utilise les mécanismes natifs (/etc/init.d/${service} enable/disable)

🔜 Prochaines Étapes

  • Créer ce document de design
  • Implémenter les modifications RPCD
  • Mettre à jour l'API JavaScript
  • Mettre à jour les interfaces UI
  • Mettre à jour les ACL permissions
  • Créer script de migration UCI
  • Mettre à jour la documentation
  • Tester sur router de test
  • Déployer en production

Maintainer: CyberMind contact@cybermind.fr License: Apache-2.0