Commit Graph

1040 Commits

Author SHA1 Message Date
dcc000c55d fix(wireguard-dashboard): Fix QR code generation
- Use SVG output instead of PNG (PNG disabled in OpenWrt qrencode)
- Fix endpoint port duplication when port already in endpoint string

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 08:56:25 +01:00
f0ac51ddd1 refactor(network-tweaks): Move to Network menu
Move Network Tweaks from Services to Network menu for better UX.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 08:41:53 +01:00
60ed796b5a fix(metablogizer): Fix require path and async hosting status load
- Fix qrcode require path (slash to dot notation)
- Load hosting status asynchronously to prevent XHR timeout
- Dashboard now loads instantly with sites, HAProxy/IP populate after

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 08:33:30 +01:00
6e247800a4 fix(metablogizer): Remove incorrect expect clauses from API declarations
The RPCD returns data directly without wrapping in a 'result' object,
but api.js was using expect: { result: {} } which caused empty data
in the UI (0 sites shown instead of 6).

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 08:13:49 +01:00
163364843e feat(metablogizer): KISS UI redesign with backend status
- Replace overview.js with dashboard.js using standard cbi-* classes
- Add api.js module for RPC declarations
- Show port, runtime, backend_running status in sites table
- Add sync_config, discover_vhosts, import_vhost RPC methods
- Update ACL with new method permissions
- Menu: Sites -> Dashboard

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 08:06:22 +01:00
e07fec6cb4 feat(streamlit): Add instances management and Gitea integration
- Add Running Instances section with enable/disable/delete actions
- Add Instance form to create new instances on different ports
- Add Gitea clone functionality to pull apps from repositories
- Add Gitea configuration section in Settings page
- RPCD handler now supports:
  - get_gitea_config, save_gitea_config
  - gitea_clone, gitea_pull, gitea_list_repos
- API module exports all new Gitea methods
- Upload supports both .py files and .zip archives
- Instance status shown with colored indicators

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 07:27:24 +01:00
5317f37e7a refactor(streamlit): KISS UI redesign
Simplify LuCI interface from 5 tabs to 2:
- Dashboard: status, controls, apps list, upload (all-in-one)
- Settings: configuration options

Remove complex custom CSS, use standard LuCI styles.

Deleted: overview.js, apps.js, instances.js, logs.js
Added: dashboard.js (single-page dashboard)
Updated: settings.js (simplified form), menu.json

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 07:17:20 +01:00
280c6a08d9 fix(streamlit): Remove null text in app description display
When an app has no description, return empty string instead of null
to prevent "null" text from being rendered in the instances table.

Also: secubox-p2p bumped to v0.6.0-r3 with catalog fix.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 07:13:27 +01:00
f44d218b7d fix(catalog): Use original_backend when mitmproxy inspection enabled
When HAProxy inspection mode routes all vhosts through mitmproxy_inspector,
the catalog now uses the original_backend UCI property to correctly map
domains to their actual services.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 07:05:47 +01:00
a4e6d65e34 fix(p2p): Fix Gitea API push for catalog sync
Use POST method for creating new files and PUT for updates.
Gitea requires this distinction - PUT with no SHA fails for new files.

Changes:
- Use POST for creating new files in catalog_push_gitea()
- Use PUT only when existing SHA is available (updates)
- Add explicit branch parameter for consistency
- Bump version to 0.6.0-r2

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 06:54:19 +01:00
9fd5bbd923 fix(portal): Add exec ACL for service status helper
Add file exec permissions for:
- /usr/bin/secubox-services-status
- /bin/sh

Required for fs.exec() to work in LuCI frontend.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 06:24:10 +01:00
d35aaae6de docs(mitmproxy): Add HAProxy routing and sync-routes documentation
Document the traffic flow architecture, sync-routes command,
HAProxy integration commands, and routing configuration.

Includes:
- ASCII traffic flow diagram
- sync-routes command usage
- haproxy-enable/disable commands
- Routes JSON format and wildcard support
- Port reference table

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 06:12:57 +01:00
20cbf0adf3 fix(portal): Add helper script for reliable service enumeration
- Create /usr/bin/secubox-services-status helper script
- Update portal scanInitServices to use helper script
- Fallback to inline script if helper not available
- Fixes 0/0 services display caused by fs.exec output buffering

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 06:11:10 +01:00
369ef86487 fix(portal): Improve service scanning reliability
- Use pgrep without -f flag (OpenWrt compatibility)
- Use printf instead of echo for reliable output
- Add explicit /bin/sh path
- Add error logging for debugging

