Commit Graph

387 Commits

Author SHA1 Message Date
c68b1b2cc0 feat: Add persistent netifyd collector setup (v1.0.3)
The netifyd collector cron job now persists across reboots:

- Add collector_enabled option to UCI config (secubox-netifyd.sink)
- Create init script (secubox-netifyd-collector) to manage cron job
- Update netifyd-collector-setup with enable/disable/status commands
- Apply collector settings on first boot via uci-defaults

Usage:
  netifyd-collector-setup unix /tmp/netifyd-flows.json  # Enable
  netifyd-collector-setup disable                       # Disable
  netifyd-collector-setup status                        # Show status

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-08 17:50:28 +01:00
bb4ba0e217 fix: Fix UCI rule deletion to handle index shifting in WAN access
When deleting multiple UCI firewall rules by index, the indices shift
after each deletion. The previous method using section names didn't
work reliably with fw4's anonymous rules.

New approach uses a while loop that:
- Iterates through rules by index
- Deletes matching rule and restarts from beginning
- Continues until no matching rules found

This ensures all secubox_wan_* rules are properly removed before
reapplying new ones.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-08 17:34:38 +01:00
4eaf1cb27f fix: Simplify WAN access to DMZ-style open ports (v0.6.0-r36)
- Rewrite secubox-wan-access to use src="*" (all zones, DMZ style)
- Remove firewall include script (was causing loops)
- Keep only hotplug script for WAN interface up events
- Rules saved in UCI persist across reboots
- Firewall reload runs in background (&) to avoid blocking
- secubox-core bumped to 0.9.0-3

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-08 17:31:26 +01:00
512ed12178 fix: Prevent infinite loop in secubox-wan-access (v0.6.0-r35)
- Add apply-noreload command that skips firewall reload
- Firewall include now uses apply-noreload to avoid loop
- apply command still reloads firewall for manual use

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-08 17:27:09 +01:00
e6749f1b54 feat: Make WAN access rules persistent across firewall/network restarts (v0.6.0-r34)
- Add firewall include script (/etc/firewall.secubox-wan) for fw4 compatibility
- Add hotplug script (/etc/hotplug.d/iface/99-secubox-wan) for WAN interface events
- Configure firewall include in postinst (type=script for fw4)
- secubox-core bumped to 0.9.0-2

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-08 17:18:05 +01:00
4dc1a6b74c feat: Add WAN zone to default Client Guardian config 2026-01-08 17:01:46 +01:00
c162235268 chore: Bump luci-app-client-guardian to 0.4.0-5 2026-01-08 17:00:45 +01:00
f5c80869df feat: Add WAN/Internet zone to all Client Guardian profiles (v0.6.0-r33)
- Added "wan" zone to all network profiles (family_home, small_business, etc.)
- Zone provides internet access without local network access
- Allows users to easily grant internet-only access to clients

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-08 17:00:13 +01:00
1788dcf6d2 chore: Bump luci-app-client-guardian to 0.4.0-4 2026-01-08 16:54:49 +01:00
d8f5fcd6e4 fix: Client Guardian remove_client_rules now uses section names (v0.6.0-r32)
- Fix duplicate firewall rules issue by using section names instead of indices
- UCI section deletion now properly handles all rules for a MAC address
- Prevents index shifting problems when deleting multiple rules

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-08 16:54:23 +01:00
9c7bbe513c chore: Bump luci-app-client-guardian to 0.4.0-3 2026-01-08 16:30:09 +01:00
179224296a fix: Client Guardian zone changes now properly apply firewall rules (v0.6.0-r31)
- Remove duplicate apply_client_rules function (second definition was overriding first)
- Improve zone-based firewall rule application:
  - Proper MAC address normalization (uppercase)
  - Clean rule names without colons (CG_BLOCK_AABBCCDD)
  - Quarantine zone blocks WAN but allows DNS/DHCP
  - Zone settings (internet_access, local_access) properly applied
  - Firewall reload is now synchronous for immediate effect
