Commit Graph

24 Commits

Author SHA1 Message Date
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
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
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
dcfa5bf799 fix: String concatenation with DOM elements in CrowdSec views
Fixed "[object HTMLElement]" display bugs in CrowdSec dashboard views by properly structuring DOM element children arrays.

## Problem:
Multiple CrowdSec dashboard views were showing "[object HTMLElement]" instead of properly rendered content. This occurred when JavaScript code tried to concatenate strings with E() DOM elements using the + operator.

## Root Cause:
```javascript
// WRONG: String concatenation with DOM elements
E('p', {}, _('Access metrics at: ') + E('code', {}, url))
// Results in: "Access metrics at: [object HTMLElement]"
```

When you concatenate a string with a DOM element, JavaScript converts the DOM element to its string representation "[object HTMLElement]", which then gets rendered as text.

## Solution:
Changed from string concatenation to proper children arrays:

```javascript
// CORRECT: Array of children
E('p', {}, [
    _('Access metrics at: '),
    E('code', {}, url)
])
```

## Files Fixed:

### metrics.js (line 299-302):
- Fixed "Access metrics at: [object HTMLElement]" in metrics export info box
- Changed from concatenation to children array

### settings.js (line 217-220):
- Fixed "Or use: [object HTMLElement]" in collections empty state
- Changed from concatenation to children array

### waf.js (lines 123-126):
- Fixed 4 instances in WAF setup instructions:
  - "Install AppSec collections: [object HTMLElement]"
  - "Restart CrowdSec service: [object HTMLElement]"
  - "Verify status: [object HTMLElement]"
- Changed all from concatenation to children arrays

## Technical Notes:
- The E() helper function expects children to be:
  1. A single string
  2. A single DOM element
  3. An array of strings and/or DOM elements
- String concatenation (+) cannot be used to combine text with DOM elements
- Always use array notation when mixing text and elements

## Testing:
- Deployed to router 192.168.8.191
- Metrics view now displays "Access metrics at: http://127.0.0.1:6060/metrics" correctly
- Settings view shows "Or use: cscli hub update" properly
- WAF view renders all setup instructions with code blocks correctly

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-06 19:24:55 +01:00
878faf5bec fix: CrowdSec RPC process detection
Fixed pgrep command to detect running CrowdSec process:
- Changed from `pgrep -x crowdsec` to `pgrep crowdsec`
- The -x flag requires exact process name match which wasn't working
- Affects both check_cscli() and get_status() functions
- Now correctly detects service as running in dashboard

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-06 16:25:59 +01:00
d1788a12ff feat(luci-app-crowdsec-dashboard): Add graceful error handling when service stopped
Enhanced dashboard UX when CrowdSec service is not running:

API module (api.js):
- Modified getDashboardData() to handle error responses gracefully
- Returns empty arrays/objects for stats when service is stopped
- Includes error flag in response data

Overview module (overview.js):
- Added 'fs' module import for service control
- Added startCrowdSec() function to start service from UI
- Display warning banner when service is stopped
- Provide actionable message with start service link

Dashboard CSS (dashboard.css):
- Added .cs-warning-banner styles for error messages
- Professional warning styling with icon and content layout

This resolves XHR timeout errors by showing friendly error messages
instead of hanging requests.

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-06 16:07:01 +01:00
4e98c03be4 fix(luci-app-crowdsec-dashboard): Prevent RPC timeout when CrowdSec not running
Added service status check in check_cscli() function to immediately return
an error instead of timing out when crowdsec service is not running.

This fixes the 'XHR request timed out' error in the dashboard when CrowdSec
is stopped.

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-06 16:04:08 +01:00
fffe96999c fix(luci-app-crowdsec-dashboard): Fix API instantiation error
Changed 'new api()' to 'api' in all dashboard views since the API module
exports an object, not a constructor class.

Fixed files:
- overview.js
- decisions.js
- alerts.js
- metrics.js
- waf.js

This resolves the 'TypeError: api is not a constructor' error.

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-06 15:56:33 +01:00
4dd8884549 fix(luci-app-crowdsec-dashboard): Correct ACL dependency in menu
Changed menu dependency from 'luci-app-crowdsec' to 'luci-app-crowdsec-dashboard'
to match the actual ACL name, making CrowdSec visible in LuCI interface.

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-06 15:52:53 +01:00
e7cb0bd36e fix: remove circular dependency in luci-app-crowdsec-dashboard
Removed hard dependency on crowdsec package to fix recursive dependency error:
- luci-app-crowdsec-dashboard previously depended on crowdsec
- This created circular dependency with secubox-app-crowdsec

CrowdSec should be installed separately or via catalog if needed.

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-04 08:35:11 +01:00
e7c9411d79 feat: Release v0.8.2 - Admin Control Center, Documentation Mirror & Docker Automation
This release adds major new features for SecuBox management and deployment:

## New Features

### 1. LuCI Admin Control Center (luci-app-secubox-admin)
- Unified admin dashboard for managing all SecuBox appstore plugins
- **Control Panel**: Real-time stats, system health, alerts, quick actions
- **Apps Manager**: Browse catalog, install/remove apps with search & filtering
- **App Settings**: Per-app configuration, start/stop controls
- **System Health**: Live monitoring (CPU, RAM, disk) with auto-refresh
- **System Logs**: Centralized log viewer with download capability
- Fully integrated with existing RPCD backend (luci.secubox)
- Mobile-responsive design with polished UI components

