Commit Graph

911 Commits

Author SHA1 Message Date
7889cbb7bc fix(mitmproxy): Check route file changes on every request
Changed _check_interval from 10 to 1 to ensure new routes are picked up
immediately when the haproxy-routes.json file is updated.

This fixes the quick publish flow where new sites weren't accessible
immediately because mitmproxy only checked for route changes every
10 requests.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-24 14:01:56 +01:00
97aaf902fc fix(metablogizer): Add original_backend to vhost config for WAF route sync
When MetaBlogizer creates HAProxy vhosts, it routes through mitmproxy_inspector
for WAF inspection. However, mitmproxyctl sync-routes needs the original_backend
field to determine where to forward traffic after WAF inspection.

Without original_backend, sites would return 404 after upload because mitmproxy
had no route to forward traffic to the actual backend.

This fix adds original_backend=$backend_name to all 3 vhost creation locations:
- method_create_site (line 491)
- method_emancipate_site (line 1210)
- method_upload_and_create_site (line 2001)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-24 11:12:34 +01:00
a469076297 feat(waf): Add CVE-2025-14528 router botnet detection
Add new router_botnet WAF category for IoT/router exploitation:

CVE-2025-14528 (D-Link DIR-803 getcfg.php):
- AUTHORIZED_GROUP parameter manipulation
- SERVICES=DEVICE.ACCOUNT enumeration
- Newline injection bypass (%0a, %0d)

Additional router exploit patterns:
- D-Link hedwig.cgi, HNAP, service.cgi RCE
- UPnP SOAP injection
- Goform command injection
- ASUS/TP-Link/Netgear/Zyxel exploits

Mirai-variant botnet scanner detection:
- User-Agent signatures (Mirai, Hajime, Mozi, BotenaGo, etc.)
- Router payload injection patterns

Sources: CrowdSec Threat Intel, Global Security Mag

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-24 11:04:05 +01:00
4a972ab0ae fix(zkp-hamiltonian): ARM64 build fixes and RPCD CLI flag corrections
- Add #ifndef guard for ZKP_MAX_N in zkp_types.h to allow command-line override
- Copy OpenWrt Makefile to package root for proper feed detection
- Fix RPCD luci.zkp CLI flags: -r for ratio, -o for output prefix
- Add temp directory handling for keygen file generation

Tested on MochaBin router:
- zkp_keygen: generates graph + key pair
- zkp_prover: creates NIZK proof
- zkp_verifier: validates proof → ACCEPT

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-24 10:50:25 +01:00
a5fc33c8bc docs(luci-app-zkp): Add README with usage and protocol docs
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-24 10:33:12 +01:00
b60d7fd009 feat(luci-app-zkp): Add ZKP Hamiltonian cryptographic dashboard
LuCI web interface for the ZKP Hamiltonian library:
- Status display: version, key count, storage paths
- Key generation: node count (4-50), edge density selection
- Prove/Verify workflow with ACCEPT/REJECT display
- Keys table with actions (Prove, Verify, Delete)
- KISS theme with dark mode support

RPCD backend methods:
- status: library info and stats
- keygen: generate graph + Hamiltonian cycle
- prove: create NIZK proof
- verify: validate proof
- list_keys, delete_key, get_graph

Note: Requires zkp-hamiltonian CLI tools to be installed.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-24 10:31:39 +01:00
ec8e96a7fd fix(metablogizer): Auto-sync mitmproxy routes on HAProxy reload
Upload workflow now works without needing to unpublish/expose again.
The reload_haproxy() function now calls mitmproxyctl sync-routes to
ensure mitmproxy picks up new routes immediately after vhost creation.

Root cause: Upload created HAProxy vhost and mitmproxy route file entry,
but mitmproxy never received a reload signal to activate the route.
Running emancipate fixed it because it called mitmproxyctl sync-routes.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-24 10:06:31 +01:00
6553936886 feat(zkp-hamiltonian): Add Zero-Knowledge Proof library based on Hamiltonian Cycle
Implements NIZK (Non-Interactive Zero-Knowledge) proof protocol using
Blum's Hamiltonian Cycle construction with Fiat-Shamir transformation.