- Improve remove_client_rules to find and delete all CG_ prefixed rules
- Add debug logging for troubleshooting

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-08 16:25:10 +01:00
8255cc6f39 feat: Add scheduled backups, live logs, and component detection (v0.6.0-r30)
System Hub enhancements:
- Add cron-based scheduled backup configuration (daily/weekly/monthly)
- Add backup schedule RPCD methods (get_backup_schedule, set_backup_schedule)
- Add live streaming logs with LIVE badge, play/pause, 2s refresh
- Add real component installation detection from secubox state field
- Add service running status detection for components
- Add category-based icons for components (security, network, monitoring)
- Fix status emoji display ( ⚠️ ) for Quick Status Indicators

UI improvements:
- New Scheduled Backups card in backup page with enable/disable toggle
- Time picker for backup schedule (hour/minute selectors)
- Day of week/month selectors for weekly/monthly backups
- Live indicator badge with pulse animation for logs
- Play/Pause button for log streaming control
- New log highlighting with fade-in animation

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-08 15:37:50 +01:00
327cc5b285 feat: Add smart action buttons and fix CrowdSec settings display (v0.6.0-r29)
- Add service control RPCD method (start/stop/restart/reload)
- Add smart action buttons to CrowdSec Settings (Service Control, Register Bouncer, Hub Update)
- Add CrowdSec Console quick access link button
- Fix LAPI status check (use lapi_status field)
- Fix collections display (handle nested response structure)
- Fix System Hub Quick Status Indicators layout (label/value stacking)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-08 15:02:03 +01:00
e5b6d1dd87 feat: Add CrowdSec Console enrollment to setup wizard (v0.6.0-r28)
- Add console_status, console_enroll, console_disable RPCD methods
- Insert Console enrollment as Step 2 in the 7-step wizard
- Add API declarations and ACL permissions for console operations
- Enable share_manual_decisions, share_tainted, share_context by default on enrollment

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-08 14:40:24 +01:00
4078b4d7a4 feat: Add LAPI auto-repair and SecuBox theming to CrowdSec Dashboard (v0.6.0-r27)
- Add repair_lapi() RPCD method to auto-fix LAPI configuration issues:
  - Creates /srv/crowdsec/data directory if missing
  - Fixes data_dir and db_path in config.yaml
  - Re-registers localhost machine if needed
  - Restarts CrowdSec and verifies LAPI is working

- Fix register_bouncer() to handle existing bouncers:
  - Deletes existing bouncer before re-registering
  - Gets fresh API key on re-registration

- Fix update_firewall_bouncer_config() UCI path:
  - Changed from crowdsec.bouncer.$key to crowdsec.@bouncer[0].$key
  - Added api_key to allowed parameters

- Rewrite metrics.js with SecuBox cyber-card theming:
  - Use Theme.init() for proper theme initialization
  - Replace cs-* classes with cyber-* classes
  - Add CSS variable fallbacks for light/dark theme support
  - Fix hub data parsing for proper component counts

