From 15e04b58a555307e01e8be4a0351e9fe261df087 Mon Sep 17 00:00:00 2001 From: CyberMind-FR Date: Sat, 31 Jan 2026 13:40:22 +0100 Subject: [PATCH] feat(core): Add secubox-swiss unified CLI tool Swiss Army knife for SecuBox with interactive menu and direct commands: - status: System overview with services, docker, mesh - mesh: P2P mesh operations (peers, discover, sync) - security: CrowdSec status, threats, block/unblock - docker: Container management - haproxy: Vhosts and reload - network: Diagnostics, ports, connections - recover: Snapshot/restore operations - feed: Package management Also updates feed with Jitsi packages and core v0.10.0-r11. Co-Authored-By: Claude Opus 4.5 --- .../root/www/secubox-feed/Packages | 183 +-- .../root/www/secubox-feed/Packages.gz | Bin 7995 -> 8257 bytes .../luci-app-jitsi_1.0.0-r1_all.ipk | Bin 0 -> 5140 bytes .../secubox-app-jitsi_1.0.0-r1_all.ipk | Bin 0 -> 8908 bytes .../secubox-core_0.10.0-r11_all.ipk | Bin 0 -> 87807 bytes package/secubox/secubox-core/Makefile | 10 +- .../secubox-core/root/usr/sbin/secubox-swiss | 1038 ++++++++++++----- 7 files changed, 880 insertions(+), 351 deletions(-) create mode 100644 package/secubox/secubox-app-bonus/root/www/secubox-feed/luci-app-jitsi_1.0.0-r1_all.ipk create mode 100644 package/secubox/secubox-app-bonus/root/www/secubox-feed/secubox-app-jitsi_1.0.0-r1_all.ipk create mode 100644 package/secubox/secubox-app-bonus/root/www/secubox-feed/secubox-core_0.10.0-r11_all.ipk mode change 100644 => 100755 package/secubox/secubox-core/root/usr/sbin/secubox-swiss diff --git a/package/secubox/secubox-app-bonus/root/www/secubox-feed/Packages b/package/secubox/secubox-app-bonus/root/www/secubox-feed/Packages index e40740e0..94918e5e 100644 --- a/package/secubox/secubox-app-bonus/root/www/secubox-feed/Packages +++ b/package/secubox/secubox-app-bonus/root/www/secubox-feed/Packages @@ -8,7 +8,7 @@ Architecture: all Installed-Size: 71680 Description: Comprehensive authentication and session management with captive portal, OAuth2/OIDC integration, voucher system, and time-based access control Filename: luci-app-auth-guardian_0.4.0-r3_all.ipk -Size: 12078 +Size: 12079 Package: luci-app-bandwidth-manager Version: 0.5.0-r2 @@ -20,7 +20,7 @@ Architecture: all Installed-Size: 378880 Description: Advanced bandwidth management with QoS rules, client quotas, and SQM integration Filename: luci-app-bandwidth-manager_0.5.0-r2_all.ipk -Size: 66974 +Size: 66965 Package: luci-app-cdn-cache Version: 0.5.0-r3 @@ -32,7 +32,7 @@ Architecture: all Installed-Size: 122880 Description: Dashboard for managing local CDN caching proxy on OpenWrt Filename: luci-app-cdn-cache_0.5.0-r3_all.ipk -Size: 23188 +Size: 23187 Package: luci-app-client-guardian Version: 0.4.0-r7 @@ -44,7 +44,7 @@ Architecture: all Installed-Size: 307200 Description: Network Access Control with client monitoring, zone management, captive portal, parental controls, and SMS/email alerts Filename: luci-app-client-guardian_0.4.0-r7_all.ipk -Size: 57046 +Size: 57042 Package: luci-app-crowdsec-dashboard Version: 0.7.0-r29 @@ -56,7 +56,7 @@ Architecture: all Installed-Size: 296960 Description: Real-time security monitoring dashboard for CrowdSec on OpenWrt Filename: luci-app-crowdsec-dashboard_0.7.0-r29_all.ipk -Size: 55584 +Size: 55580 Package: luci-app-cyberfeed Version: 0.1.1-r1 @@ -68,7 +68,7 @@ Architecture: all Installed-Size: 71680 Description: Cyberpunk-themed RSS feed aggregator dashboard with social media support Filename: luci-app-cyberfeed_0.1.1-r1_all.ipk -Size: 12839 +Size: 12835 Package: luci-app-exposure Version: 1.0.0-r3 @@ -80,7 +80,7 @@ Architecture: all Installed-Size: 153600 Description: LuCI SecuBox Service Exposure Manager Filename: luci-app-exposure_1.0.0-r3_all.ipk -Size: 20536 +Size: 20532 Package: luci-app-gitea Version: 1.0.0-r2 @@ -104,7 +104,7 @@ Architecture: all Installed-Size: 40960 Description: Modern dashboard for Glances system monitoring with SecuBox theme Filename: luci-app-glances_1.0.0-r2_all.ipk -Size: 6969 +Size: 6965 Package: luci-app-haproxy Version: 1.0.0-r8 @@ -116,7 +116,7 @@ Architecture: all Installed-Size: 204800 Description: Web interface for managing HAProxy load balancer with vhosts, SSL certificates, and backend routing Filename: luci-app-haproxy_1.0.0-r8_all.ipk -Size: 34168 +Size: 34165 Package: luci-app-hexojs Version: 1.0.0-r3 @@ -128,7 +128,19 @@ Architecture: all Installed-Size: 215040 Description: Modern dashboard for Hexo static site generator on OpenWrt Filename: luci-app-hexojs_1.0.0-r3_all.ipk -Size: 32977 +Size: 32974 + +Package: luci-app-jitsi +Version: 1.0.0-r1 +Depends: secubox-app-jitsi +License: Apache-2.0 +Section: luci +Maintainer: OpenWrt LuCI community +Architecture: all +Installed-Size: 30720 +Description: LuCI Jitsi Meet Configuration +Filename: luci-app-jitsi_1.0.0-r1_all.ipk +Size: 5140 Package: luci-app-ksm-manager Version: 0.4.0-r2 @@ -140,7 +152,7 @@ Architecture: all Installed-Size: 112640 Description: Centralized cryptographic key management with hardware security module (HSM) support for Nitrokey and YubiKey devices. Provides secure key storage, certificate management, SSH key handling, and secret storage with audit logging. Filename: luci-app-ksm-manager_0.4.0-r2_all.ipk -Size: 18725 +Size: 18719 Package: luci-app-localai Version: 0.1.0-r15 @@ -152,7 +164,7 @@ Architecture: all Installed-Size: 81920 Description: Modern dashboard for LocalAI LLM management on OpenWrt Filename: luci-app-localai_0.1.0-r15_all.ipk -Size: 14367 +Size: 14358 Package: luci-app-lyrion Version: 1.0.0-r1 @@ -164,7 +176,7 @@ Architecture: all Installed-Size: 40960 Description: LuCI support for Lyrion Music Server Filename: luci-app-lyrion_1.0.0-r1_all.ipk -Size: 6733 +Size: 6724 Package: luci-app-magicmirror2 Version: 0.4.0-r6 @@ -176,7 +188,7 @@ Architecture: all Installed-Size: 71680 Description: Modern dashboard for MagicMirror2 smart display platform with module manager and SecuBox theme Filename: luci-app-magicmirror2_0.4.0-r6_all.ipk -Size: 12277 +Size: 12278 Package: luci-app-mailinabox Version: 1.0.0-r1 @@ -188,7 +200,7 @@ Architecture: all Installed-Size: 30720 Description: LuCI support for Mail-in-a-Box Filename: luci-app-mailinabox_1.0.0-r1_all.ipk -Size: 5487 +Size: 5482 Package: luci-app-media-flow Version: 0.6.4-r1 @@ -200,7 +212,7 @@ Architecture: all Installed-Size: 102400 Description: Real-time detection and monitoring of streaming services (Netflix, YouTube, Spotify, etc.) with quality estimation, history tracking, and alerts. Supports nDPId local DPI and netifyd. Filename: luci-app-media-flow_0.6.4-r1_all.ipk -Size: 19127 +Size: 19111 Package: luci-app-metablogizer Version: 1.0.0-r3 @@ -212,7 +224,7 @@ Architecture: all Installed-Size: 112640 Description: LuCI support for MetaBlogizer Static Site Publisher Filename: luci-app-metablogizer_1.0.0-r3_all.ipk -Size: 23504 +Size: 23505 Package: luci-app-metabolizer Version: 1.0.0-r2 @@ -224,7 +236,7 @@ Architecture: all Installed-Size: 30720 Description: LuCI support for Metabolizer CMS Filename: luci-app-metabolizer_1.0.0-r2_all.ipk -Size: 4756 +Size: 4754 Package: luci-app-mitmproxy Version: 0.4.0-r6 @@ -236,7 +248,7 @@ Architecture: all Installed-Size: 102400 Description: Modern dashboard for mitmproxy HTTPS traffic inspection with SecuBox theme Filename: luci-app-mitmproxy_0.4.0-r6_all.ipk -Size: 18935 +Size: 18932 Package: luci-app-mmpm Version: 0.2.0-r3 @@ -248,7 +260,7 @@ Architecture: all Installed-Size: 51200 Description: Web interface for MMPM - MagicMirror Package Manager Filename: luci-app-mmpm_0.2.0-r3_all.ipk -Size: 7902 +Size: 7903 Package: luci-app-mqtt-bridge Version: 0.4.0-r4 @@ -260,7 +272,7 @@ Architecture: all Installed-Size: 122880 Description: USB-to-MQTT IoT hub with SecuBox theme Filename: luci-app-mqtt-bridge_0.4.0-r4_all.ipk -Size: 22779 +Size: 22775 Package: luci-app-ndpid Version: 1.1.2-r2 @@ -272,7 +284,7 @@ Architecture: all Installed-Size: 122880 Description: Modern dashboard for nDPId deep packet inspection on OpenWrt Filename: luci-app-ndpid_1.1.2-r2_all.ipk -Size: 22458 +Size: 22453 Package: luci-app-netdata-dashboard Version: 0.5.0-r2 @@ -284,7 +296,7 @@ Architecture: all Installed-Size: 133120 Description: Real-time system monitoring dashboard with Netdata integration for OpenWrt Filename: luci-app-netdata-dashboard_0.5.0-r2_all.ipk -Size: 22401 +Size: 22400 Package: luci-app-network-modes Version: 0.5.0-r3 @@ -296,7 +308,7 @@ Architecture: all Installed-Size: 307200 Description: Configure OpenWrt for different network modes: Sniffer, Access Point, Relay, Router Filename: luci-app-network-modes_0.5.0-r3_all.ipk -Size: 55613 +Size: 55610 Package: luci-app-network-tweaks Version: 1.0.0-r7 @@ -308,7 +320,7 @@ Architecture: all Installed-Size: 81920 Description: Unified network services dashboard with DNS/hosts sync, CDN cache control, and WPAD auto-proxy configuration Filename: luci-app-network-tweaks_1.0.0-r7_all.ipk -Size: 15464 +Size: 15459 Package: luci-app-nextcloud Version: 1.0.0-r1 @@ -320,7 +332,7 @@ Architecture: all Installed-Size: 30720 Description: LuCI support for Nextcloud Filename: luci-app-nextcloud_1.0.0-r1_all.ipk -Size: 6482 +Size: 6481 Package: luci-app-ollama Version: 0.1.0-r1 @@ -344,7 +356,7 @@ Architecture: all Installed-Size: 51200 Description: Modern dashboard for PicoBrew Server management on OpenWrt Filename: luci-app-picobrew_1.0.0-r1_all.ipk -Size: 9978 +Size: 9979 Package: luci-app-secubox Version: 0.7.1-r4 @@ -356,7 +368,7 @@ Architecture: all Installed-Size: 266240 Description: Central control hub for all SecuBox modules. Provides unified dashboard, module status, system health monitoring, and quick actions. Filename: luci-app-secubox_0.7.1-r4_all.ipk -Size: 49902 +Size: 49897 Package: luci-app-secubox-admin Version: 1.0.0-r19 @@ -367,7 +379,7 @@ Architecture: all Installed-Size: 337920 Description: Unified admin control center for SecuBox appstore plugins with system monitoring Filename: luci-app-secubox-admin_1.0.0-r19_all.ipk -Size: 57098 +Size: 57097 Package: luci-app-secubox-crowdsec Version: 1.0.0-r3 @@ -379,7 +391,7 @@ Architecture: all Installed-Size: 81920 Description: LuCI SecuBox CrowdSec Dashboard Filename: luci-app-secubox-crowdsec_1.0.0-r3_all.ipk -Size: 13922 +Size: 13919 Package: luci-app-secubox-netdiag Version: 1.0.0-r1 @@ -391,7 +403,7 @@ Architecture: all Installed-Size: 61440 Description: Real-time DSA switch port statistics, error monitoring, and network health diagnostics Filename: luci-app-secubox-netdiag_1.0.0-r1_all.ipk -Size: 11996 +Size: 11999 Package: luci-app-secubox-netifyd Version: 1.2.1-r1 @@ -403,7 +415,7 @@ Architecture: all Installed-Size: 215040 Description: Complete LuCI interface for netifyd DPI engine with real-time flow monitoring, application detection, network analytics, and flow action plugins Filename: luci-app-secubox-netifyd_1.2.1-r1_all.ipk -Size: 39503 +Size: 39497 Package: luci-app-secubox-p2p Version: 0.1.0-r1 @@ -415,7 +427,7 @@ Architecture: all Installed-Size: 215040 Description: LuCI SecuBox P2P Hub Filename: luci-app-secubox-p2p_0.1.0-r1_all.ipk -Size: 39260 +Size: 39256 Package: luci-app-secubox-portal Version: 0.7.0-r2 @@ -427,7 +439,7 @@ Architecture: all Installed-Size: 122880 Description: Unified entry point for all SecuBox applications with tabbed navigation Filename: luci-app-secubox-portal_0.7.0-r2_all.ipk -Size: 24557 +Size: 24555 Package: luci-app-secubox-security-threats Version: 1.0.0-r4 @@ -439,7 +451,7 @@ Architecture: all Installed-Size: 71680 Description: Unified dashboard integrating netifyd DPI threats with CrowdSec intelligence for real-time threat monitoring and automated blocking Filename: luci-app-secubox-security-threats_1.0.0-r4_all.ipk -Size: 13910 +Size: 13904 Package: luci-app-service-registry Version: 1.0.0-r1 @@ -451,7 +463,7 @@ Architecture: all Installed-Size: 194560 Description: Unified service aggregation with HAProxy vhosts, Tor hidden services, and QR-coded landing page Filename: luci-app-service-registry_1.0.0-r1_all.ipk -Size: 39827 +Size: 39821 Package: luci-app-streamlit Version: 1.0.0-r9 @@ -463,7 +475,7 @@ Architecture: all Installed-Size: 122880 Description: Modern dashboard for Streamlit Platform management on OpenWrt Filename: luci-app-streamlit_1.0.0-r9_all.ipk -Size: 20473 +Size: 20469 Package: luci-app-system-hub Version: 0.5.1-r4 @@ -475,7 +487,7 @@ Architecture: all Installed-Size: 358400 Description: Central system control with monitoring, services, logs, and backup Filename: luci-app-system-hub_0.5.1-r4_all.ipk -Size: 66351 +Size: 66343 Package: luci-app-tor-shield Version: 1.0.0-r10 @@ -487,7 +499,7 @@ Architecture: all Installed-Size: 133120 Description: Modern dashboard for Tor anonymization on OpenWrt Filename: luci-app-tor-shield_1.0.0-r10_all.ipk -Size: 24536 +Size: 24532 Package: luci-app-traffic-shaper Version: 0.4.0-r2 @@ -499,7 +511,7 @@ Architecture: all Installed-Size: 92160 Description: Advanced traffic shaping with TC/CAKE for precise bandwidth control Filename: luci-app-traffic-shaper_0.4.0-r2_all.ipk -Size: 15634 +Size: 15631 Package: luci-app-vhost-manager Version: 0.5.0-r5 @@ -511,7 +523,7 @@ Architecture: all Installed-Size: 153600 Description: Nginx reverse proxy manager with Let's Encrypt SSL certificates, authentication, and WebSocket support Filename: luci-app-vhost-manager_0.5.0-r5_all.ipk -Size: 26200 +Size: 26197 Package: luci-app-wireguard-dashboard Version: 0.7.0-r5 @@ -523,7 +535,7 @@ Architecture: all Installed-Size: 235520 Description: Modern dashboard for WireGuard VPN monitoring on OpenWrt Filename: luci-app-wireguard-dashboard_0.7.0-r5_all.ipk -Size: 45373 +Size: 45363 Package: luci-app-zigbee2mqtt Version: 1.0.0-r2 @@ -535,7 +547,7 @@ Architecture: all Installed-Size: 40960 Description: Graphical interface for managing the Zigbee2MQTT docker application. Filename: luci-app-zigbee2mqtt_1.0.0-r2_all.ipk -Size: 7090 +Size: 7084 Package: luci-theme-secubox Version: 0.4.7-r1 @@ -547,7 +559,7 @@ Architecture: all Installed-Size: 460800 Description: Global CyberMood design system (CSS/JS/i18n) shared by all SecuBox dashboards. Filename: luci-theme-secubox_0.4.7-r1_all.ipk -Size: 111797 +Size: 111791 Package: secubox-app Version: 1.0.0-r2 @@ -558,7 +570,7 @@ Installed-Size: 92160 Description: Command line helper for SecuBox App Store manifests. Installs /usr/sbin/secubox-app and ships the default manifests under /usr/share/secubox/plugins/. Filename: secubox-app_1.0.0-r2_all.ipk -Size: 11188 +Size: 11180 Package: secubox-app-adguardhome Version: 1.0.0-r2 @@ -572,7 +584,7 @@ Description: Installer, configuration, and service manager for running AdGuard inside Docker on SecuBox-powered OpenWrt systems. Network-wide ad blocker with DNS-over-HTTPS/TLS support and detailed analytics. Filename: secubox-app-adguardhome_1.0.0-r2_all.ipk -Size: 2877 +Size: 2878 Package: secubox-app-auth-logger Version: 1.2.2-r1 @@ -590,7 +602,7 @@ Description: Logs authentication failures from LuCI/rpcd and Dropbear SSH - JavaScript hook to intercept login failures - CrowdSec parser and bruteforce scenario Filename: secubox-app-auth-logger_1.2.2-r1_all.ipk -Size: 9380 +Size: 9374 Package: secubox-app-crowdsec-custom Version: 1.1.0-r1 @@ -613,7 +625,7 @@ Description: Custom CrowdSec configurations for SecuBox web interface protectio - Webapp generic auth bruteforce protection - Whitelist for trusted networks Filename: secubox-app-crowdsec-custom_1.1.0-r1_all.ipk -Size: 5764 +Size: 5759 Package: secubox-app-cs-firewall-bouncer Version: 0.0.31-r4 @@ -640,7 +652,7 @@ Description: SecuBox CrowdSec Firewall Bouncer for OpenWrt. - Automatic restart on firewall reload - procd service management Filename: secubox-app-cs-firewall-bouncer_0.0.31-r4_aarch64_cortex-a72.ipk -Size: 5049324 +Size: 5049323 Package: secubox-app-cyberfeed Version: 0.2.1-r1 @@ -654,7 +666,7 @@ Description: Cyberpunk-themed RSS feed aggregator for OpenWrt/SecuBox. Features emoji injection, neon styling, and RSS-Bridge support for social media feeds (Facebook, Twitter, Mastodon). Filename: secubox-app-cyberfeed_0.2.1-r1_all.ipk -Size: 12451 +Size: 12449 Package: secubox-app-domoticz Version: 1.0.0-r2 @@ -667,7 +679,7 @@ Installed-Size: 10240 Description: Installer, configuration, and service manager for running Domoticz inside Docker on SecuBox-powered OpenWrt systems. Filename: secubox-app-domoticz_1.0.0-r2_all.ipk -Size: 2552 +Size: 2546 Package: secubox-app-exposure Version: 1.0.0-r1 @@ -682,7 +694,7 @@ Description: Unified service exposure manager for SecuBox. - Dynamic Tor hidden service management - HAProxy SSL reverse proxy configuration Filename: secubox-app-exposure_1.0.0-r1_all.ipk -Size: 6828 +Size: 6832 Package: secubox-app-gitea Version: 1.0.0-r5 @@ -705,7 +717,7 @@ Description: Gitea Git Platform - Self-hosted lightweight Git service Runs in LXC container with Alpine Linux. Configure in /etc/config/gitea. Filename: secubox-app-gitea_1.0.0-r5_all.ipk -Size: 9406 +Size: 9405 Package: secubox-app-glances Version: 1.0.0-r1 @@ -728,7 +740,7 @@ Description: Glances - Cross-platform system monitoring tool for SecuBox. Runs in LXC container for isolation and security. Configure in /etc/config/glances. Filename: secubox-app-glances_1.0.0-r1_all.ipk -Size: 5535 +Size: 5531 Package: secubox-app-haproxy Version: 1.0.0-r23 @@ -748,7 +760,7 @@ Description: HAProxy load balancer and reverse proxy running in an LXC containe - Stats dashboard - Rate limiting and ACLs Filename: secubox-app-haproxy_1.0.0-r23_all.ipk -Size: 15683 +Size: 15674 Package: secubox-app-hexojs Version: 1.0.0-r8 @@ -772,7 +784,32 @@ Description: Hexo CMS - Self-hosted static blog generator for OpenWrt Runs in LXC container with Alpine Linux. Configure in /etc/config/hexojs. Filename: secubox-app-hexojs_1.0.0-r8_all.ipk -Size: 94937 +Size: 94931 + +Package: secubox-app-jitsi +Version: 1.0.0-r1 +Depends: docker, docker-compose, wget, openssl-util +License: Apache-2.0 +Section: utils +Maintainer: CyberMind Studio +Architecture: all +Installed-Size: 40960 +Description: Jitsi Meet - Secure, fully featured video conferencing for SecuBox. + + Features: + - End-to-end encrypted video conferences + - No account required for guests + - Screen sharing and recording + - Chat, reactions, and virtual backgrounds + - Mobile app support (iOS/Android) + - WebRTC-based, works in any browser + - Self-hosted for complete privacy + + Runs via Docker containers for easy deployment. + Integrates with HAProxy for SSL termination. + Configure in /etc/config/jitsi. +Filename: secubox-app-jitsi_1.0.0-r1_all.ipk +Size: 8908 Package: secubox-app-localai Version: 2.25.0-r1 @@ -794,7 +831,7 @@ Description: LocalAI native binary package for OpenWrt. API: http://:8081/v1 Filename: secubox-app-localai_2.25.0-r1_all.ipk -Size: 5712 +Size: 5714 Package: secubox-app-localai-wb Version: 2.25.0-r1 @@ -818,7 +855,7 @@ Description: LocalAI native binary package for OpenWrt. API: http://:8080/v1 Filename: secubox-app-localai-wb_2.25.0-r1_all.ipk -Size: 7954 +Size: 7942 Package: secubox-app-lyrion Version: 2.0.2-r1 @@ -838,7 +875,7 @@ Description: Lyrion Media Server (formerly Logitech Media Server / Squeezebox S Auto-detects available runtime, preferring LXC for lower resource usage. Configure runtime in /etc/config/lyrion. Filename: secubox-app-lyrion_2.0.2-r1_all.ipk -Size: 7284 +Size: 7275 Package: secubox-app-magicmirror2 Version: 0.4.0-r8 @@ -860,7 +897,7 @@ Description: MagicMirror² - Open source modular smart mirror platform for Secu Runs in LXC container for isolation and security. Configure in /etc/config/magicmirror2. Filename: secubox-app-magicmirror2_0.4.0-r8_all.ipk -Size: 9250 +Size: 9247 Package: secubox-app-mailinabox Version: 2.0.0-r1 @@ -885,7 +922,7 @@ Description: Complete email server solution using docker-mailserver for SecuBox Commands: mailinaboxctl --help Filename: secubox-app-mailinabox_2.0.0-r1_all.ipk -Size: 7570 +Size: 7571 Package: secubox-app-metabolizer Version: 1.0.0-r3 @@ -906,7 +943,7 @@ Description: Metabolizer Blog Pipeline - Integrated CMS with Git-based workflow Pipeline: Edit in Streamlit -> Push to Gitea -> Build with Hexo -> Publish Filename: secubox-app-metabolizer_1.0.0-r3_all.ipk -Size: 13979 +Size: 13980 Package: secubox-app-mitmproxy Version: 0.4.0-r16 @@ -927,7 +964,7 @@ Description: mitmproxy - Interactive HTTPS proxy for SecuBox-powered OpenWrt sy Runs in LXC container for isolation and security. Configure in /etc/config/mitmproxy. Filename: secubox-app-mitmproxy_0.4.0-r16_all.ipk -Size: 10213 +Size: 10208 Package: secubox-app-mmpm Version: 0.2.0-r5 @@ -948,7 +985,7 @@ Description: MMPM (MagicMirror Package Manager) for SecuBox. Runs inside the MagicMirror2 LXC container. Filename: secubox-app-mmpm_0.2.0-r5_all.ipk -Size: 3976 +Size: 3977 Package: secubox-app-nextcloud Version: 1.0.0-r2 @@ -962,7 +999,7 @@ Description: Installer, configuration, and service manager for running Nextclou inside Docker on SecuBox-powered OpenWrt systems. Self-hosted file sync and share with calendar, contacts, and collaboration. Filename: secubox-app-nextcloud_1.0.0-r2_all.ipk -Size: 2960 +Size: 2956 Package: secubox-app-ollama Version: 0.1.0-r1 @@ -984,7 +1021,7 @@ Description: Ollama - Simple local LLM runtime for SecuBox-powered OpenWrt syst Runs in Docker/Podman container. Configure in /etc/config/ollama. Filename: secubox-app-ollama_0.1.0-r1_all.ipk -Size: 5742 +Size: 5734 Package: secubox-app-picobrew Version: 1.0.0-r7 @@ -1006,7 +1043,7 @@ Description: PicoBrew Server - Self-hosted brewing controller for PicoBrew devi Runs in LXC container with Python/Flask backend. Configure in /etc/config/picobrew. Filename: secubox-app-picobrew_1.0.0-r7_all.ipk -Size: 5539 +Size: 5541 Package: secubox-app-streamlit Version: 1.0.0-r5 @@ -1033,7 +1070,7 @@ Description: Streamlit App Platform - Self-hosted Python data app platform Configure in /etc/config/streamlit. Filename: secubox-app-streamlit_1.0.0-r5_all.ipk -Size: 11719 +Size: 11718 Package: secubox-app-tor Version: 1.0.0-r1 @@ -1090,13 +1127,13 @@ Filename: secubox-app-zigbee2mqtt_1.0.0-r3_all.ipk Size: 3544 Package: secubox-core -Version: 0.10.0-r9 +Version: 0.10.0-r11 Depends: jq, jsonfilter License: GPL-2.0 Section: admin Maintainer: SecuBox Team Architecture: all -Installed-Size: 450560 +Installed-Size: 481280 Description: SecuBox Core Framework provides the foundational infrastructure for the modular SecuBox system including: - Module/AppStore management @@ -1106,8 +1143,8 @@ Description: SecuBox Core Framework provides the foundational infrastructure fo - Diagnostics and health checks - Unified CLI interface - ubus RPC backend -Filename: secubox-core_0.10.0-r9_all.ipk -Size: 80068 +Filename: secubox-core_0.10.0-r11_all.ipk +Size: 87807 Package: secubox-p2p Version: 0.6.0-r1 @@ -1126,5 +1163,5 @@ Description: SecuBox P2P Hub backend providing peer discovery, mesh networking and MirrorBox NetMesh Catalog for cross-chain distributed service registry with HAProxy vhost discovery and multi-endpoint access URLs. Filename: secubox-p2p_0.6.0-r1_all.ipk -Size: 40190 +Size: 40189 diff --git a/package/secubox/secubox-app-bonus/root/www/secubox-feed/Packages.gz b/package/secubox/secubox-app-bonus/root/www/secubox-feed/Packages.gz index a8fd8f4fe3dabe9d7d8b9a1ca0f144b606721663..f25a878366e7598cb8dec2b375e82d91c5ea82a4 100644 GIT binary patch literal 8257 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 literal 7995 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 xTV|j6?2qrcrpM0 diff --git a/package/secubox/secubox-app-bonus/root/www/secubox-feed/luci-app-jitsi_1.0.0-r1_all.ipk b/package/secubox/secubox-app-bonus/root/www/secubox-feed/luci-app-jitsi_1.0.0-r1_all.ipk new file mode 100644 index 0000000000000000000000000000000000000000..41ab22001c841100c951753f6e932dc4774333a4 GIT binary patch literal 5140 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 CWD!XK literal 0 HcmV?d00001 diff --git a/package/secubox/secubox-app-bonus/root/www/secubox-feed/secubox-app-jitsi_1.0.0-r1_all.ipk b/package/secubox/secubox-app-bonus/root/www/secubox-feed/secubox-app-jitsi_1.0.0-r1_all.ipk new file mode 100644 index 0000000000000000000000000000000000000000..a210d9f9321c24713e11f9b7ea85d717e0e2f1d2 GIT binary patch literal 8908 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 PG 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 Oq5lWdEYK # Direct command +# secubox-swiss help # Show all commands VERSION="1.0.0" -SCRIPT_PATH="$(readlink -f "$0")" -SECUBOX_DIR="/srv/secubox" +SCRIPT_NAME="secubox-swiss" -# Colors -C_CYAN='\033[0;36m' -C_GREEN='\033[0;32m' -C_YELLOW='\033[1;33m' -C_RED='\033[0;31m' -C_BOLD='\033[1m' -C_NC='\033[0m' +# Colors - use printf for BusyBox compatibility +RED=$(printf '\033[0;31m') +GREEN=$(printf '\033[0;32m') +YELLOW=$(printf '\033[1;33m') +BLUE=$(printf '\033[0;34m') +CYAN=$(printf '\033[0;36m') +BOLD=$(printf '\033[1m') +NC=$(printf '\033[0m') -banner() { - echo "${C_CYAN}" - cat << 'BANNER' - _____ _____ _____ _ _ ____ _____ __ - / ____| ____/ ____| | | | _ \ / _ \ \/ / - | (___ | _|| | | | | | |_) | | | \ / - \___ \| |__| | | |_| | _ <| |_| / \ - ____) |____| |____| |_| | |_) \___/_/\_\ - |_____/______\_____|_____|____/ - SWISS -BANNER - echo "${C_NC}" - echo "${C_BOLD}SecuBox Swiss Army Knife v$VERSION${C_NC}" - echo "Unified Management • Recovery • Mesh • Self-Enhancement" +# ============================================================================ +# Helper Functions +# ============================================================================ + +print_header() { + echo "" + echo "${CYAN}╔══════════════════════════════════════════════════════════════════╗${NC}" + echo "${CYAN}║${NC} ${BOLD}SecuBox Swiss Army Knife${NC} v${VERSION} ${CYAN}║${NC}" + echo "${CYAN}║${NC} KISS modular self-enhancing architecture ${CYAN}║${NC}" + echo "${CYAN}╚══════════════════════════════════════════════════════════════════╝${NC}" echo "" } -# ============================================================================ -# Tool Dispatch -# ============================================================================ -tool_mesh() { - exec /usr/sbin/secubox-mesh "$@" +print_section() { + echo "${YELLOW}━━━ $1 ━━━${NC}" } -tool_recover() { - exec /usr/sbin/secubox-recover "$@" +cmd_exists() { + command -v "$1" >/dev/null 2>&1 } -tool_console() { - if [ -f /usr/lib/secubox-console/secubox_console.py ]; then - exec python3 /usr/lib/secubox-console/secubox_console.py "$@" +run_or_warn() { + local cmd="$1" + shift + if cmd_exists "$cmd"; then + "$cmd" "$@" else - echo "Console not installed. Install with: opkg install secubox-console" - exit 1 + echo "${RED}[!] Command not found: $cmd${NC}" + echo " Install with: opkg install " + return 1 fi } -tool_mitm() { - exec /usr/sbin/secubox-mitm-logs "$@" -} - # ============================================================================ -# Quick Actions +# Status & Info Commands # ============================================================================ -action_status() { - echo "${C_CYAN}=== SecuBox Status ===${C_NC}" - echo "" - # System - echo "${C_BOLD}System:${C_NC}" - echo " Hostname: $(uci get system.@system[0].hostname 2>/dev/null || hostname)" - echo " Version: $(cat /etc/secubox-version 2>/dev/null || echo 'unknown')" - echo " Uptime: $(uptime | cut -d',' -f1 | cut -d' ' -f4-)" - echo "" +cmd_status() { + print_section "System Status" - # Mesh - echo "${C_BOLD}Mesh:${C_NC}" - if [ -f /srv/secubox/mesh/node.id ]; then - echo " Node ID: $(cat /srv/secubox/mesh/node.id)" - echo " Peers: $(cat /srv/secubox/mesh/peers.json 2>/dev/null | jsonfilter -e '@.peers[*]' 2>/dev/null | wc -l)" - echo " Blocks: $(find /srv/secubox/mesh/blocks -type f 2>/dev/null | wc -l)" - else - echo " Not initialized. Run: secubox-swiss mesh init" - fi - echo "" + # Node info + local node_id=$(cat /etc/secubox-node-id 2>/dev/null || echo "unknown") + local hostname=$(uci -q get system.@system[0].hostname || hostname) + local version=$(cat /etc/secubox-version 2>/dev/null || echo "unknown") + local uptime_info=$(uptime | sed 's/.*up //' | sed 's/,.*//') - # Recovery - echo "${C_BOLD}Recovery:${C_NC}" - echo " Snapshots: $(ls /srv/secubox/recover/archives/*.tar.gz 2>/dev/null | wc -l)" - echo " Profiles: $(ls /srv/secubox/recover/profiles/*.json 2>/dev/null | wc -l)" - echo "" - - # Services - echo "${C_BOLD}Key Services:${C_NC}" - for svc in haproxy crowdsec mitmproxy; do - if pgrep -x "$svc" >/dev/null 2>&1; then - echo " $svc: ${C_GREEN}running${C_NC}" - else - echo " $svc: ${C_RED}stopped${C_NC}" - fi - done -} - -action_backup() { - local name="${1:-backup-$(date +%Y%m%d-%H%M%S)}" - echo "${C_CYAN}Creating backup: $name${C_NC}" - /usr/sbin/secubox-recover snapshot "$name" -} - -action_reborn() { - local output="${1:-/tmp/secubox-reborn.sh}" - echo "${C_CYAN}Generating reborn script: $output${C_NC}" - /usr/sbin/secubox-recover reborn "$output" - echo "" - echo "${C_GREEN}Reborn script ready!${C_NC}" - echo "Copy to any machine and run to restore SecuBox." -} - -action_sync() { - echo "${C_CYAN}Syncing mesh...${C_NC}" - /usr/sbin/secubox-mesh sync - echo "" - echo "${C_CYAN}Syncing recovery catalog...${C_NC}" - /usr/sbin/secubox-recover apps-sync -} - -action_health() { - echo "${C_CYAN}=== Health Check ===${C_NC}" - echo "" - - # Disk - echo "${C_BOLD}Disk Usage:${C_NC}" - df -h / /srv /opt 2>/dev/null | grep -v "^Filesystem" + echo "${BOLD}Node:${NC} $hostname (${node_id:0:12})" + echo "${BOLD}Version:${NC} $version" + echo "${BOLD}Uptime:${NC} $uptime_info" echo "" # Memory - echo "${C_BOLD}Memory:${C_NC}" - free -m 2>/dev/null || cat /proc/meminfo | head -3 + local mem_info=$(free | grep Mem) + local mem_total=$(echo "$mem_info" | awk '{print int($2/1024)}') + local mem_used=$(echo "$mem_info" | awk '{print int($3/1024)}') + local mem_pct=$((mem_used * 100 / mem_total)) + echo "${BOLD}Memory:${NC} ${mem_used}MB / ${mem_total}MB (${mem_pct}%)" + + # Disk + local disk_info=$(df /overlay 2>/dev/null | tail -1) + local disk_pct=$(echo "$disk_info" | awk '{print $5}') + echo "${BOLD}Disk:${NC} ${disk_pct} used" echo "" - # Network - echo "${C_BOLD}Network:${C_NC}" - echo " WAN IP: $(curl -s --connect-timeout 2 ifconfig.me 2>/dev/null || echo 'unavailable')" - echo " LAN IP: $(uci get network.lan.ipaddr 2>/dev/null)" + # Services + print_section "Core Services" + for svc in crowdsec haproxy dockerd nginx uhttpd dnsmasq; do + if pgrep "$svc" >/dev/null 2>&1; then + echo " ${GREEN}●${NC} $svc" + elif [ -f "/etc/init.d/$svc" ]; then + echo " ${RED}●${NC} $svc (stopped)" + fi + done echo "" - # Security - echo "${C_BOLD}Security:${C_NC}" - if [ -f /var/log/secubox-access.log ]; then - scans=$(grep -c '"is_scan":true' /var/log/secubox-access.log 2>/dev/null || echo 0) - auths=$(grep -c '"is_auth_attempt":true' /var/log/secubox-access.log 2>/dev/null || echo 0) - echo " Scan attempts: $scans" - echo " Auth attempts: $auths" - else - echo " MITM logging not active" + # Docker containers + if cmd_exists docker; then + local containers=$(docker ps --format '{{.Names}}' 2>/dev/null | wc -l) + if [ "$containers" -gt 0 ]; then + print_section "Docker Containers" + docker ps --format ' {{.Names}}: {{.Status}}' 2>/dev/null + echo "" + fi + fi + + # Mesh status + if [ -f /tmp/secubox-p2p-status.json ]; then + print_section "Mesh Network" + local peers=$(jsonfilter -i /tmp/secubox-p2p-status.json -e '@.peers_online' 2>/dev/null || echo "0") + local services=$(jsonfilter -i /tmp/secubox-p2p-status.json -e '@.services_count' 2>/dev/null || echo "0") + echo " Peers online: $peers" + echo " Services: $services" fi } -action_logs() { - local component="${1:-all}" +cmd_info() { + print_section "System Information" - case "$component" in - mitm) - /usr/sbin/secubox-mitm-logs tail + echo "${BOLD}Hardware:${NC}" + echo " Model: $(cat /tmp/sysinfo/model 2>/dev/null || uname -m)" + echo " CPU: $(grep -c processor /proc/cpuinfo) cores" + echo " Arch: $(uname -m)" + echo "" + + echo "${BOLD}Network:${NC}" + local wan_ip=$(ip -4 addr show wan 2>/dev/null | grep inet | awk '{print $2}' | cut -d/ -f1) + local lan_ip=$(uci -q get network.lan.ipaddr || echo "192.168.255.1") + echo " LAN IP: $lan_ip" + [ -n "$wan_ip" ] && echo " WAN IP: $wan_ip" + + # WireGuard + if cmd_exists wg; then + local wg_peers=$(wg show all peers 2>/dev/null | wc -l) + [ "$wg_peers" -gt 0 ] && echo " WG Peers: $wg_peers" + fi + echo "" + + echo "${BOLD}SecuBox:${NC}" + echo " Version: $(cat /etc/secubox-version 2>/dev/null || echo 'unknown')" + echo " Node ID: $(cat /etc/secubox-node-id 2>/dev/null || echo 'unknown')" + echo " Feed: $(opkg list-installed | grep -c secubox) packages" +} + +# ============================================================================ +# Mesh & P2P Commands +# ============================================================================ + +cmd_mesh() { + local subcmd="${1:-status}" + shift 2>/dev/null + + case "$subcmd" in + status) + run_or_warn secubox-p2p status ;; - mesh) - cat /srv/secubox/mesh/chain.json 2>/dev/null | jsonfilter -e '@.blocks[-5:]' 2>/dev/null + peers) + run_or_warn secubox-p2p peers ;; - security) - /usr/sbin/secubox-mitm-logs scan + discover) + run_or_warn secubox-p2p discover "$@" + ;; + sync) + run_or_warn secubox-p2p sync + ;; + services) + run_or_warn secubox-p2p shared-services + ;; + broadcast) + run_or_warn secubox-p2p broadcast "$@" ;; *) - echo "${C_CYAN}=== Recent Logs ===${C_NC}" - logread -l 30 2>/dev/null || tail -30 /var/log/messages 2>/dev/null + echo "Usage: $SCRIPT_NAME mesh " + ;; + esac +} + +cmd_factory() { + local subcmd="${1:-status}" + + case "$subcmd" in + status) + curl -s "http://127.0.0.1:7331/api/factory/status" 2>/dev/null | jsonfilter -e '@' || echo "Factory API not available" + ;; + catalog) + curl -s "http://127.0.0.1:7331/api/factory/catalog" 2>/dev/null | jsonfilter -e '@' || echo "Catalog not available" + ;; + open) + local ip=$(uci -q get network.lan.ipaddr || echo "192.168.255.1") + echo "Factory Dashboard: http://$ip:7331/factory/" + ;; + *) + echo "Usage: $SCRIPT_NAME factory " ;; esac } # ============================================================================ -# Self-Enhancement +# Recovery Commands # ============================================================================ -action_self_update() { - echo "${C_CYAN}Checking for updates...${C_NC}" - # Check mesh peers for newer version - local peers=$(cat /srv/secubox/mesh/peers.json 2>/dev/null | jsonfilter -e '@.peers[*].addr' 2>/dev/null) +cmd_recover() { + local subcmd="${1:-help}" + shift 2>/dev/null - for peer in $peers; do - echo " Checking peer: $peer" - local remote_ver=$(curl -s --connect-timeout 3 "http://$peer:7331/api/version" 2>/dev/null | jsonfilter -e '@.swiss' 2>/dev/null) + case "$subcmd" in + snapshot) + run_or_warn secubox-recover snapshot "$@" + ;; + list) + run_or_warn secubox-recover list + ;; + restore) + run_or_warn secubox-recover restore "$@" + ;; + reborn) + run_or_warn secubox-recover reborn + ;; + profile) + run_or_warn secubox-recover profile "$@" + ;; + help|*) + echo "Usage: $SCRIPT_NAME recover " + echo "" + echo " snapshot [name] Create configuration snapshot" + echo " list List available snapshots" + echo " restore Restore from snapshot" + echo " reborn Generate self-restore script" + echo " profile Profile management" + ;; + esac +} - if [ -n "$remote_ver" ] && [ "$remote_ver" != "$VERSION" ]; then - echo " ${C_YELLOW}Update available: $remote_ver${C_NC}" +cmd_backup() { + local target="${1:-/tmp/secubox-backup-$(date +%Y%m%d-%H%M%S).tar.gz}" - # Fetch and verify - local update_hash=$(curl -s "http://$peer:7331/api/update/swiss/hash" 2>/dev/null) - curl -s "http://$peer:7331/api/update/swiss" -o /tmp/secubox-swiss.new 2>/dev/null + print_section "Creating Backup" + echo "Target: $target" + echo "" - local local_hash=$(sha256sum /tmp/secubox-swiss.new 2>/dev/null | cut -d' ' -f1) + # Create backup + tar czf "$target" \ + /etc/config \ + /etc/secubox* \ + /etc/dropbear \ + /etc/haproxy 2>/dev/null - if [ "$local_hash" = "$update_hash" ]; then - echo " ${C_GREEN}Hash verified. Installing...${C_NC}" - chmod +x /tmp/secubox-swiss.new - mv /tmp/secubox-swiss.new "$SCRIPT_PATH" - echo " ${C_GREEN}Updated to $remote_ver${C_NC}" - exit 0 - else - echo " ${C_RED}Hash mismatch. Skipping.${C_NC}" - fi - fi - done - - echo " ${C_GREEN}Already up to date: $VERSION${C_NC}" + if [ -f "$target" ]; then + local size=$(ls -lh "$target" | awk '{print $5}') + echo "${GREEN}✓${NC} Backup created: $target ($size)" + else + echo "${RED}✗${NC} Backup failed" + return 1 + fi } # ============================================================================ -# Interactive Mode +# Apps & Services Commands # ============================================================================ + +cmd_apps() { + local subcmd="${1:-list}" + shift 2>/dev/null + + case "$subcmd" in + list) + run_or_warn secubox-app list + ;; + install) + run_or_warn secubox-app install "$@" + ;; + remove) + run_or_warn secubox-app remove "$@" + ;; + status) + run_or_warn secubox-app status "$@" + ;; + store) + run_or_warn secubox-appstore list + ;; + *) + echo "Usage: $SCRIPT_NAME apps " + ;; + esac +} + +cmd_service() { + local svc="$1" + local action="${2:-status}" + + if [ -z "$svc" ]; then + echo "Usage: $SCRIPT_NAME service " + echo "" + echo "Available services:" + ls /etc/init.d/ | grep -E "^(crowdsec|haproxy|jitsi|gitea|docker|nginx)" | sed 's/^/ /' + return + fi + + case "$action" in + start|stop|restart|enable|disable) + /etc/init.d/"$svc" "$action" + ;; + status) + if pgrep "$svc" >/dev/null 2>&1; then + echo "${GREEN}●${NC} $svc is running" + pgrep -a "$svc" | head -3 + else + echo "${RED}●${NC} $svc is stopped" + fi + ;; + *) + echo "Unknown action: $action" + ;; + esac +} + +# ============================================================================ +# Security Commands +# ============================================================================ + +cmd_security() { + local subcmd="${1:-status}" + + case "$subcmd" in + status) + print_section "Security Status" + + # CrowdSec + if pgrep crowdsec >/dev/null 2>&1; then + echo "${GREEN}●${NC} CrowdSec: running" + local decisions=$(cscli decisions list -o json 2>/dev/null | jsonfilter -e '@[*]' 2>/dev/null | wc -l) + echo " Active decisions: $decisions" + else + echo "${RED}●${NC} CrowdSec: stopped" + fi + + # Firewall + local fw_rules=$(iptables -L INPUT 2>/dev/null | wc -l) + echo "${GREEN}●${NC} Firewall: $fw_rules rules" + + # Tor + if pgrep tor >/dev/null 2>&1; then + echo "${GREEN}●${NC} Tor: running" + fi + ;; + + scan) + print_section "Security Scan" + run_or_warn secubox-exposure scan + ;; + + threats) + run_or_warn cscli alerts list -l 10 + ;; + + block) + if [ -n "$2" ]; then + cscli decisions add -i "$2" -d 24h -r "manual block via swiss" + echo "${GREEN}✓${NC} Blocked: $2" + else + echo "Usage: $SCRIPT_NAME security block " + fi + ;; + + unblock) + if [ -n "$2" ]; then + cscli decisions delete -i "$2" + echo "${GREEN}✓${NC} Unblocked: $2" + else + echo "Usage: $SCRIPT_NAME security unblock " + fi + ;; + + *) + echo "Usage: $SCRIPT_NAME security " + ;; + esac +} + +# ============================================================================ +# Network Commands +# ============================================================================ + +cmd_network() { + local subcmd="${1:-status}" + + case "$subcmd" in + status) + print_section "Network Status" + + # Interfaces + echo "${BOLD}Interfaces:${NC}" + ip -br addr show | grep -v "^lo" | while read -r line; do + iface=$(echo "$line" | awk '{print $1}') + state=$(echo "$line" | awk '{print $2}') + addr=$(echo "$line" | awk '{print $3}') + + if [ "$state" = "UP" ]; then + echo " ${GREEN}●${NC} $iface: $addr" + else + echo " ${RED}●${NC} $iface: $state" + fi + done + echo "" + + # DNS + echo "${BOLD}DNS:${NC}" + grep nameserver /tmp/resolv.conf.d/resolv.conf.auto 2>/dev/null | head -3 | sed 's/^/ /' + echo "" + + # WireGuard + if cmd_exists wg && wg show interfaces | grep -q .; then + echo "${BOLD}WireGuard:${NC}" + wg show all | grep -E "^(interface|peer|endpoint)" | sed 's/^/ /' + fi + ;; + + diag) + print_section "Network Diagnostics" + run_or_warn secubox-diagnostics network + ;; + + ports) + print_section "Listening Ports" + netstat -tlnp 2>/dev/null | grep LISTEN | awk '{print " " $4 " " $7}' | sort -t: -k2 -n + ;; + + connections) + print_section "Active Connections" + netstat -tn 2>/dev/null | grep ESTABLISHED | awk '{print " " $5}' | sort | uniq -c | sort -rn | head -10 + ;; + + *) + echo "Usage: $SCRIPT_NAME network " + ;; + esac +} + +# ============================================================================ +# Docker Commands +# ============================================================================ + +cmd_docker() { + local subcmd="${1:-ps}" + shift 2>/dev/null + + if ! cmd_exists docker; then + echo "${RED}Docker not installed${NC}" + return 1 + fi + + case "$subcmd" in + ps) + docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" + ;; + logs) + docker logs --tail 50 "$@" + ;; + restart) + docker restart "$@" + ;; + stats) + docker stats --no-stream + ;; + prune) + echo "Cleaning unused Docker resources..." + docker system prune -f + ;; + *) + echo "Usage: $SCRIPT_NAME docker " + ;; + esac +} + +# ============================================================================ +# HAProxy Commands +# ============================================================================ + +cmd_haproxy() { + local subcmd="${1:-status}" + + case "$subcmd" in + status) + if pgrep haproxy >/dev/null 2>&1; then + echo "${GREEN}●${NC} HAProxy is running" + run_or_warn haproxyctl status 2>/dev/null || true + else + echo "${RED}●${NC} HAProxy is stopped" + fi + ;; + + vhosts) + print_section "Virtual Hosts" + uci show haproxy 2>/dev/null | grep "\.domain=" | sed "s/haproxy\./ /" | sed "s/\.domain=/: /" + ;; + + reload) + run_or_warn haproxyctl reload + ;; + + stats) + local ip=$(uci -q get network.lan.ipaddr || echo "192.168.255.1") + echo "HAProxy Stats: http://$ip:8404/stats" + echo "Auth: admin / secubox" + ;; + + *) + echo "Usage: $SCRIPT_NAME haproxy " + ;; + esac +} + +# ============================================================================ +# Feed Commands +# ============================================================================ + +cmd_feed() { + local subcmd="${1:-list}" + shift 2>/dev/null + + case "$subcmd" in + list) + run_or_warn secubox-feed list + ;; + update) + run_or_warn secubox-feed update + ;; + sync) + run_or_warn secubox-feed sync + ;; + install) + run_or_warn secubox-feed install "$@" + ;; + *) + echo "Usage: $SCRIPT_NAME feed " + ;; + esac +} + +# ============================================================================ +# Console (Remote Management) +# ============================================================================ + +cmd_console() { + if [ -f /usr/lib/secubox-console/secubox_console.py ]; then + python3 /usr/lib/secubox-console/secubox_console.py "$@" + else + echo "SecuBox Console not installed." + echo "Install with: opkg install secubox-console" + fi +} + +# ============================================================================ +# Quick Actions +# ============================================================================ + +cmd_logs() { + local service="${1:-all}" + local lines="${2:-50}" + + case "$service" in + crowdsec) + tail -n "$lines" /var/log/crowdsec.log 2>/dev/null || logread -l "$lines" | grep -i crowdsec + ;; + haproxy) + logread -l "$lines" | grep -i haproxy + ;; + system) + logread -l "$lines" + ;; + all|*) + logread -l "$lines" + ;; + esac +} + +cmd_restart() { + local target="${1:-services}" + + case "$target" in + services) + echo "Restarting core services..." + for svc in haproxy crowdsec uhttpd rpcd; do + [ -f "/etc/init.d/$svc" ] && /etc/init.d/"$svc" restart + done + echo "${GREEN}✓${NC} Services restarted" + ;; + network) + echo "Restarting network..." + /etc/init.d/network restart + ;; + docker) + echo "Restarting Docker containers..." + docker restart $(docker ps -q) 2>/dev/null + ;; + all) + cmd_restart services + cmd_restart docker + ;; + *) + echo "Usage: $SCRIPT_NAME restart " + ;; + esac +} + +# ============================================================================ +# Interactive Menu +# ============================================================================ + +show_menu() { + print_header + + echo "${BOLD}Quick Actions:${NC}" + echo " ${CYAN}1${NC}) Status overview" + echo " ${CYAN}2${NC}) Mesh status & peers" + echo " ${CYAN}3${NC}) Security status" + echo " ${CYAN}4${NC}) Docker containers" + echo " ${CYAN}5${NC}) HAProxy vhosts" + echo " ${CYAN}6${NC}) View logs" + echo " ${CYAN}7${NC}) Create backup" + echo " ${CYAN}8${NC}) Network diagnostics" + echo " ${CYAN}9${NC}) Factory dashboard" + echo "" + echo " ${CYAN}h${NC}) Help - all commands" + echo " ${CYAN}q${NC}) Quit" + echo "" + printf "Select: " +} + interactive_menu() { while true; do - clear - banner - echo "Quick Actions:" - echo " ${C_CYAN}1${C_NC}) Status - System overview" - echo " ${C_CYAN}2${C_NC}) Backup - Create snapshot" - echo " ${C_CYAN}3${C_NC}) Reborn - Generate recovery script" - echo " ${C_CYAN}4${C_NC}) Sync - Sync mesh & catalog" - echo " ${C_CYAN}5${C_NC}) Health - Health check" - echo " ${C_CYAN}6${C_NC}) Logs - View logs" - echo " ${C_CYAN}7${C_NC}) Update - Self-update" + show_menu + read -r choice echo "" - echo "Tools:" - echo " ${C_CYAN}m${C_NC}) Mesh - P2P mesh management" - echo " ${C_CYAN}r${C_NC}) Recover - Recovery system" - echo " ${C_CYAN}c${C_NC}) Console - Remote management (Python)" - echo " ${C_CYAN}s${C_NC}) Security - MITM/Security logs" - echo "" - echo " ${C_CYAN}q${C_NC}) Quit" - echo "" - printf "Choice: " - read choice case "$choice" in - 1) action_status; read -p "Press Enter..." ;; - 2) action_backup; read -p "Press Enter..." ;; - 3) action_reborn; read -p "Press Enter..." ;; - 4) action_sync; read -p "Press Enter..." ;; - 5) action_health; read -p "Press Enter..." ;; - 6) action_logs; read -p "Press Enter..." ;; - 7) action_self_update; read -p "Press Enter..." ;; - m) tool_mesh; break ;; - r) tool_recover; break ;; - c) tool_console; break ;; - s) tool_mitm; break ;; - q|Q) exit 0 ;; - *) echo "Invalid choice" ;; + 1) cmd_status ;; + 2) cmd_mesh status ;; + 3) cmd_security status ;; + 4) cmd_docker ps ;; + 5) cmd_haproxy vhosts ;; + 6) cmd_logs ;; + 7) cmd_backup ;; + 8) cmd_network diag ;; + 9) cmd_factory open ;; + h) cmd_help ;; + q|Q) echo "Bye!"; exit 0 ;; + *) echo "Invalid option" ;; esac + + echo "" + printf "Press Enter to continue..." + read -r _ + clear done } # ============================================================================ -# Main +# Help # ============================================================================ -case "$1" in - # Quick actions - status) - action_status - ;; - backup) - shift - action_backup "$@" - ;; - reborn) - shift - action_reborn "$@" - ;; - sync) - action_sync - ;; - health) - action_health - ;; - logs) - shift - action_logs "$@" - ;; - update) - action_self_update - ;; - # Tool dispatch - mesh) - shift - tool_mesh "$@" - ;; - recover) - shift - tool_recover "$@" - ;; - console) - shift - tool_console "$@" - ;; - mitm|security) - shift - tool_mitm "$@" - ;; +cmd_help() { + print_header - # Version - -v|--version|version) - echo "SecuBox Swiss v$VERSION" - ;; + cat << 'HELPEOF' +USAGE: + secubox-swiss Interactive menu + secubox-swiss [args] Direct command - # Help - -h|--help|help) - banner - echo "Usage: secubox-swiss [command] [args]" - echo "" - echo "Quick Actions:" - echo " status System overview" - echo " backup [name] Create snapshot" - echo " reborn [file] Generate recovery script" - echo " sync Sync mesh & catalog" - echo " health Health check" - echo " logs [component] View logs (mitm|mesh|security|all)" - echo " update Self-update from mesh" - echo "" - echo "Tools:" - echo " mesh P2P mesh (init|peer-add|sync|...)" - echo " recover Recovery (snapshot|restore|profile-*|...)" - echo " console Remote management console" - echo " mitm Security/MITM logs" - echo "" - echo "Run without arguments for interactive menu." - ;; +COMMANDS: + status System status overview + info Detailed system information - # Interactive - "") - interactive_menu - ;; + mesh Mesh network operations + status Mesh status + peers List peers + discover Discover new peers + sync Sync with peers + services Shared services + broadcast Execute on all peers - *) - echo "Unknown command: $1" - echo "Run 'secubox-swiss help' for usage." - exit 1 - ;; -esac + factory Factory dashboard + status Factory API status + catalog Service catalog + open Show dashboard URL + + recover Backup & recovery + snapshot [name] Create snapshot + list List snapshots + restore Restore snapshot + reborn Generate restore script + + backup [path] Quick backup to file + + apps Application management + list List installed apps + install Install app + remove Remove app + store Browse app store + + service Service control + start/stop/restart/status/enable/disable + + security Security operations + status Security status + scan Port/exposure scan + threats Recent threats + block Block IP + unblock Unblock IP + + network Network operations + status Network status + diag Run diagnostics + ports Listening ports + connections Active connections + + docker Docker operations + ps List containers + logs Container logs + restart Restart container + stats Resource usage + prune Clean unused + + haproxy HAProxy operations + status HAProxy status + vhosts List virtual hosts + reload Reload config + stats Stats URL + + feed Package feed + list List packages + update Update index + sync Sync to opkg + install Install package + + console [args] Remote management console + logs [svc] [lines] View logs + restart Restart services/docker/all + help Show this help + +HELPEOF +} + +# ============================================================================ +# Main Entry Point +# ============================================================================ + +main() { + case "${1:-menu}" in + menu|"") + interactive_menu + ;; + status) + cmd_status + ;; + info) + cmd_info + ;; + mesh) + shift + cmd_mesh "$@" + ;; + factory) + shift + cmd_factory "$@" + ;; + recover|recovery) + shift + cmd_recover "$@" + ;; + backup) + shift + cmd_backup "$@" + ;; + apps|app) + shift + cmd_apps "$@" + ;; + service|svc) + shift + cmd_service "$@" + ;; + security|sec) + shift + cmd_security "$@" + ;; + network|net) + shift + cmd_network "$@" + ;; + docker) + shift + cmd_docker "$@" + ;; + haproxy|ha) + shift + cmd_haproxy "$@" + ;; + feed) + shift + cmd_feed "$@" + ;; + console) + shift + cmd_console "$@" + ;; + logs|log) + shift + cmd_logs "$@" + ;; + restart) + shift + cmd_restart "$@" + ;; + help|-h|--help) + cmd_help + ;; + version|-v|--version) + echo "secubox-swiss v$VERSION" + ;; + *) + echo "Unknown command: $1" + echo "Run 'secubox-swiss help' for usage" + exit 1 + ;; + esac +} + +main "$@"