Fixes 0/0 services display on dashboard.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 06:04:06 +01:00
c33a9650e7 feat(p2p): Implement distributed catalog with Gitea sync and health probing
Distributed Catalog:
- Implement catalog_push_gitea() to push node catalogs via Gitea REST API
- Add catalog_push_merged_gitea() for merged catalog sync
- Create /api/factory/catalog-sync POST endpoint for triggering sync
- Catalogs pushed to catalog/nodes/{hostname}.json in Gitea repo

Health Probing:
- Add get_service_health() with cached latency measurement
- HTTP probe with curl to measure response time
- Fallback to /proc/net/tcp port check
- 60-second cache TTL to keep catalog endpoint fast

Files:
- factory.sh: Gitea REST API integration for catalog push
- catalog: Health probing with latency measurement
- catalog-sync: New CGI endpoint for sync operations
- Makefile: Install catalog-sync endpoint

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 05:52:40 +01:00
29f55ec6bc feat(mitmproxy): Add enhanced threat patterns and README
Add modern attack detection patterns:
- SSTI (Jinja2, Twig, FreeMarker, ERB, Thymeleaf)
- Prototype Pollution (__proto__, constructor[])
- GraphQL abuse (introspection, deep nesting)
- JWT attacks (alg:none bypass, exposed tokens)
- CVE-2024-21887 (Ivanti Connect Secure)
- CVE-2024-1709 (ScreenConnect auth bypass)
- CVE-2024-27198 (TeamCity auth bypass)

Add comprehensive README documenting:
- Threat detection patterns and categories
- CrowdSec integration and scenarios
- GeoIP database setup
- File paths and dependencies

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 05:45:25 +01:00
37d7b066ed fix(crowdsec-dashboard): Count blocked IPs across all nftables sets
The bouncer creates multiple sets: crowdsec-blacklists (empty base),
crowdsec-blacklists-CAPI (community blocklists ~19k IPs), and
crowdsec-blacklists-crowdsec (local decisions). Now counts IPs from
all sets in the table instead of just the base set.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 05:42:12 +01:00
fce6307c7e fix(crowdsec-dashboard): Move to Security menu and fix stats display
- Move CrowdSec from Services to Security & Access menu
- Fix get_decisions() to return {"decisions":[]} not {"alerts":[]}
- Fix active_bans to use local_decisions count instead of parsing
  unreliable metrics output

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 05:36:01 +01:00
7236449223 fix(mitmproxy): Use container-relative path for GeoIP database
The mitmproxy container mounts /srv/mitmproxy as /data, so the GeoIP
database path must use /data/GeoLite2-Country.mmdb for the addon to
find it. This enables proper country detection for external IPs in
threat logs, allowing CrowdSec SSRF scenarios to correctly identify
and ban foreign attackers.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 05:30:46 +01:00
0dd406d517 fix(security-threats): Detect DPI from netifyd when ndpid not installed
The threat monitor now checks netifyd_running and dpi_available fields
in addition to ndpid running status. This fixes the "nDPId not running"
warning when only netifyd is installed.

- Check ndpid.running OR netifyd_running OR dpi_available
- Show flow count in DPI service badge
- Rename badge from "nDPId" to "DPI" for clarity

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 18:59:49 +01:00
7b67b0329a feat(mitmproxy): Integrate threat detection with CrowdSec for auto-banning
- Change analytics addon to write threats to /data/threats.log (bind-mounted to host)
- Add CrowdSec acquisition config to read from /srv/mitmproxy/threats.log
- Add parser for mitmproxy JSON threat logs with source_ip in Meta
- Add scenarios for web attacks, scanners, SSRF, and CVE exploits
- Update RPCD to read alerts from host-visible path without lxc-attach

This enables automatic IP banning when mitmproxy detects:
- SQL injection, XSS, command injection (capacity: 3, ban: 15m)
- Path traversal, XXE, LDAP injection, Log4Shell
- Aggressive web scanning (capacity: 10, ban: 10m)
- SSRF attempts from external IPs (capacity: 5, ban: 10m)
- Known CVE exploits (immediate trigger, ban: 30m)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 18:49:14 +01:00
88e6d04f4e fix(mitmproxy): Add missing RPC methods to ACL permissions
The alerts, threat_stats, clear_alerts, haproxy_enable, haproxy_disable,
and sync_routes methods were not in the ACL file, causing permission
denied errors when calling them from LuCI.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 18:40:46 +01:00
d3b7b8ba9b fix(mitmproxy): Fix alerts display by reading from correct log path
The RPCD was looking for alerts in /tmp/secubox-mitm-alerts.json but
the analytics addon writes to /var/log/crowdsec/secubox-mitm.log in
JSONL format (one JSON object per line).