### 2. Documentation Mirror in SecuBox Bonus
- Integrated complete development documentation into luci-app-secubox-bonus
- 64+ documentation files now available offline at /luci-static/secubox/docs/
- Beautiful landing page (index-main.html) with 4 sections:
  - Development guides & references
  - Live module demos
  - Tutorials & blog posts
  - Marketing campaign pages
- Accessible locally on router without internet connection

### 3. Automated Docker Plugin Installation
- Enhanced secubox-appstore CLI with full Docker automation
- One-click installation from web UI now fully automated:
  - Auto-detects Docker runtime from catalog
  - Discovers and executes control scripts (*ctl install)
  - Pulls Docker images automatically
  - Creates directories and configures UCI
  - Enables init services
- No manual CLI steps required for Docker apps
- Works for all Docker apps: AdGuard Home, Mail-in-a-Box, Nextcloud, etc.

### 4. Mail-in-a-Box Plugin
- New Docker-based email server plugin (secubox-app-mailinabox)
- Complete package with:
  - UCI configuration (8 port mappings, feature flags)
  - Control script (mailinaboxctl) with install/check/update/status/logs
  - Procd init script with auto-restart
  - Catalog manifest (category: hosting, maturity: beta)
- Network mode: host (required for mail server)
- Persistent storage: mail, SSL, data, DNS volumes

## Improvements

### Build System
- Updated local-build.sh to include luci-app-* packages from package/secubox/
- Now automatically discovers and builds luci-app-secubox-admin and similar packages
- Fixed Makefile include paths for feed structure

### Package Releases
- Incremented PKG_RELEASE for all 31 SecuBox packages
- Ensures clean upgrade path from previous versions

### Catalog Updates
- Mail-in-a-Box entry moved from "productivity" to "hosting" category
- Status changed to "beta" reflecting community Docker image maturity
- Storage requirement increased: 1024MB → 2048MB
- Added port 25 accessibility note

## Files Changed

### New Packages (2)
- package/secubox/luci-app-secubox-admin/ (12 files)
- package/secubox/secubox-app-mailinabox/ (4 files)

### Enhanced Packages (1)
- package/secubox/luci-app-secubox-bonus/ (65 new docs files)

### Modified Core (3)
- package/secubox/secubox-core/root/usr/sbin/secubox-appstore
- package/secubox/secubox-core/root/usr/share/secubox/catalog.json
- secubox-tools/local-build.sh

### All Makefiles (31 packages)
- Incremented PKG_RELEASE for clean upgrade path

## Technical Details

**Admin Control Center Architecture:**
- Frontend: 5 views (dashboard, apps, settings, health, logs)
- API: Wrapper around luci.secubox RPCD methods
- Components: Reusable UI library (cards, badges, alerts, loaders)
- Styling: Common + admin-specific CSS with responsive design
- Auto-refresh: Polling for live updates (5-30s intervals)

**Docker Automation Flow:**
```
Web UI → RPCD → secubox-appstore CLI → opkg install → *ctl install →
docker pull → directories → UCI config → init enable → ✓ Ready
```

**Access Points:**
- Admin Control: http://router/cgi-bin/luci/admin/secubox/admin/
- Documentation: http://router/luci-static/secubox/index-main.html
- Demos: http://router/luci-static/secubox/demo-*.html

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-04 08:29:31 +01:00
4325197e35 fix(packages): add PKG_ARCH:=all and resolve build conflicts
- Add PKG_ARCH:=all to all 29 SecuBox packages for architecture independence
- Fix secubox-core: remove /var directory creation (conflicts with OpenWRT symlink)
- Fix luci-app-secubox: remove PKG_FILE_MODES causing build errors
- Refactor luci-app-network-tweaks: migrate files/ to root/ structure
- Set correct permissions on fix-permissions.sh (755)

Fixes:
- secubox-core now builds successfully (no /var conflict)
- luci-app-secubox installs without file conflicts
- All packages properly marked as architecture-independent

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-02 07:45:37 +01:00
31a87c5d7a feat(structure): reorganize luci-app packages into package/secubox/ + appstore migration
Major structural reorganization and feature additions:

## Folder Reorganization
- Move 17 luci-app-* packages to package/secubox/ (except luci-app-secubox core hub)
- Update all tooling to support new structure:
  - secubox-tools/quick-deploy.sh: search both locations
  - secubox-tools/validate-modules.sh: validate both directories
  - secubox-tools/fix-permissions.sh: fix permissions in both locations
  - .github/workflows/test-validate.yml: build from both paths
- Update README.md links to new package/secubox/ paths

## AppStore Migration (Complete)
- Add catalog entries for all remaining luci-app packages:
  - network-tweaks.json: Network optimization tools
  - secubox-bonus.json: Documentation & demos hub
- Total: 24 apps in AppStore catalog (22 existing + 2 new)
- New category: 'documentation' for docs/demos/tutorials

## VHost Manager v2.0 Enhancements
- Add profile activation system for Internal Services and Redirects
- Implement createVHost() API wrapper for template-based deployment
- Fix Virtual Hosts view rendering with proper LuCI patterns
- Fix RPCD backend shell script errors (remove invalid local declarations)
- Extend backend validation for nginx return directives (redirect support)
- Add section_id parameter for named VHost profiles
- Add Remove button to Redirects page for feature parity
- Update README to v2.0 with comprehensive feature documentation

## Network Tweaks Dashboard
- Close button added to component details modal

Files changed: 340+ (336 renames with preserved git history)
Packages affected: 19 luci-app, 2 secubox-app, 1 theme, 4 tools

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

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-01 14:59:38 +01:00