Features:
- Complete C99 library with SHA3-256 commitments (via OpenSSL)
- Graph generation with embedded trapdoor (Hamiltonian cycle)
- NIZK proof generation and verification
- Binary serialization for proofs, graphs, and cycles
- CLI tools: zkp_keygen, zkp_prover, zkp_verifier
- Comprehensive test suite (41 tests)

Security properties:
- Completeness: honest prover always convinces verifier
- Soundness: cheater fails with probability >= 1 - 2^(-128)
- Zero-Knowledge: verifier learns nothing about the secret cycle

Target: OpenWrt ARM (SecuBox authentication module)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-24 09:59:16 +01:00
29e2eac616 fix(haproxy): Sync generated config to /etc/haproxy.cfg
- metablogizer: reload_haproxy() now copies config to /etc/haproxy.cfg
- haproxyctl: generate_config() syncs to /etc/haproxy.cfg after generation
- Fixes issue where newly uploaded sites return 404 because HAProxy
  reads config from /etc/haproxy.cfg but config was only generated to
  /srv/haproxy/config/haproxy.cfg

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-24 08:02:42 +01:00
8a51a3e655 fix(led-pulse): Check HAProxy on host instead of LXC container
HAProxy runs on the host, not in an LXC container. The LED pulse
script was incorrectly checking `lxc-attach -n haproxy -- pgrep haproxy`
which always failed, causing constant SPUNK ALERT red LED flashing.

Changed to check host process directly with `pgrep haproxy`.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-24 07:03:57 +01:00
d5f2a0a319 feat(theme): Integrate kiss-theme.js into luci-theme-secubox
- Move kiss-theme.js from luci-app-secubox-portal to theme package
- Bump theme version to 0.4.8
- Prevents file conflict between packages

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-23 17:40:12 +01:00
379fe8e4fe feat(vm-builder): Add QCOW2 support for Proxmox/KVM
- Add convert_to_qcow2() function using qemu-img
- Add QCOW2_FILE output path variable
- Create proxmox-import.sh helper script for easy VM import
- Update distribution package to include QCOW2 and Proxmox script
- Add Proxmox VE instructions to README
- Update usage help with QCOW2 output

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-23 16:14:56 +01:00
11833410aa feat(lyrion): Add extra_media_paths config for USB/external media
- Add extra_media_paths UCI option for additional bind mounts
- Supports both simple paths (/mnt/usb) and mapped paths (host:container)
- Automatically skips non-existent paths with info message

Example UCI config:
  option extra_media_paths '/mnt/sdb1:/mnt/usb /mnt/nas:/mnt/nas'

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-23 12:37:00 +01:00
4f931289db fix(lyrion): Fix LXC cgroup v2 compatibility and host networking
- Remove cgroup:mixed from mount.auto (incompatible with cgroup v2)
- Add lxc.net.0.type = none for proper host network sharing
- Add lxc.seccomp.profile = and lxc.autodev = 1 for cgroup v2

Fixes container startup failure with "Failed to mount /sys/fs/cgroup"

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-23 12:31:52 +01:00
b414ea3284 fix(haproxy): Disable HTTP/2 to fix inconsistent vhost auth
HTTP/2 multiplexing caused HAProxy's http_auth() to inconsistently
evaluate auth rules, resulting in protected vhosts randomly returning
200 (bypass) or 401 (auth required).

Disabled HTTP/2 ALPN negotiation (alpn h2,http/1.1 → alpn http/1.1)
to ensure consistent HTTP Basic Auth behavior for protected sites.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-23 12:18:34 +01:00
a2bc5dd7d8 fix(gk2hub): Use placeholder for empty TSV fields (BusyBox read compat)
BusyBox ash's read command collapses consecutive tab delimiters,
causing the protected field to end up in the wrong variable.

Fix: Use "-" as placeholder for empty fields, then strip it when reading.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-23 09:48:39 +01:00
c2de15f861 feat(gk2hub): Add authentication support for protected MetaBlogizer sites
- Add lock badge CSS for protected site cards
- Add login banner for unauthenticated users
- Detect auth_required flag from metablogizer UCI config
- Hide protected cards until sessionStorage token present
- Filter respects authentication state in search and category views