Changes:
- RPCD: Read from container's /var/log/crowdsec/secubox-mitm.log
- RPCD: Convert JSONL to JSON array using awk
- JS: Handle new field names (source_ip, timestamp, request)

Alerts now display correctly in LuCI dashboard.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 18:37:21 +01:00
0dd6b28d1a fix(mitmproxy): Fix HAProxy backend route sync for new-style UCI configs
The sync-routes command was failing to generate routes for most vhosts due to:
- Subshell bug: pipe in while loop caused variable changes to be lost
- Only supported old-style backends (inline .server field)
- Did not support new-style backends with separate =server sections

Changes:
- Rewrite sync-routes to avoid subshell by using temp file
- Add support for both backend styles (inline and separate server sections)
- Use original_backend field when vhosts are in inspection mode
- Skip luci/fallback/mitmproxy_inspector backends in route generation

Now properly generates 13+ routes for HAProxy backend inspection.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 16:17:29 +01:00
2b8d786a72 docs(mitmproxy): Update README and fix Makefile for HAProxy router addon
- Add haproxy_router.py to package install targets
- Document HAProxy backend inspection feature
- Document threat detection patterns
- Document Web UI token authentication
- Update RPCD API documentation
- Bump secubox-app-mitmproxy to r18

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 15:58:11 +01:00
92f73fc3d2 feat(mitmproxy): Add HAProxy backend inspection and token auth
- Add HAProxy → mitmproxy → Backend inspection chain for filtering
  all vhost traffic through mitmproxy with threat detection
- Add haproxy_router.py addon for Host-based request routing
- Add mitmproxyctl commands: sync-routes, haproxy-enable, haproxy-disable
- Add auth token to status response for Web UI auto-authentication
- Add HAProxy Backend Inspection section to LuCI status page with
  enable/disable/sync controls
- Add HAProxy Router settings section to LuCI settings page
- LXC container now supports dual-port mode (8888 + 8889 for HAProxy)
- Token displayed with copy button in dashboard

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 15:49:05 +01:00
a6d2b75db8 feat(mitmproxy): Enhanced threat detection analytics v2.0
Analytics addon enhancements:
- SQL injection detection (25+ patterns)
- XSS detection (30+ patterns)
- Command injection detection (20+ patterns)
- Path traversal detection (12+ patterns)
- SSRF detection (10+ patterns)
- XXE/LDAP injection detection
- Log4Shell (CVE-2021-44228) detection
- Known CVE patterns (Spring4Shell, MOVEit, etc.)
- Rate limiting and bot detection
- CrowdSec integration with severity levels

LuCI interface rewrite (KISS):
- Simplified status view with threat monitor
- Security alerts table with severity badges
- Service controls (start/stop/restart)
- RPCD backend with alerts/threat_stats endpoints
- Clean settings form

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 15:39:36 +01:00
15e04b58a5 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 <noreply@anthropic.com>
2026-01-31 13:52:32 +01:00
00082fe066 feat(jitsi): Add Jitsi Meet video conferencing integration
- secubox-app-jitsi: Docker-based Jitsi stack with jitsctl control CLI
- luci-app-jitsi: LuCI web configuration interface
- Catalog entry for SecuBox AppStore