- Add theme require to wizard.js

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-08 14:11:16 +01:00
b7fb268f71 feat: Fix Client Guardian RPC, redesign Netifyd devices UI (v0.6.0-r26)
- Fix Client Guardian JS files: replace invalid 'require X as Y' syntax
  with direct RPC declarations (LuCI doesn't support as alias)
- Add factory default profile to Client Guardian profiles.json
- Redesign Netifyd devices page with modern card-based UI:
  - Device type detection with emoji icons
  - Gradient summary cards for stats
  - Responsive grid layout
  - Traffic distribution bars
  - Real-time refresh with pulse animation
- Fix Netifyd RPC calls: use correct luci.secubox-netifyd object name
- Add WAN access control feature to secubox-admin

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-08 13:52:45 +01:00
b610239551 ok 2026-01-08 09:08:46 +01:00
47975483c5 feat: Add wizard integration to Client Guardian (v0.6.0-r25)
- Add wizard.js view for setup wizard integration
- Profile-based configuration (family, iot, secure, business templates)
- Apply zone settings from wizard profiles
- Integration with SecuBox Admin wizard system

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-08 08:48:22 +01:00
0564de0811 feat: Remove captive portal and add auto-zoning to Client Guardian (v0.6.0-r24)
Major enhancements to Client Guardian:

**Removed Captive Portal:**
- Deleted portal.js and captive.js views
- Removed portal configuration from UCI
- Removed portal RPC methods (get_portal, update_portal, list_sessions, authorize_client, deauthorize_client)
- Cleaned menu and ACL definitions
- Updated default policy from 'captive' to 'quarantine'

**Added Auto-Zoning System:**
- Implemented get_vendor_from_mac() for OUI lookups
- Added apply_auto_zoning() with rule-based zone assignment
- Support for vendor, hostname pattern, and MAC prefix matching
- 8 pre-configured auto-zoning rules (IoT devices, mobile, guests)
- Auto-parking zone for unmatched clients
- GridSection UI for managing auto-zoning rules

**Threat Intelligence Integration:**
- Added threat_policy UCI section
- Auto-ban/quarantine based on threat score thresholds
- Threat indicators on client displays
- Integration with Security Threats Dashboard

**Dashboard Improvements:**
- Fixed boolean conversion (UCI "true"/"false" to JSON 0/1)
- Fixed RPC expect parameter issues causing empty arrays
- Added real-time polling with configurable intervals
- Removed all window.location.reload() calls
- Smooth DOM updates without page flickers

**Settings Enhancements:**
- Added reactiveness section (auto-refresh toggle, interval)
- Added threat intelligence settings
- Removed captive portal settings section
- Updated policy descriptions

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-08 08:44:39 +01:00
1823913582 chore: Update Claude Code allowed commands configuration (v0.6.1)
- Add SCP file transfer commands for deployment
- Add Node.js and AWK script execution permissions
- Add file iteration and batch deployment commands

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-07 13:53:27 +01:00
91a7227b82 feat: Add wizard manifests for internal LuCI apps (v0.6.0-r23)
CrowdSec Dashboard Wizard:
- Created manifest.json with wizard configuration
- Fields: API URL, API Key, auto-refresh interval, metrics toggle
- Allows quick setup of CrowdSec monitoring dashboard
- UCI config: crowdsec.settings

Netifyd DPI Dashboard Wizard:
- Created manifest.json with wizard configuration
- Fields: socket type, socket path/address/port
- Flow tracking, app detection, max flows settings
- Allows quick setup of deep packet inspection
- UCI config: secubox-netifyd.settings and monitoring sections

Total Wizards Now Available:
- CrowdSec Dashboard (new)
- Netifyd DPI Dashboard (new)
- Domoticz (docker app)
- Lyrion Media Server (docker app)

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-07 13:32:43 +01:00
6345268dd8 fix: Filter wizard apps and fix profile apply/rollback (v0.6.0-r22)
Wizard App Filtering:
- Only show apps with has_wizard=true in App Wizards section
- Previously showed all 39 catalog apps, now shows only 2 with wizards
- Improved user experience by hiding apps without configuration wizards

Profile Application Fixes:
- Fixed API method name: apply_profile → applyProfile (camelCase)
- Fixed parameter name: profile_id → profile
- Added proper JSON response handling with success/message fields
- Fixed rollback_profile → rollbackProfile method name
- Implemented rollbackProfile RPC method using secubox-recovery
- Added rollbackProfile to RPC method list registration
- Profile apply now returns structured success/error responses
- Rollback restores last snapshot created before profile application

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-07 13:24:04 +01:00
ed78d4bb49 fix: Handle array response format in wizard data parsing (v0.6.0-r21)
- Fixed wizard page not displaying profiles and apps
- RPC expect parameters extract nested properties automatically
- listApps with expect: {apps: []} returns array directly, not {apps: [...]}
- listProfiles with expect: {profiles: []} returns array directly
- Updated wizard.js to handle both array and object formats
- Added Array.isArray() checks for backward compatibility
- Fixes "No profiles available" and "No manifests detected" errors
- Added debug console logging for troubleshooting

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-07 13:19:39 +01:00
8b3627777f fix: Add standalone manifest apps to list_apps wizard display (v0.6.0-r20)
- Modified list_apps RPC method to include apps from plugin manifests
- Previously only catalog apps could have has_wizard flag
- Now scans /usr/share/secubox/plugins/*/manifest.json files
- Adds apps with wizard.fields to the apps list even if not in catalog
- If app exists in catalog, adds has_wizard flag
- If app not in catalog, creates new app entry with manifest data
- Fixes wizard page showing "No manifests detected"
- Apps domoticz and lyrion now appear with Configure button

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-07 13:15:56 +01:00
2997ee51b6 fix: Escape apostrophe in French text string (v0.6.0-r19)
- Fixed JavaScript syntax error at line 163 in help.js
- Escaped single quote in "l'équipe" within single-quoted string
- Error: "missing ) after argument list" when loading help page
- Changed _('Écrire à l'équipe') to _('Écrire à l\'équipe')

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-07 13:11:31 +01:00
6b7436783d feat: Add Bug Bounty Program to help page (v0.6.0-r18)
- Added Bug Bounty card in support section with description
- Added Bug Bounty button linking to https://secubox.cybermood.eu/SecuBox_BugBounty_Announcement.html#contact
- Encourages responsible security disclosure with rewards
- Opens in new tab for easy access to program details

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-07 12:45:02 +01:00
fe96791d20 fix: Correct RPC method name for listProfiles (v0.6.0-r17)
- Changed method from 'list_profiles' to 'listProfiles' to match backend
- Fixes wizard showing 'No profiles available'
- Backend uses camelCase method names, not snake_case

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-07 12:39:47 +01:00
0577410c42 fix: Detect app wizards and return full profile objects (v0.6.0-r16)
- Updated list_apps RPC to scan /usr/share/secubox/plugins/*/manifest.json
- Apps with wizard.fields configuration now get has_wizard: true flag
- Updated secubox-profile to return full JSON profile objects instead of filenames
- Fixes wizard page showing "No profiles available" and "No manifests detected"

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-07 12:34:35 +01:00
937e57c3e7 feat: Add default SecuBox configuration profiles (v0.6.0-r15)
- Add home.profile.json: Residential setup with parental controls, media, smart home
- Add gateway.profile.json: Enterprise security with IDS/IPS, VPN, traffic analysis
- Add dmz.profile.json: Isolated DMZ for self-hosted services with reverse proxy
- Each profile includes recommended apps and network mode configuration

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-07 12:31:00 +01:00
5903547fe8 fix: Fix secubox-profile script syntax and directory path (v0.6.0-r14)
- Changed bash brace expansion `*.{yaml,yml,json}` to POSIX-compliant loops
- Removed `2>/dev/null` from for loop glob (not supported in busybox sh)
- Changed PROFILE_DIR from /etc/secubox/profiles to /usr/share/secubox/profiles
- Fixes "syntax error: unexpected redirection" error
- Fixes listProfiles RPC returning "No response"

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-07 12:30:41 +01:00
e203a8d8c2 fix: Add cyber-checkbox styling to SecuBox settings checkboxes (v0.6.0-r13)
- Add cyber-checkbox class to all checkbox inputs after form render
- Ensures checkboxes are visible and properly styled
- Fixes invisible checkboxes for Enable SecuBox, Debug Mode, etc.

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-07 12:20:47 +01:00
9ce67f2da5 fix: Use correct UCI section types in SecuBox settings view (v0.6.0-r12)
- Changed form sections from type 'secubox' to match actual UCI config
- General/Dashboard/Module/Notification sections now use type 'core'
- Alert Thresholds section now uses type 'diagnostics'
- Security Settings section now uses type 'security'
- Advanced Settings section uses type 'core'
- Fixes "This section contains no values yet" errors

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-07 12:18:18 +01:00
0123ff005c fix: Hub components showing incorrect counts in metrics view (v0.6.0-r11)
- Changed installed detection from checking i.installed property
- Now checks i.status === 'enabled' or i.local_version exists
- Fixes Hub Components showing 0 when collections are installed
- Fixes Installed Collections list showing empty

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-07 11:39:53 +01:00
5cf3240caa fix: Sanitize malformed JSON from cscli metrics (v0.6.0-r10)
- cscli metrics sometimes outputs empty string keys ("": {...})
- This causes RPC parsing errors in LuCI
- Added sed filter to replace empty keys with "unknown"
- Fixes "No related RPC reply" error in metrics view

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-07 11:32:28 +01:00
fe7f160de9 fix: Add missing API utility functions and fix data structure handling (v0.6.0-r9)
- Add parseScenario() to format scenario names
- Add getCountryFlag() to display country flag emojis
- Add formatRelativeTime() for relative timestamps
- Fix decisions data flattening in handleUnban, handleBulkUnban, submitBan, and polling
- Fix getDashboardData to properly flatten alerts->decisions structure
- Fix context error in overview renderDecisionsTable (this vs self)

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-07 11:01:54 +01:00
09694b64a1 fix: Use SecuBox cyber-checkbox class for collection checkboxes (v0.6.0-r8)
Fix invisible checkboxes using SecuBox theme structure:
- Wrap checkbox inputs with .cyber-checkbox label class
- Update wizard.css to style .cyber-checkbox properly
- Use theme's native checkbox styling from forms.css
- Add !important to override theme defaults where needed

Issue: Checkboxes still not visible after inline styles
Root Cause: SecuBox theme requires .cyber-checkbox wrapper class
Solution: Restructure HTML to match theme's checkbox pattern

Structure Change:
OLD: <label><input><div class="collection-info">
NEW: <label class="cyber-checkbox"><input><div class="collection-info">

CSS Updates:
- .collection-item .cyber-checkbox (flex layout with gap)
- .collection-item .cyber-checkbox input[type="checkbox"] (18x18px, flex-shrink: 0)
- Added !important to override theme padding

Theme Pattern:
.cyber-checkbox { display: inline-flex; align-items: center; gap: 0.5rem; }
.cyber-checkbox input[type="checkbox"] { width: 18px; height: 18px; }

Version: 0.6.0-8

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-07 09:17:25 +01:00
439bab6361 fix: Make collection checkboxes visible with inline styles (v0.6.0-r7)
Fix invisible checkboxes in Step 3 collections:
- Add explicit inline styles to checkbox inputs
- Set width: 18px, height: 18px with cursor: pointer
- Add 'for' attribute to label for better click handling
- Replace null rendering with empty element E([])
- Fixes "null" text appearing on screen

Issue: Collection items not selectable, checkboxes invisible
Cause: Checkboxes may be hidden by browser default styles
Solution: Add explicit inline styles and proper label association

Frontend Changes:
- htdocs/luci-static/resources/view/crowdsec-dashboard/wizard.js
  - Add inline styles to checkbox inputs
  - Add 'for' attribute linking label to checkbox
  - Replace ': null' with ': E([])' to avoid "null" text

Checkboxes now have:
- Explicit dimensions (18x18px)
- Proper cursor styling
- Label association via 'for' attribute
- No more "null" text rendering

Version: 0.6.0-7

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-07 09:15:17 +01:00
be3a367e18 fix: Update Hub API returns full response object (v0.6.0-r6)
Fix hub update failing in wizard:
- Change updateHub API expect from {success: false} to {}
- Returns full response object {success: true, message: "..."}
- Wizard can now properly check result.success
- Enables getCollections() call after successful update

Issue: Hub update showed "Hub update failed" despite success
Cause: RPC expect field extracted only boolean value instead of full object
Solution: Remove expect field to return complete response

Frontend Changes:
- htdocs/luci-static/resources/crowdsec-dashboard/api.js
  - callUpdateHub: Change expect: {success: false} to expect: {}
- htdocs/luci-static/resources/view/crowdsec-dashboard/wizard.js
  - Add comprehensive error logging and catch handler
  - Better error messages with error.message details

Backend Returns:
{"success": true, "message": "Hub index updated successfully"}

Version: 0.6.0-6

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-07 09:12:57 +01:00
aefc6e5265 fix: Read status from data parameter in wizard step 1 (v0.6.0-r5)
Fix Next button remaining disabled despite correct status:
- Change renderStep1 to read from data parameter instead of wizardData
- Read status.crowdsec and status.lapi_status from passed data
- Ensures button state reflects actual API response

Issue: Next button not clickable even with LAPI available
Cause: renderStep1 reading from stale wizardData instead of fresh data
Solution: Read from data parameter passed by render()

Frontend Changes:
- htdocs/luci-static/resources/view/crowdsec-dashboard/wizard.js
  - renderStep1: Read from data.status instead of this.wizardData
  - Extract crowdsecRunning and lapiAvailable from data parameter

Version: 0.6.0-5

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-07 09:05:34 +01:00
4c0ab93284 fix: Load wizard CSS in render method (v0.6.0-r4)
Fix missing navigation buttons in wizard:
- Add explicit CSS loading in render() method
- Use L.resource() to load wizard.css
- Inject <link> tag into document head
- Ensures wizard styling is applied

Issue: Navigation buttons (Cancel, Next) not visible
Cause: wizard.css was not being loaded
Solution: Add CSS file loading in render method

Frontend Changes:
- htdocs/luci-static/resources/view/crowdsec-dashboard/wizard.js
  - Add CSS link injection in render()
  - Load crowdsec-dashboard/wizard.css via L.resource()

Version: 0.6.0-4

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-07 09:01:11 +01:00
c83304fac8 fix: Add LAPI status check to wizard prerequisites (v0.6.0-r3)
Fix wizard Next button being disabled issue:
- Add lapi_status field to get_status() RPC method
- Check LAPI availability using 'cscli lapi status'
- Returns 'available' or 'unavailable' status
- Enables wizard to proceed when LAPI is accessible

Backend Changes:
- root/usr/libexec/rpcd/luci.crowdsec-dashboard
  - Add LAPI status check before json_dump
  - Run 'cscli lapi status' to verify Local API accessibility

Issue: Wizard showed LAPI as UNAVAILABLE even when working
Cause: Missing lapi_status field in status RPC response
Solution: Add LAPI availability check to backend

Version: 0.6.0-3

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-07 08:58:54 +01:00
f665d7fdb7 fix: Correct file permissions for wizard files (v0.6.0-r2)
Fix file permissions for wizard.js and wizard.css:
- Change from 600 (root-only) to 644 (world-readable)
- Allows web server to serve JavaScript and CSS files
- Resolves HTTP 403 Forbidden error when loading wizard

Files Fixed:
- htdocs/luci-static/resources/view/crowdsec-dashboard/wizard.js
- htdocs/luci-static/resources/crowdsec-dashboard/wizard.css

Version: 0.6.0-2

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-07 08:54:38 +01:00
f701f8b20d feat(luci-app-secubox-netifyd): add flow sink controls 2026-01-07 08:40:29 +01:00
ad2e89fd47 feat: CrowdSec Setup Wizard - Complete First-Time Installation (v0.6.0)
Major Features:
- Add comprehensive 6-step setup wizard for CrowdSec initial configuration
- Automated hub update, collection installation, and bouncer configuration
- Complete turnkey solution requiring zero manual configuration

Wizard Flow:
1. Welcome & Prerequisites - Check CrowdSec and LAPI status
2. Update CrowdSec Hub - Fetch latest security collections
3. Install Collections - Pre-selected security packs (ssh-bf, http-cve, linux)
4. Configure Firewall Bouncer - Auto-register with API key generation
5. Enable & Start Services - Start bouncer and verify nftables
6. Verification & Summary - Show completion status with statistics

UI Components:
- Visual stepper with active/complete/pending states
- Real-time progress indicators and status badges
- Auto-advancement after successful operations
- Professional dark-themed styling with animations
- Fully responsive design (mobile/tablet/desktop)

New Files:
- htdocs/luci-static/resources/view/crowdsec-dashboard/wizard.js (815 lines)
- htdocs/luci-static/resources/crowdsec-dashboard/wizard.css (578 lines)

Backend Enhancements:
- Add check_wizard_needed() RPC method for first-time setup detection
- Add wizard_state() RPC method for wizard initialization
- Update API module with wizard method declarations
- Add wizard menu item (order: 5, appears first in CrowdSec section)
- Update ACL permissions for wizard RPC methods

User Experience:
- < 2 minute complete CrowdSec setup from fresh install
- Clear visual feedback at each step
- Error handling with retry capability
- Final verification shows all systems operational

Version: 0.6.0-1

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-07 08:39:41 +01:00
6bd2914730 docs: Add comprehensive build documentation for CrowdSec Firewall Bouncer binary
Added BUILD.md with complete guide for building the real crowdsec-firewall-bouncer
binary package from upstream OpenWrt feeds using the SDK.

Documentation includes:
- Build environment setup (SDK, golang, feeds)
- Step-by-step build process with commands
- Package details (binary size, architecture, Go version)
- Deployment instructions for router installation
- Integration with secubox-app-crowdsec-bouncer wrapper
- Version update procedures
- Troubleshooting common build issues
- CI/CD integration examples

Successfully Built Package:
- Version: 0.0.31-r2
- Architecture: aarch64_cortex-a72
- Size: 4.9MB compressed, 14MB binary
- Go Version: 1.23.12
- Build Time: ~52 seconds

The binary package was successfully built and deployed to router 192.168.8.191:
- Service running and active
- Last API pull: 2026-01-06T19:49:45Z
- nftables tables created and operational
- Integration with CrowdSec LAPI confirmed

Build Command:
```
cd secubox-tools/sdk
./scripts/feeds install -p packages golang
./scripts/feeds install crowdsec-firewall-bouncer
make package/feeds/packages/crowdsec-firewall-bouncer/compile V=s -j1
```

Output: bin/packages/aarch64_cortex-a72/packages/crowdsec-firewall-bouncer_0.0.31-r2_aarch64_cortex-a72.ipk

This provides complete control over the binary version and enables self-contained
deployment without relying on external pre-built binaries.

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-06 20:51:24 +01:00
82d1aa37aa fix: Add ACL permissions for firewall bouncer RPC methods
Added missing RPCD ACL permissions for the new firewall bouncer
management methods to resolve "Access denied" errors.

ACL Changes:
- Added read permissions:
  * firewall_bouncer_status - Get service and nftables status
  * firewall_bouncer_config - Read UCI configuration
  * nftables_stats - Get blocked IPs and rules statistics

- Added write permissions:
  * control_firewall_bouncer - Start/stop/restart/enable/disable service
  * update_firewall_bouncer_config - Modify UCI settings

These permissions allow the bouncers page to fully manage the firewall
bouncer service through the LuCI web interface.

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-06 20:26:01 +01:00
ba64563b3f feat: Firewall Bouncer Management UI in Bouncers Page
Enhanced CrowdSec Dashboard bouncers page with comprehensive firewall
bouncer management capabilities.

New Features:
- Dedicated Firewall Bouncer management card with 3 status panels:
  * Service Status: Running/stopped, boot start enabled/disabled, configured status
  * Blocked IPs: Real-time IPv4/IPv6 blocked IP counts with View Details modal
  * nftables Status: IPv4/IPv6 table active status

- Service Control Buttons:
  * Start/Stop service (contextual based on current state)
  * Restart service
  * Enable/Disable boot start (contextual)
  * Configuration viewer

- Real-time Updates:
  * Auto-refresh every 10 seconds via polling
  * Manual refresh button
  * Live status badge updates

- nftables Details Modal:
  * Lists all blocked IPv4 addresses (scrollable)
  * Lists all blocked IPv6 addresses (scrollable)
  * Shows IPv4/IPv6 rules count
  * Formatted with monospace font

- Configuration Viewer Modal:
  * Displays all UCI configuration settings
  * Shows enabled/disabled status
  * Shows IPv4/IPv6 support
  * Shows API URL, update frequency, deny action
  * Shows deny logging and log prefix
  * Shows configured network interfaces
  * Handles unconfigured state with installation prompt

UI Enhancements:
- Responsive grid layout for status cards
- Color-coded status indicators (green=active, red=stopped, gray=disabled, yellow=warning)
- Material design badges for all status indicators
- Visual feedback for all operations with notifications
- Loading spinners for async operations
- Professional styling consistent with SecuBox theme

Integration:
- Utilizes new API methods: getFirewallBouncerStatus, controlFirewallBouncer,
  getFirewallBouncerConfig, getNftablesStats
- Error handling with user-friendly notifications
- Proper promise chaining and async/await patterns

Technical Details:
- Added renderFirewallBouncerCard() method (125 lines)
- Added handleFirewallBouncerControl() method for service actions
- Added handleFirewallBouncerRefresh() for manual/auto refresh
- Added showNftablesDetails() modal for blocked IPs
- Added showFirewallBouncerConfig() modal for UCI settings
- Enhanced load() to fetch firewall bouncer data
- Updated polling to refresh firewall bouncer status

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-06 20:25:15 +01:00
24383006aa feat: Add Firewall Bouncer management API to CrowdSec dashboard
Add comprehensive backend support for managing the CrowdSec Firewall Bouncer
through the dashboard with full control and monitoring capabilities.

RPC Backend Enhancements (luci.crowdsec-dashboard):
- get_firewall_bouncer_status: Detailed status (running, enabled, UCI config, nftables)
- control_firewall_bouncer: Service control (start/stop/restart/enable/disable)
- get_firewall_bouncer_config: Read UCI configuration
- update_firewall_bouncer_config: Modify UCI settings
- get_nftables_stats: nftables statistics (blocked IPs, rules count)

API Methods Added (api.js):
- getFirewallBouncerStatus(): Get bouncer status and health
- controlFirewallBouncer(action): Control service lifecycle
- getFirewallBouncerConfig(): Read configuration
- updateFirewallBouncerConfig(key, value): Update settings
- getNftablesStats(): Get firewall statistics

Features:
- Real-time service status monitoring
- nftables table detection (IPv4/IPv6)
- Blocked IP counting
- UCI configuration management
- Service lifecycle control
- Comprehensive error handling

Status Information Provided:
- Service running state
- Init script enabled state
- UCI configuration status
- nftables tables active (crowdsec, crowdsec6)
- Blocked IPv4/IPv6 count
- Rules count per table

Configuration Options Supported:
- enabled, ipv4, ipv6 (boolean)
- api_url, update_frequency, deny_action, log_level (string)
- deny_log, filter_input, filter_forward (boolean)
- interfaces list

Next: Frontend UI enhancements for bouncer management panel

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-06 20:19:11 +01:00
9b59b55c9e feat: Add secubox-app-crowdsec-bouncer wrapper package (v0.0.31)
Create SecuBox wrapper for CrowdSec Firewall Bouncer with enhanced
automation and configuration for OpenWrt routers.

Package Structure:
- Lightweight wrapper depending on upstream crowdsec-firewall-bouncer
- No compilation needed (PKG_ARCH=all)
- Enhanced UCI configuration with router-optimized defaults
- Automatic bouncer registration via uci-defaults script

Files Created:
- Makefile: OpenWrt package definition with dependencies
- README.md: Comprehensive documentation (configuration, troubleshooting)
- files/crowdsec-bouncer.config: Enhanced UCI config template
- files/crowdsec-bouncer.defaults: Auto-registration and setup script

Features:
- Auto-detection of LAN/WAN interfaces
- Automatic API key generation and registration with CrowdSec LAPI
- nftables kernel module loading
- Configures IPv4/IPv6 filtering on INPUT/FORWARD chains
- Integrates with existing luci-app-crowdsec-dashboard

Configuration Highlights:
- Default interfaces: br-lan, eth1
- Logging enabled by default
- Update frequency: 10s
- Deny action: drop
- Both IPv4 and IPv6 enabled

Dependencies:
- crowdsec-firewall-bouncer (upstream from feeds/packages)
- crowdsec (SecuBox package)
- nftables
- uci + libuci

Note: Build requires rsync for OpenWrt SDK perl dependency.
Package ready for integration once build environment is complete.

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-06 19:45:25 +01:00