Works with secubox-core portal-auth system.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-23 09:40:53 +01:00
5bf6d0d84c fix(metablogizer): Add wildcard SSL cert mapping on site creation
Sites on *.gk2.secubox.in were failing because HAProxy couldn't match
the SNI to the correct certificate. New add_haproxy_cert() helper:
- Extracts base domain from subdomain
- Creates UCI cert entry mapping domain to wildcard cert file
- Applied to all vhost creation paths (create, upload, republish)

Sites now work immediately after one-click deploy without manual
certificate configuration.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-23 08:45:50 +01:00
2b7850379d fix(metablogizer): Use Python for reliable mitmproxy route updates
Replace fragile sed-based JSON manipulation with Python for adding
mitmproxy routes. The new add_mitmproxy_route() helper function:
- Updates both /srv/mitmproxy/ and /srv/mitmproxy-in/ routes files
- Uses proper JSON parsing instead of string substitution
- Ensures sites are immediately accessible after one-click deploy

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-23 08:29:33 +01:00
4f40316757 fix(metablogizer): Republish HAProxy vhost on domain change
When editing a site and changing its domain, automatically:
- Remove the old HAProxy vhost for the previous domain
- Create a new vhost for the new domain with priority=50
- Regenerate and reload HAProxy configuration

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-23 08:20:08 +01:00
0da6c125a8 feat(metablogizer): Add Edit button to site dashboard
Add inline Edit button for each site in the dashboard allowing users
to modify site name, domain, description, and enabled status directly
from the overview page without navigating to settings.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-23 08:19:12 +01:00
daacdb731c feat(talk-hpb): Add Nextcloud Talk High Performance Backend package
New package secubox-app-talk-hpb:
- Docker-based signaling server and Janus WebRTC gateway
- Auto-generates TURN/SIGNALING/INTERNAL secrets
- Creates HAProxy vhost with SSL/ACME
- STUN/TURN server with UDP+TCP support
- CLI tool: talk-hpbctl setup/status/test/logs

Hub generator v5:
- Add PeerTube videos with thumbnails and duration badges
- Fix Streamlit instance detection (=instance vs =app)
- Total count now: sites + streamlit + videos

MetaBlogizer fix:
- Add priority=50 to new vhosts to prevent wildcard catch

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-22 15:13:02 +01:00
8223692436 feat(gk2hub): Add dynamic hub generator v3 with categories and previews
- Multi-view portal with grid/list/compact modes
- Automatic site categorization (Intelligence, Dev, Finance, etc.)
- Iframe thumbnail previews of real site content
- Tag cloud and category tabs with emoji indicators
- Instant search by domain/name/category
- Auto-refresh via cron every 5 minutes
- Created explicit vhosts for 54 MetaBlogizer sites
- Fixed wildcard routing priority

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-22 09:41:45 +01:00
a0ac5e1a16 fix(metablogizer): Add vhost creation for chunked upload methods
Both create_site_from_upload and upload_and_create_site were missing
HAProxy vhost creation step (step 8 from create_site method).

Changes:
- Add vhost creation with backend=mitmproxy_inspector for WAF routing
- Add mitmproxy route to /srv/mitmproxy-in/haproxy-routes.json
- Apply same fix to original create_site method for consistency

This ensures all MetaBlogizer uploaded sites are immediately accessible
via HTTPS and all traffic passes through WAF inspection.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-22 00:07:27 +01:00
011b59892a feat(metablogizer): Add chunked upload for large files
- Add create_site_from_upload RPC method for chunked site creation
- Modify JS api to auto-chunk files >40KB (ubus message size limit)
- Upload chunks sequentially via upload_chunk, then finalize with
  create_site_from_upload