Features:
- End-to-end encrypted video conferencing
- HAProxy integration with WebSocket/SSL support
- Mesh federation for SecuBox P2P network
- User authentication management
- Backup/restore functionality

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 13:29:06 +01:00
760408c36f feat(p2p): Release v0.6.0 - MirrorBox NetMesh Catalog
- Distributed service registry with HAProxy vhost discovery
- Multi-endpoint URLs (haproxy/mesh/local) per service
- DNS federation for mesh peers (*.sb.local via dnsmasq)
- Catalog tab with service filtering and QR codes
- Linked peers navigation panel
- Tools panel with DNS management

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 11:56:18 +01:00
163c74e25f fix(p2p): Use /api/factory/ path for CGI endpoints
Separate static files from CGI scripts in uhttpd configuration:
- Static files (index.html) served from /www
- CGI scripts executed from /www/api/*
- API base changed from /factory/ to /api/factory/

This fixes HAProxy routing where /factory/ serves the UI and
/api/factory/* routes to the P2P API backend.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 10:00:59 +01:00
eec83efa13 feat(p2p): Add MirrorBox NetMesh Catalog with DNS federation
Implement distributed service catalog that discovers HAProxy vhosts
and provides multi-endpoint access URLs (haproxy/mesh/local). Add
dynamic DNS federation that auto-populates dnsmasq with mesh peer
hostnames (hostname.mesh.local).

New features:
- /factory/catalog API endpoint with service registry
- Catalog tab (📚) in Factory UI with endpoint filtering
- QR codes with URL type switching (haproxy/mesh/local)
- Linked mesh peers navigation panel
- DNS federation via /tmp/hosts/secubox-mesh
- CLI commands: dns-enable/disable/update, catalog sync/list/generate

Bumps secubox-p2p to v0.6.0.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 09:19:36 +01:00
cf115b346a feat(p2p): Add distributed mesh services panel
- Add mesh-services CGI endpoint for aggregated service discovery
  across all mesh peers
- Update Factory UI with tabbed interface: Dashboard and Mesh Services
- Mesh Services panel features:
  - Real-time service discovery from all nodes
  - Filter by search, status, or node
  - Direct access links for services with ports
  - Status indicators (running/stopped/disabled)
  - Summary stats (nodes online, running/total services)
- Bump version to 0.5.0

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 08:56:22 +01:00
f9a26f1351 fix(factory): Use same-origin API calls for HAProxy compatibility
Change API base URL to use relative /factory/ path instead of
absolute URL with port 7331. HAProxy routes /factory/* API paths
to the factory backend while serving UI from luci backend.

This fixes mixed content blocking when accessing via HTTPS.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 08:46:25 +01:00
9d46ff51f3 fix(factory): Use HMAC-style signing for OpenWrt compatibility
- Replace signify-openbsd calls with HMAC-based signatures
  (OpenWrt's signify lacks -n flag for no-passphrase)
- Fix API paths in UI: use /factory/ not /api/factory/
- Support cross-port API calls (UI on 8081, API on 7331)
- Update LuCI view to use relative /factory/ path
- Update feed with secubox-p2p 0.4.0 packages

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 08:15:24 +01:00
a9130715e9 feat(p2p): Add SecuBox Factory unified dashboard with signed Merkle snapshots
Implement mesh-distributed, cryptographically-validated control center:

- Add factory.sh library with Ed25519 signing via signify-openbsd
- Add Merkle tree calculation for /etc/config validation
- Add CGI endpoints: dashboard, tools, run, snapshot, pubkey
- Add KISS Web UI (~280 lines vanilla JS, inline CSS, zero deps)
- Add gossip-based 3-peer fanout for snapshot synchronization
- Add offline operations queue with replay on reconnect
- Add LuCI iframe integration under MirrorBox > Factory tab
- Configure uhttpd alias for /factory/ on port 7331
- Bump secubox-p2p version to 0.4.0

Factory UI accessible at http://<device>:7331/factory/

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 08:03:54 +01:00
bdda4df59c feat(secubox-app-bonus): Update feed with P2P v0.3.0 and portal KISS redesign
- secubox-p2p upgraded to v0.3.0 with multi-address mesh support
  - WAN IP detection via ipify/ifconfig.me for NAT traversal
  - WireGuard tunnel IP enumeration for secure redundancy
  - Failover priority: WireGuard → WAN → LAN
- luci-app-secubox-portal KISS redesign (~1000 → ~500 lines)
  - Service categorization: Web/Proxy, Security, AI/ML, Containers, Media, Apps
  - Dynamic init.d service scanning with 60s caching
- Rebuilt all packages in feed

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 07:39:15 +01:00
52d21d89c6 chore(p2p): Bump version to 0.3.0
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 07:35:03 +01:00
bb1c2555ef feat(p2p): Add WAN IP and WireGuard tunnel redundancy support
- Add get_wan_ip() to detect real WAN/public IP address
- Add get_wg_ips() to enumerate WireGuard tunnel addresses
- Add get_node_addresses() returning JSON array of all addresses
- Update register_self() to include WAN and WireGuard addresses
- Update get_node_status() API to expose all addresses
- Update add_peer() to support multi-address peers
- Update daemon connectivity check to try:
  1. WireGuard tunnel (secure redundancy)
  2. WAN address (external reach)
  3. LAN address (local fallback)
- Add UCI options: advertise_wan, advertise_wireguard, prefer_wireguard
- Version bump to 0.3.0

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 07:22:38 +01:00
5a2655f0ef refactor(portal): KISS redesign with service categorization
- Simplify portal to ~500 lines (from ~1000)
- Add service categories: Web/Proxy, Security, AI/ML, Containers, Media, Apps
- Dynamic init.d service scanning with status detection
- Clean dark theme with inline CSS (no external dependencies)
- Quick stats: Services, Memory, Uptime, Network
- Active ports section for external services
- Responsive grid layouts for all screen sizes

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 07:20:02 +01:00
8df75f6c06 feat(console): Add Services tab with peer service discovery
- Add Services tab to TUI displaying services from all mesh peers
- Implement get_peer_services() fetching via P2P API (port 7331/services)
- Add 60-second caching to avoid slow repeated API calls
- Group services into categories: Web/Proxy, Security, AI/ML, Containers, Apps
- Fix service endpoint URL: /services not /api/services
- Increase API timeout to 15s for comprehensive service scans
- Version bump to 1.2.0

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 07:15:46 +01:00
31f4db881e refactor(crowdsec-dashboard): KISS rewrite and move to Services menu
- Rewrite all views with KISS CSS (1200+ lines removed)
- Use unified cs-* CSS prefix with SecuBox theme variables
- Move CrowdSec from Security to Services menu
- Update navigation paths in all views and nav.js
- Add CSS loading in each view's load() function
- Fix Services menu as proper firstchild submenu
- Simplify dashboard.css from 950+ to 112 lines

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 06:51:13 +01:00
357f16bf93 feat(secubox-console): Add mesh peer self-registration and TUI improvements
- Console v1.1.0 with mesh participation as first-class peer
- Add announce command to register console on mesh devices
- Add mesh command to query P2P network status and peers
- Improve discovery with 3-phase approach (mesh peers, network scan, probe)
- Implement working update mechanism with SSH-based downloads
- Add proper Add Device modal dialog in Textual TUI
- Add Discover dialog with async progress display
- Show console identity in Mesh tab (node ID, name, IP, port)
- Auto-announce during discover and sync operations
- Add announce button and keybinding (m) in TUI

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 06:46:31 +01:00
3a8555b207 fix(secubox-p2p): Fix RPC expect array handling in peers view
The RPC `expect: { peers: [] }` extracts the array directly, so result
IS the peers array, not result.peers. Added Array.isArray() defensive
check for consistent handling.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 06:04:54 +01:00
3a64be9c38 fix(secubox-p2p): Ensure local node always appears in peers list
- Fix register_self() to handle JSON whitespace with awk
- Update get_peers() to auto-register local node if peers list is empty
- Ensure node identity is initialized before querying peers

This ensures C3BOX always shows itself in the P2P Hub peers view.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 05:51:57 +01:00
931c4b1dfc fix(crowdsec-dashboard): Add ACL permissions for settings methods
Add get_settings to read permissions and save_settings to write permissions
to fix RPC access denied error (-32002) on the settings page.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 05:44:59 +01:00
45f222e72c feat(secubox-core): Add P2P mesh API endpoints for console discovery
- Add /chain/tip endpoint for blockchain tip query
- Add /catalog/console endpoint for version info
- Add symlinks for /api/ prefix compatibility
- Fix chain.json malformed JSON structure

Enables console to discover C3BOX device via mesh API

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 05:40:03 +01:00
8f6eeede06 feat(crowdsec): Add console enrollment & integrate SecuBox theme
- Add Console Enrollment section to settings with persistent key storage
- Integrate CrowdSec CSS with SecuBox global theme variables (--cyber-*)
- Fix modules.js install button and add installModule function
- Map cs-*, soc-*, sh-* CSS variables to SecuBox theme for consistency

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 05:34:31 +01:00
54d16a5655 fix(crowdsec-dashboard): Show CAPI as connected when credentials exist
CAPI status now shows "Connected" when either enrolled or LAPI is available,
fixing misleading "Disconnected" display when CAPI is actually working.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 05:13:26 +01:00
dc73b45722 refactor(crowdsec-dashboard): Remove theming system
- Remove theme.js and themes/ directory (classic, cards, cyberpunk)
- Remove theme selector from settings page
- Use fixed 'cs-theme-classic' class in overview and settings views
- Simplify load() functions by removing theme.init() calls

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 05:04:16 +01:00