- Add no_cache vhost option to haproxyctl for cache-control headers
- Fix large file upload failures caused by shell argument size limits

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-21 23:54:35 +01:00
50ddd2c1fe fix(peertube-import): Improve subtitle file detection pattern
- Changed glob pattern from ${slug}*.vtt to *.vtt to catch all subtitle files
- Fixed language extraction regex to work with any filename format
- Redirected yt-dlp subtitle output to stderr

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-21 20:24:07 +01:00
bbf2b19415 feat(peertube): Add video import with multi-track subtitle sync
- New peertube-import script for importing from YouTube, Vimeo, 1000+ sites
- CGI endpoints for portal integration (peertube-import, peertube-import-status)
- Portal UI: Video Import card with progress tracking
- Multi-language subtitle download and PeerTube caption upload
- Fixed stdout/stderr separation for reliable function returns
- UCI config: uses peertube.admin.username/password
- Package version bumped to 1.2.0
- Added README.md with full documentation

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-21 20:18:51 +01:00
e3db75cd0a fix(peertube-analyse): Handle missing automatic_captions field in yt-dlp output
PeerTube videos don't include the automatic_captions field in their
yt-dlp JSON output. The jq filter was attempting (.automatic_captions | keys)
which fails with "null (null) has no keys" when the field is missing.

Fixed by adding null-coalescing: ((.automatic_captions // {}) | keys)
Also applied same fix to subtitles field for consistency.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-21 19:10:52 +01:00
f76dfe8a67 feat(peertube): Add web interface for video analysis
- Create standalone web UI at /peertube-analyse/
- Add CGI backend (peertube-analyse, peertube-analyse-status)
- Add RPCD methods: analyse, analyse_status
- Update portal with Intelligence & Analyse section
- Expose via analyse.gk2.secubox.in with SSL

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-21 18:34:26 +01:00
ab49e19c32 feat(peertube): Add transcript extraction & AI analysis tool
New CLI: peertube-analyse
- Extract video metadata via yt-dlp
- Download existing PeerTube subtitles (VTT)
- Fallback to Whisper local transcription (medium model)
- Claude AI analysis with structured intelligence report

Features:
- POSIX-compatible (OpenWrt, Alpine, Debian)
- Modular pipeline with graceful degradation
- Colored terminal output with status indicators
- Configurable Whisper model and language
- Truncation for large transcripts (12k chars)

CLI flags:
  --url <url>         Video URL
  --no-whisper        Subtitles only
  --force-whisper     Force transcription
  --no-analyse        Skip Claude analysis
  --model <name>      Whisper model
  --lang <code>       Language code

Output structure:
  ./output/<slug>/
    ├── <slug>.meta.json
    ├── <slug>.transcript.txt
    └── <slug>.analyse.md

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-21 18:15:55 +01:00
df58e96a9a feat(turn): Add setup-nextcloud command for Nextcloud Talk
- turnctl setup-nextcloud [turn-domain] [use-port-443]
  - Configures TURN for Nextcloud Talk compatibility
  - Uses port 443 by default (firewall-friendly)
  - Generates auth secret if not exists
  - Outputs admin settings to paste into Nextcloud Talk

- LuCI integration:
  - New "Nextcloud Talk" section in TURN overview
  - Shows STUN/TURN/secret settings for easy copy-paste
  - RPC method: setup_nextcloud

- ACL updated with setup_nextcloud permission

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-21 18:11:42 +01:00
6db547f7f8 feat: Add WebRadio, TURN server, and Lyrion streaming integration
New packages:
- luci-app-webradio: Web radio management with Lyrion bridge tab
- luci-app-turn: TURN/STUN server UI for WebRTC (Jitsi integration)
- secubox-app-lyrion-bridge: Lyrion → Squeezelite → FFmpeg → Icecast pipeline
- secubox-app-squeezelite: Squeezelite audio player with FIFO output
- secubox-app-turn: TURN server with ACME SSL and Jitsi setup
- secubox-app-webradio: Icecast/ezstream web radio server

Features:
- HTTPS streaming via HAProxy (stream.gk2.secubox.in)
- Lyrion Music Server bridge for streaming playlists to Icecast
- TURN server with time-limited credential generation
- CrowdSec integration for WebRadio security
- Schedule-based radio programming with jingles

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-21 17:46:54 +01:00
05d12ab130 feat(portal): Add guide link to login page
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-21 14:07:08 +01:00
d3ab23b07d feat(portal): Redirect root URL to login page
portal.secubox.in/ now redirects to /login.html for SSO flow

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-21 13:36:33 +01:00
20e4680d1a feat(portal): Update services dashboard with SecuBox theme
- Use SecuBox blue cyberpunk theme (matching login.html)
- Check secubox_token for authentication, redirect to login.html if missing
- Add Guacamole to administration services
- Consistent styling across all portal pages

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-21 13:27:23 +01:00
08ebaefafb feat(portal): Add login and password reset pages for SSO
- Add login.html with RPCD authentication via luci.secubox-users
- Add reset.html for token-based password recovery
- Both pages use SecuBox cyberpunk dark theme
- Default password: Secubox@2026

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-21 13:21:15 +01:00
e7b6039c96 feat(portal): Add SSO authentication with SecuBox core users
Portal login now authenticates against SecuBox users (UCI config)
instead of hardcoded credentials.

New RPCD methods in luci.secubox-users:
- authenticate: Verify username/password, return session token
- recover: Send password reset email
- reset_password: Set new password with recovery token

Portal pages:
- login.html: Login form with password recovery link
- reset.html: Password reset form (from email link)

Features:
- SHA256 password hashing
- Session tokens stored in /tmp/secubox-sessions/
- Email-based password recovery via mailctl
- Public ACL access (no LuCI login required)
- Passwords synced to services if sync_passwords=1

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-21 12:58:38 +01:00
2607bfb911 refactor(luci-app-secubox): KISS UI regeneration for all core views
Rewrote 5 core SecuBox LuCI views with KISS pattern:
- modules.js: 565→280 lines, filter tabs, module cards
- monitoring.js: 442→245 lines, SVG charts, 5s polling
- alerts.js: 451→255 lines, timeline, severity filters
- settings.js: 540→220 lines, UCI form with chips
- services.js: 1334→410 lines, provider status, health checks

Total: 3332→1410 lines (~58% reduction)

Changes:
- Removed legacy deps: SecuNav, Theme, Cascade, SbHeader
- Inline CSS with dark mode via prefers-color-scheme
- KissTheme.wrap() for consistent navigation
- Self-contained views with no external CSS dependencies

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-21 12:24:07 +01:00
bea65ed3e6 feat(matrix): Add Matrix/Conduit E2EE messaging server integration
- secubox-app-matrix: Conduit homeserver in LXC container
  - matrixctl CLI: install/uninstall, user/room management, federation
  - DID identity integration, P2P mesh publication
- luci-app-matrix: LuCI dashboard with 17 RPCD methods
  - Install wizard, status cards, service controls
  - User management, emancipate (public exposure)
  - Identity/mesh integration, logs viewer
- Updated apps-local.json with messaging category metadata
- Conduit v0.10.12 with Matrix Protocol v1.12 support

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-21 10:48:30 +01:00
5a1276590e feat(metablogizer): Add KISS one-click features matching Streamlit
- Add upload_and_create_site: one-click deploy with auto HAProxy setup
- Add unpublish_site: remove HAProxy vhost while preserving content
- Add set_auth_required: toggle authentication requirement per site
- Add get_sites_exposure_status: exposure/cert status for all sites
- Simplify dashboard to KISS UI pattern with status badges
- Action buttons: Share, Upload, Expose/Unpublish, Lock/Unlock, Delete

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-21 10:23:18 +01:00
397d7e2f74 feat(streamlit): Add one-click deploy, expose, unpublish, and auth toggle
KISS workflow enhancements:
- One-click deploy: Upload file auto-creates app + instance + starts
- One-click expose: Creates HAProxy vhost + SSL cert in one action
- One-click unpublish: Removes exposure and revokes certificate
- Auth toggle: Enable/disable SecuBox user authentication per instance
- Exposure status: Shows cert validity and expiry in instances table
- Visual indicators: Green badge for exposed, orange for pending cert

New RPCD methods:
- upload_and_deploy: Upload + auto-create instance
- emancipate_instance: One-click vhost + SSL setup
- unpublish: Revoke exposure
- set_auth_required: Toggle authentication requirement
- get_exposure_status: Full exposure info with cert status

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-21 10:11:57 +01:00
94812b465d refactor(streamlit): Simplify dashboard to KISS UI pattern
Reduce dashboard from ~1000 to ~400 lines following MetaBlogizer pattern:
- Replace cbi-value divs with simple status table
- Compact instances table with Enable/Disable/Expose/Delete actions
- Compact apps table with Edit/Delete actions
- Inline forms for adding instances and uploading files
- Remove Gitea section and rename functions
- Cleaner emancipate modal

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-21 09:52:00 +01:00
42218a4b78 feat(peertube): Add auto-upload for video imports
Videos imported via yt-dlp are now automatically uploaded to PeerTube:
- OAuth authentication using UCI-stored admin credentials
- Video upload via PeerTube REST API
- Real-time job status polling with import_job_status method
- Progress indicator in LuCI UI
- Automatic cleanup of temp files

New RPCD method: import_job_status for polling job progress.
Version bumped to 1.1.0.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-21 09:21:18 +01:00
b2ec879814 fix(feed): Add missing secubox-app-ipblocklist backend package
The IP Blocklist backend package was missing from the feed.
Manually built and added the IPK since wget-ssl dependency
failed to build in the SDK.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-21 07:52:09 +01:00
f9f2be9252 fix(system-hub): Fix get_denoise_stats RPCD returning no response
- Replace jsonfilter with grep for CrowdSec decision counting
- Add ipset existence check before listing blocked IPs
- Add safety fallbacks for empty/invalid counts
- Bump version to 0.5.2-r2

The jsonfilter -e '@[*]' approach failed with CrowdSec's
multi-line JSON output, causing exit code 251 errors.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-21 07:05:24 +01:00
cec4893db9 feat(security): Implement SysWarden Evolution #1-3 security enhancements
Evolution #1 - IP Blocklist (secubox-app-ipblocklist, luci-app-ipblocklist):
- Pre-emptive blocking layer with ipset (~100k IPs)
- Default sources: Data-Shield, Firehol Level 1
- Supports nftables (fw4) and iptables backends
- LuCI KISS dashboard with sources/whitelist management

Evolution #2 - AbuseIPDB Reporter (luci-app-crowdsec-dashboard v0.8.0):
- New "AbuseIPDB" tab in CrowdSec Dashboard
- crowdsec-reporter.sh CLI for reporting blocked IPs
- RPCD handler luci.crowdsec-abuseipdb with 9 methods
- Cron job for automatic reporting every 15 minutes
- IP reputation checker in dashboard

Evolution #3 - Log Denoising (luci-app-system-hub v0.5.2):
- Three modes: RAW, SMART (noise ratio), SIGNAL_ONLY (filter known IPs)
- Integrates with IP Blocklist ipset + CrowdSec decisions
- RPCD methods: get_denoised_logs, get_denoise_stats
- Denoise mode selector panel with noise ratio indicator

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-20 20:11:24 +01:00
a81e8dd8ca fix(bandwidth-manager): Fix traffic graphs for nftables kernel
- Return Mbps as decimal strings instead of integers (shows 0.45 instead of 0)
- Replace iptables tracking with conntrack/nftables for per-client bytes
- Works with nftables kernel that has no iptables compatibility

Note: Add cron job for historical data: */5 * * * * ubus call luci.bandwidth-manager record_stats

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-20 16:39:26 +01:00
53dc035955 fix(crowdsec): Read WAF threats from mitmproxy-in instance
The CrowdSec dashboard was reading from /srv/mitmproxy/threats.log
but the WAF input instance writes to /srv/mitmproxy-in/threats.log.

Fixed paths:
- threats.log: /srv/mitmproxy -> /srv/mitmproxy-in
- autoban-processed.log: /srv/mitmproxy -> /srv/mitmproxy-in

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-20 16:29:29 +01:00
bab3ce3e33 feat(portal): Add SSO portal with gk2 subdomains and guide page
- Portal page with all service links using *.gk2.secubox.in format
- User guide with updated gk2 subdomain URLs
- Guide link added to login page bottom
- HAProxy vhost configured for portal.secubox.in
- WAF routing enabled through mitmproxy

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-20 15:26:14 +01:00
2f7d57dced feat(hexojs): Add content upload wizard and moderation system
- Add upload.js wizard with multi-target publishing (HexoJS, Gitea, Streamlit, MetaBlogizer)
- Add submit.js for user content submission with moderation workflow
- Add moderation RPCD methods: submit_for_review, list_pending, approve_submission, reject_submission
- Update ACL with new moderation permissions
- Add menu entries for Upload and Submit & Moderate views

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-20 14:11:20 +01:00