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>
This commit is contained in:
parent
8a51a3e655
commit
29e2eac616
@ -1,6 +1,6 @@
|
||||
# SecuBox UI & Theme History
|
||||
|
||||
_Last updated: 2026-02-21_
|
||||
_Last updated: 2026-02-24_
|
||||
|
||||
1. **Unified Dashboard Refresh (2025-12-20)**
|
||||
- Dashboard received the "sh-page-header" layout, hero stats, and SecuNav top tabs.
|
||||
@ -3159,3 +3159,24 @@ git checkout HEAD -- index.html
|
||||
- `secubox-app-haproxy/files/usr/sbin/haproxyctl` (alpn h2,http/1.1 → alpn http/1.1)
|
||||
- `secubox-app-haproxy/files/usr/share/haproxy/templates/default.cfg` (updated)
|
||||
- `secubox-app-haproxy/files/etc/config/haproxy` (updated)
|
||||
|
||||
38. **Service Stability & LED Pulse Fix (2026-02-24)**
|
||||
- **CrowdSec Autostart Fix:**
|
||||
- Root cause: Machine registration mismatch between credentials file (`secubox-local`) and database (old UUID-style name).
|
||||
- Fix: Re-registered machine with `cscli machines add secubox-local --auto --force`.
|
||||
- Downloaded GeoLite2-City.mmdb (63MB) via `cscli hub update`.
|
||||
- CrowdSec now starts automatically after reboot.
|
||||
- **LED Pulse SPUNK ALERT Fix:**
|
||||
- Root cause: `secubox-led-pulse` was checking `lxc-attach -n haproxy -- pgrep haproxy` but HAProxy runs on host, not in LXC.
|
||||
- Fix: Changed to `pgrep haproxy` (host process check).
|
||||
- Committed: `8a51a3e6 fix(led-pulse): Check HAProxy on host instead of LXC container`.
|
||||
- **Docker nextcloud-talk-hpb Restore:**
|
||||
- Fixed corrupted Docker storage layer (`GetImageBlob: no such file or directory`).
|
||||
- Restarted dockerd, re-pulled image, container now healthy.
|
||||
- **cloud.gk2.secubox.in 503 Fix:**
|
||||
- Changed backend from `mitmproxy_inspector` to `nextcloud` (WAF was disabled for this vhost).
|
||||
- **LXC Autostart Configuration:**
|
||||
- Enabled `lxc.start.auto = 1` for mailserver and roundcube containers.
|
||||
- **Verification:** All 13 LXC containers + 6 core services confirmed running after reboot.
|
||||
- **Files:**
|
||||
- `secubox-core/root/usr/sbin/secubox-led-pulse` (fixed HAProxy check)
|
||||
|
||||
@ -31,7 +31,6 @@ _Last updated: 2026-02-06_
|
||||
|
||||
| Package | Status | Notes |
|
||||
|---------|--------|-------|
|
||||
| `secubox-app-guacamole` | DEFERRED | LXC build-from-source too slow; needs pre-built binaries |
|
||||
| `secubox-app-rustdesk` | DONE | Native hbbs/hbbr binaries, auto-key generation |
|
||||
| `secubox-app-ksmbd` | DONE | Mesh media server with pre-configured shares |
|
||||
| `secubox-app-domoticz` | DONE | LXC Debian, MQTT bridge, Zigbee2MQTT |
|
||||
@ -164,7 +163,6 @@ All cloud providers are **opt-in**. Offline resilience: local tier always active
|
||||
- [x] Threat Analyst agent (Done 2026-02-05)
|
||||
- [x] DNS Guard AI migration (Done 2026-02-06)
|
||||
- [x] LocalAI multi-channel emancipation (Done 2026-02-06)
|
||||
- [ ] Guacamole pre-built binaries (DEFERRED)
|
||||
|
||||
### v0.19.0 — AI Expansion + MirrorNet
|
||||
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
# Work In Progress (Claude)
|
||||
|
||||
_Last updated: 2026-02-21 (v0.24.1 - KISS UI Regeneration)_
|
||||
_Last updated: 2026-02-24 (Service Stability Fixes)_
|
||||
|
||||
> **Architecture Reference**: SecuBox Fanzine v3 — Les 4 Couches
|
||||
|
||||
@ -864,6 +864,16 @@ _Last updated: 2026-02-21 (v0.24.1 - KISS UI Regeneration)_
|
||||
- 4 views: Overview, Devices, Policies, Settings
|
||||
- RPCD handler with 11 methods + public ACL for unauthenticated access
|
||||
|
||||
### Just Completed (2026-02-24)
|
||||
|
||||
- **Service Stability & LED Pulse Fix** — DONE (2026-02-24)
|
||||
- CrowdSec autostart: Fixed machine registration mismatch, downloaded GeoLite2-City.mmdb
|
||||
- LED pulse: Fixed HAProxy check to run on host instead of non-existent LXC container
|
||||
- Docker: Restored corrupted nextcloud-talk-hpb container
|
||||
- HAProxy: Fixed cloud.gk2.secubox.in 503 (wrong backend)
|
||||
- LXC: Enabled autostart for mailserver and roundcube containers
|
||||
- Verified: All 13 LXC containers + 6 core services running after reboot
|
||||
|
||||
### Just Completed (2026-02-21)
|
||||
|
||||
- **SecuBox KISS UI Full Regeneration** — DONE (2026-02-21)
|
||||
@ -913,24 +923,17 @@ _Last updated: 2026-02-21 (v0.24.1 - KISS UI Regeneration)_
|
||||
|
||||
### SysWarden Evolution Plan (2026-02-20)
|
||||
|
||||
Implementing 4 evolutions inspired by SysWarden patterns:
|
||||
Implementing 3 evolutions inspired by SysWarden patterns:
|
||||
|
||||
| # | Module | Priority | Status |
|
||||
|---|--------|----------|--------|
|
||||
| 1 | `luci-app-ipblocklist` | HIGH | DONE |
|
||||
| 2 | AbuseIPDB Reporter | HIGH | DONE |
|
||||
| 3 | Log Denoising (System Hub) | MEDIUM | DONE |
|
||||
| 4 | SIEM Connector (x86 only) | LOW | TODO |
|
||||
|
||||
**Next**: Evolution #4 - SIEM Connector (optional, x86 only)
|
||||
|
||||
### Next Up — Couche 1
|
||||
|
||||
1. **Guacamole Pre-built Binaries**
|
||||
- Current LXC build-from-source approach is too slow
|
||||
- Need to find/create pre-built ARM64 binaries for guacd + Tomcat
|
||||
|
||||
3. **Multi-Node Mesh Testing**
|
||||
1. **Multi-Node Mesh Testing**
|
||||
- Deploy second SecuBox node to test real peer-to-peer sync
|
||||
- Validate bidirectional threat intelligence sharing
|
||||
|
||||
|
||||
@ -397,7 +397,16 @@
|
||||
"WebFetch(domain:arnowelzel.de)",
|
||||
"Bash(__NEW_LINE_5c2a7272ff3658b1__ ssh root@192.168.255.1 '\n# Test different sizes to find the limit\nfor size in 1000 5000 10000 20000 40000 60000; do\n CONTENT=$\\(head -c $size /tmp/test-upload.html | base64 -w0\\)\n CSIZE=$\\(echo -n \"\"$CONTENT\"\" | wc -c\\)\n RESULT=$\\(ubus call luci.metablogizer upload_and_create_site \"\"{\\\\\"\"name\\\\\"\":\\\\\"\"sizetest\\\\\"\",\\\\\"\"domain\\\\\"\":\\\\\"\"sizetest.gk2.secubox.in\\\\\"\",\\\\\"\"content\\\\\"\":\\\\\"\"$CONTENT\\\\\"\",\\\\\"\"is_zip\\\\\"\":\\\\\"\"0\\\\\"\"}\"\" 2>&1\\)\n \n if echo \"\"$RESULT\"\" | grep -q \"\"success.*true\"\"; then\n echo \"\"Size $size \\($CSIZE base64\\): OK\"\"\n ubus call luci.metablogizer delete_site \"\"{\\\\\"\"id\\\\\"\":\\\\\"\"site_sizetest\\\\\"\"}\"\" >/dev/null 2>&1\n else\n ERROR=$\\(echo \"\"$RESULT\"\" | head -1\\)\n echo \"\"Size $size \\($CSIZE base64\\): FAILED - $ERROR\"\"\n break\n fi\ndone\n')",
|
||||
"WebFetch(domain:admin.gk2.secubox.in)",
|
||||
"WebFetch(domain:tdah.gk2.secubox.in)"
|
||||
"WebFetch(domain:tdah.gk2.secubox.in)",
|
||||
"Bash(sudo ./secubox-tools/c3box-vm-builder.sh:*)",
|
||||
"Bash(./secubox-tools/c3box-vm-builder.sh:*)",
|
||||
"Bash(sudo apt-get update:*)",
|
||||
"Bash(vboxmanage --version:*)",
|
||||
"Bash(vboxmanage import:*)",
|
||||
"Bash(vboxmanage startvm:*)",
|
||||
"Bash(# Find the built packages find /home/reepost/CyberMindStudio/secubox-openwrt/secubox-tools -name \"\"luci-theme-secubox*.ipk\"\" -newer /home/reepost/CyberMindStudio/secubox-openwrt/secubox-tools/local-feed)",
|
||||
"Bash(do if ssh -o ConnectTimeout=5 root@192.168.255.1 \"echo ''System up''\")",
|
||||
"Bash(do if ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no root@192.168.255.1 \"echo ''System up''\")"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@ -91,7 +91,17 @@ reload_haproxy() {
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Generate new config
|
||||
/usr/sbin/haproxyctl generate >/dev/null 2>&1
|
||||
|
||||
# Sync generated config to all locations HAProxy might read from
|
||||
local src_cfg="/srv/haproxy/config/haproxy.cfg"
|
||||
if [ -f "$src_cfg" ]; then
|
||||
cp "$src_cfg" /etc/haproxy.cfg 2>/dev/null
|
||||
[ -d /opt/haproxy/config ] && cp "$src_cfg" /opt/haproxy/config/haproxy.cfg 2>/dev/null
|
||||
fi
|
||||
|
||||
# Reload HAProxy
|
||||
if [ -x /etc/init.d/haproxy ]; then
|
||||
/etc/init.d/haproxy reload >/dev/null 2>&1
|
||||
fi
|
||||
|
||||
@ -1,753 +0,0 @@
|
||||
'use strict';
|
||||
'require baseclass';
|
||||
|
||||
/**
|
||||
* SecuBox KISS Theme v2.0 - Shared styling for all LuCI dashboards
|
||||
* Features: Top bar with logout, collapsible sidebar, responsive design, view tabs
|
||||
*/
|
||||
|
||||
var KissThemeClass = baseclass.extend({
|
||||
// Navigation config - organized by category with collapsible sections
|
||||
// Items with `tabs` array show sub-navigation when active
|
||||
nav: [
|
||||
{ cat: 'Dashboard', icon: '📊', collapsed: false, items: [
|
||||
{ icon: '🏠', name: 'Home', path: 'admin/secubox-home' },
|
||||
{ icon: '📊', name: 'Dashboard', path: 'admin/secubox/dashboard' },
|
||||
{ icon: '🖥️', name: 'System Hub', path: 'admin/secubox/system/system-hub' }
|
||||
]},
|
||||
{ cat: 'Security', icon: '🛡️', collapsed: false, items: [
|
||||
{ icon: '🧙', name: 'InterceptoR', path: 'admin/secubox/interceptor', tabs: [
|
||||
{ name: 'Overview', path: 'admin/secubox/interceptor/overview' },
|
||||
{ name: 'Services', path: 'admin/secubox/interceptor/services' }
|
||||
]},
|
||||
{ icon: '🛡️', name: 'CrowdSec', path: 'admin/secubox/security/crowdsec', tabs: [
|
||||
{ name: 'Overview', path: 'admin/secubox/security/crowdsec/overview' },
|
||||
{ name: 'Decisions', path: 'admin/secubox/security/crowdsec/decisions' },
|
||||
{ name: 'Alerts', path: 'admin/secubox/security/crowdsec/alerts' },
|
||||
{ name: 'Bouncers', path: 'admin/secubox/security/crowdsec/bouncers' },
|
||||
{ name: 'Setup', path: 'admin/secubox/security/crowdsec/setup' }
|
||||
]},
|
||||
{ icon: '🔍', name: 'mitmproxy', path: 'admin/secubox/security/mitmproxy', tabs: [
|
||||
{ name: 'Status', path: 'admin/secubox/security/mitmproxy/status' },
|
||||
{ name: 'Settings', path: 'admin/secubox/security/mitmproxy/settings' }
|
||||
]},
|
||||
{ icon: '🚫', name: 'Vortex FW', path: 'admin/secubox/security/vortex-firewall' },
|
||||
{ icon: '👁️', name: 'Client Guard', path: 'admin/secubox/security/guardian', tabs: [
|
||||
{ name: 'Clients', path: 'admin/secubox/security/guardian/clients' },
|
||||
{ name: 'Settings', path: 'admin/secubox/security/guardian/settings' }
|
||||
]},
|
||||
{ icon: '🍪', name: 'Cookie Track', path: 'admin/secubox/interceptor/cookies' }
|
||||
]},
|
||||
{ cat: 'Network', icon: '🌐', collapsed: true, items: [
|
||||
{ icon: '⚖️', name: 'HAProxy', path: 'admin/services/haproxy', tabs: [
|
||||
{ name: 'Overview', path: 'admin/services/haproxy/overview' },
|
||||
{ name: 'Vhosts', path: 'admin/services/haproxy/vhosts' },
|
||||
{ name: 'Backends', path: 'admin/services/haproxy/backends' },
|
||||
{ name: 'Certs', path: 'admin/services/haproxy/certificates' },
|
||||
{ name: 'ACLs', path: 'admin/services/haproxy/acls' },
|
||||
{ name: 'Stats', path: 'admin/services/haproxy/stats' },
|
||||
{ name: 'Settings', path: 'admin/services/haproxy/settings' }
|
||||
]},
|
||||
{ icon: '🔒', name: 'WireGuard', path: 'admin/services/wireguard', tabs: [
|
||||
{ name: 'Wizard', path: 'admin/services/wireguard/wizard' },
|
||||
{ name: 'Overview', path: 'admin/services/wireguard/overview' },
|
||||
{ name: 'Peers', path: 'admin/services/wireguard/peers' },
|
||||
{ name: 'QR Codes', path: 'admin/services/wireguard/qrcodes' },
|
||||
{ name: 'Traffic', path: 'admin/services/wireguard/traffic' },
|
||||
{ name: 'Config', path: 'admin/services/wireguard/config' },
|
||||
{ name: 'Settings', path: 'admin/services/wireguard/settings' }
|
||||
]},
|
||||
{ icon: '🌍', name: 'Tor Shield', path: 'admin/services/tor-shield', tabs: [
|
||||
{ name: 'Overview', path: 'admin/services/tor-shield/overview' },
|
||||
{ name: 'Circuits', path: 'admin/services/tor-shield/circuits' },
|
||||
{ name: 'Hidden Svc', path: 'admin/services/tor-shield/hidden-services' },
|
||||
{ name: 'Bridges', path: 'admin/services/tor-shield/bridges' },
|
||||
{ name: 'Settings', path: 'admin/services/tor-shield/settings' }
|
||||
]},
|
||||
{ icon: '💾', name: 'CDN Cache', path: 'admin/services/cdn-cache', tabs: [
|
||||
{ name: 'Overview', path: 'admin/services/cdn-cache/overview' },
|
||||
{ name: 'Cache', path: 'admin/services/cdn-cache/cache' },
|
||||
{ name: 'Policies', path: 'admin/services/cdn-cache/policies' },
|
||||
{ name: 'Stats', path: 'admin/services/cdn-cache/statistics' },
|
||||
{ name: 'Maint.', path: 'admin/services/cdn-cache/maintenance' },
|
||||
{ name: 'Settings', path: 'admin/services/cdn-cache/settings' }
|
||||
]},
|
||||
{ icon: '📡', name: 'Bandwidth', path: 'admin/secubox/network/bandwidth-manager' },
|
||||
{ icon: '📶', name: 'Traffic Shaper', path: 'admin/secubox/network/traffic-shaper', tabs: [
|
||||
{ name: 'Overview', path: 'admin/secubox/network/traffic-shaper/overview' },
|
||||
{ name: 'Classes', path: 'admin/secubox/network/traffic-shaper/classes' },
|
||||
{ name: 'Rules', path: 'admin/secubox/network/traffic-shaper/rules' },
|
||||
{ name: 'Stats', path: 'admin/secubox/network/traffic-shaper/stats' },
|
||||
{ name: 'Presets', path: 'admin/secubox/network/traffic-shaper/presets' }
|
||||
]},
|
||||
{ icon: '🌐', name: 'Network Modes', path: 'admin/secubox/network/network-modes' },
|
||||
{ icon: '🔌', name: 'Interfaces', path: 'admin/network/network' },
|
||||
{ icon: '🌐', name: 'DNS Master', path: 'admin/services/dns-master' }
|
||||
]},
|
||||
{ cat: 'AI & LLM', icon: '🤖', collapsed: true, items: [
|
||||
{ icon: '🧠', name: 'AI Insights', path: 'admin/secubox/ai/insights' },
|
||||
{ icon: '🦙', name: 'Ollama', path: 'admin/services/ollama', tabs: [
|
||||
{ name: 'Dashboard', path: 'admin/services/ollama/dashboard' },
|
||||
{ name: 'Models', path: 'admin/services/ollama/models' },
|
||||
{ name: 'Chat', path: 'admin/services/ollama/chat' },
|
||||
{ name: 'Settings', path: 'admin/services/ollama/settings' }
|
||||
]},
|
||||
{ icon: '🤖', name: 'LocalAI', path: 'admin/services/localai' }
|
||||
]},
|
||||
{ cat: 'Apps', icon: '📦', collapsed: true, items: [
|
||||
{ icon: '✉️', name: 'Mail Server', path: 'admin/services/mailserver' },
|
||||
{ icon: '☁️', name: 'Nextcloud', path: 'admin/secubox/services/nextcloud', tabs: [
|
||||
{ name: 'Overview', path: 'admin/secubox/services/nextcloud/overview' },
|
||||
{ name: 'Settings', path: 'admin/secubox/services/nextcloud/settings' }
|
||||
]},
|
||||
{ icon: '🎬', name: 'Media Flow', path: 'admin/services/media-flow' },
|
||||
{ icon: '🪞', name: 'MagicMirror', path: 'admin/services/magicmirror2' },
|
||||
{ icon: '📰', name: 'HexoJS', path: 'admin/services/hexojs', tabs: [
|
||||
{ name: 'Overview', path: 'admin/services/hexojs/overview' },
|
||||
{ name: 'Posts', path: 'admin/services/hexojs/posts' },
|
||||
{ name: 'Editor', path: 'admin/services/hexojs/editor' },
|
||||
{ name: 'Media', path: 'admin/services/hexojs/media' },
|
||||
{ name: 'Deploy', path: 'admin/services/hexojs/deploy' },
|
||||
{ name: 'Sync', path: 'admin/services/hexojs/sync' },
|
||||
{ name: 'Theme', path: 'admin/services/hexojs/theme' },
|
||||
{ name: 'Settings', path: 'admin/services/hexojs/settings' }
|
||||
]},
|
||||
{ icon: '📺', name: 'Netdata', path: 'admin/services/netdata-dashboard' },
|
||||
{ icon: '🏠', name: 'Vhost Manager', path: 'admin/services/vhost-manager' },
|
||||
{ icon: '📦', name: 'App Store', path: 'admin/secubox/apps' }
|
||||
]},
|
||||
{ cat: 'Streamlit', icon: '🎯', collapsed: true, items: [
|
||||
{ icon: '📺', name: 'France TV', url: 'http://192.168.255.1:8522/' },
|
||||
{ icon: '🔮', name: 'Yijing Oracle', url: 'http://192.168.255.1:8501/' },
|
||||
{ icon: '🏭', name: 'Fabricator', url: 'http://192.168.255.1:8520/' },
|
||||
{ icon: '☯️', name: 'Bazi Complete', url: 'http://192.168.255.1:8509/' },
|
||||
{ icon: '🎛️', name: 'SecuBox Control', url: 'http://192.168.255.1:8511/' }
|
||||
]},
|
||||
{ cat: 'P2P & Mesh', icon: '🔗', collapsed: true, items: [
|
||||
{ icon: '🔗', name: 'P2P Network', path: 'admin/services/secubox-p2p' },
|
||||
{ icon: '🌳', name: 'Netifyd', path: 'admin/services/secubox-netifyd' },
|
||||
{ icon: '📡', name: 'Exposure', path: 'admin/services/exposure' }
|
||||
]},
|
||||
{ cat: 'System', icon: '⚙️', collapsed: true, items: [
|
||||
{ icon: '⚙️', name: 'Settings', path: 'admin/system' },
|
||||
{ icon: '📊', name: 'Status', path: 'admin/status/overview' },
|
||||
{ icon: '🛠️', name: 'KSM Manager', path: 'admin/services/ksm-manager' },
|
||||
{ icon: '🔄', name: 'Cloner', path: 'admin/secubox/system/cloner' },
|
||||
{ icon: '🌳', name: 'LuCI Menu', path: 'admin/secubox/luci-tree' },
|
||||
{ icon: '🔧', name: 'Software', path: 'admin/system/opkg' }
|
||||
]}
|
||||
],
|
||||
|
||||
// Track collapsed state per category
|
||||
collapsedState: {},
|
||||
|
||||
// Core palette
|
||||
colors: {
|
||||
bg: '#0a0e17',
|
||||
bg2: '#111827',
|
||||
card: '#161e2e',
|
||||
line: '#1e293b',
|
||||
text: '#e2e8f0',
|
||||
muted: '#94a3b8',
|
||||
green: '#00C853',
|
||||
red: '#FF1744',
|
||||
blue: '#2979FF',
|
||||
cyan: '#22d3ee',
|
||||
purple: '#a78bfa',
|
||||
orange: '#fb923c',
|
||||
yellow: '#fbbf24'
|
||||
},
|
||||
|
||||
// State
|
||||
isKissMode: true,
|
||||
sidebarOpen: false,
|
||||
|
||||
// CSS generation
|
||||
generateCSS: function() {
|
||||
var c = this.colors;
|
||||
return `
|
||||
/* SecuBox KISS Theme v2 */
|
||||
:root {
|
||||
--kiss-bg: ${c.bg}; --kiss-bg2: ${c.bg2}; --kiss-card: ${c.card};
|
||||
--kiss-line: ${c.line}; --kiss-text: ${c.text}; --kiss-muted: ${c.muted};
|
||||
--kiss-green: ${c.green}; --kiss-red: ${c.red}; --kiss-blue: ${c.blue};
|
||||
--kiss-cyan: ${c.cyan}; --kiss-purple: ${c.purple}; --kiss-orange: ${c.orange};
|
||||
--kiss-yellow: ${c.yellow};
|
||||
}
|
||||
|
||||
/* === Top Bar === */
|
||||
.kiss-topbar {
|
||||
position: fixed; top: 0; left: 0; right: 0; height: 56px; z-index: 1000;
|
||||
background: linear-gradient(90deg, #0d1321 0%, ${c.bg} 100%);
|
||||
border-bottom: 1px solid ${c.line};
|
||||
display: flex; align-items: center; padding: 0 16px; gap: 12px;
|
||||
}
|
||||
.kiss-topbar-menu {
|
||||
width: 40px; height: 40px; border: none; background: transparent;
|
||||
color: ${c.text}; font-size: 24px; cursor: pointer; border-radius: 8px;
|
||||
display: flex; align-items: center; justify-content: center;
|
||||
}
|
||||
.kiss-topbar-menu:hover { background: rgba(255,255,255,0.1); }
|
||||
.kiss-topbar-logo {
|
||||
font-weight: 900; font-size: 20px; display: flex; align-items: center; gap: 2px;
|
||||
}
|
||||
.kiss-topbar-logo .g { color: ${c.green}; }
|
||||
.kiss-topbar-logo .r { color: ${c.red}; font-size: 12px; vertical-align: super; }
|
||||
.kiss-topbar-logo .b { color: ${c.blue}; }
|
||||
.kiss-topbar-logo .o { color: #546e7a; }
|
||||
.kiss-topbar-breadcrumb {
|
||||
flex: 1; font-size: 13px; color: ${c.muted}; overflow: hidden;
|
||||
text-overflow: ellipsis; white-space: nowrap;
|
||||
}
|
||||
.kiss-topbar-breadcrumb a { color: ${c.cyan}; text-decoration: none; }
|
||||
.kiss-topbar-actions { display: flex; gap: 8px; align-items: center; }
|
||||
.kiss-topbar-btn {
|
||||
padding: 8px 14px; border-radius: 6px; font-size: 12px; font-weight: 600;
|
||||
border: 1px solid ${c.line}; background: ${c.bg2}; color: ${c.text};
|
||||
cursor: pointer; display: flex; align-items: center; gap: 6px;
|
||||
text-decoration: none;
|
||||
}
|
||||
.kiss-topbar-btn:hover { border-color: ${c.green}; background: rgba(0,200,83,0.1); }
|
||||
.kiss-topbar-btn.logout { border-color: ${c.red}; color: ${c.red}; }
|
||||
.kiss-topbar-btn.logout:hover { background: rgba(255,23,68,0.1); }
|
||||
|
||||
/* === Sidebar === */
|
||||
.kiss-sidebar {
|
||||
position: fixed; left: 0; top: 56px; bottom: 0; width: 220px;
|
||||
background: linear-gradient(180deg, #0d1321 0%, ${c.bg} 100%);
|
||||
border-right: 1px solid ${c.line}; z-index: 999;
|
||||
overflow-y: auto; overflow-x: hidden;
|
||||
transition: transform 0.3s ease;
|
||||
}
|
||||
.kiss-sidebar::-webkit-scrollbar { width: 4px; }
|
||||
.kiss-sidebar::-webkit-scrollbar-thumb { background: ${c.line}; border-radius: 2px; }
|
||||
.kiss-nav { padding: 8px 0; }
|
||||
.kiss-nav-section {
|
||||
padding: 10px 16px 8px; font-size: 11px; letter-spacing: 0.5px;
|
||||
text-transform: uppercase; color: ${c.muted}; font-weight: 600;
|
||||
cursor: pointer; display: flex; align-items: center; gap: 8px;
|
||||
transition: all 0.2s; border-radius: 6px; margin: 2px 8px;
|
||||
}
|
||||
.kiss-nav-section:hover { background: rgba(255,255,255,0.05); color: ${c.text}; }
|
||||
.kiss-nav-section-icon { font-size: 14px; }
|
||||
.kiss-nav-section-arrow { margin-left: auto; font-size: 10px; transition: transform 0.2s; }
|
||||
.kiss-nav-section.collapsed .kiss-nav-section-arrow { transform: rotate(-90deg); }
|
||||
.kiss-nav-section.collapsed + .kiss-nav-items { display: none; }
|
||||
.kiss-nav-items { overflow: hidden; transition: all 0.2s; }
|
||||
.kiss-nav-item {
|
||||
display: flex; align-items: center; gap: 10px; padding: 8px 16px 8px 32px;
|
||||
text-decoration: none; font-size: 12px; color: ${c.muted};
|
||||
transition: all 0.2s; border-left: 3px solid transparent; margin: 1px 0;
|
||||
}
|
||||
.kiss-nav-item:hover { background: rgba(255,255,255,0.05); color: ${c.text}; }
|
||||
.kiss-nav-item.active {
|
||||
color: ${c.green}; background: rgba(0,200,83,0.08);
|
||||
border-left-color: ${c.green};
|
||||
}
|
||||
.kiss-nav-item.has-tabs { padding-right: 8px; }
|
||||
.kiss-nav-item .tab-arrow { margin-left: auto; font-size: 9px; opacity: 0.5; transition: transform 0.2s; }
|
||||
.kiss-nav-item.expanded .tab-arrow { transform: rotate(90deg); }
|
||||
.kiss-nav-icon { font-size: 14px; width: 20px; text-align: center; flex-shrink: 0; }
|
||||
|
||||
/* === Sub-tabs (nested under active items) === */
|
||||
.kiss-nav-tabs {
|
||||
overflow: hidden; max-height: 0; transition: max-height 0.3s ease;
|
||||
background: rgba(0,0,0,0.15);
|
||||
}
|
||||
.kiss-nav-tabs.expanded { max-height: 500px; }
|
||||
.kiss-nav-tab {
|
||||
display: flex; align-items: center; gap: 6px; padding: 6px 16px 6px 48px;
|
||||
text-decoration: none; font-size: 11px; color: ${c.muted};
|
||||
transition: all 0.15s; border-left: 2px solid transparent;
|
||||
position: relative;
|
||||
}
|
||||
.kiss-nav-tab::before {
|
||||
content: ''; position: absolute; left: 36px; top: 50%;
|
||||
width: 4px; height: 4px; border-radius: 50%;
|
||||
background: ${c.line}; transform: translateY(-50%);
|
||||
}
|
||||
.kiss-nav-tab:hover { background: rgba(255,255,255,0.03); color: ${c.text}; }
|
||||
.kiss-nav-tab:hover::before { background: ${c.muted}; }
|
||||
.kiss-nav-tab.active {
|
||||
color: ${c.cyan}; background: rgba(34,211,238,0.05);
|
||||
border-left-color: ${c.cyan};
|
||||
}
|
||||
.kiss-nav-tab.active::before { background: ${c.cyan}; }
|
||||
|
||||
/* === Main Content === */
|
||||
.kiss-main {
|
||||
margin-left: 220px; margin-top: 56px; padding: 20px;
|
||||
min-height: calc(100vh - 56px); background: ${c.bg};
|
||||
width: calc(100% - 220px); max-width: none;
|
||||
}
|
||||
.kiss-main > * { max-width: 100%; }
|
||||
|
||||
/* === View Tabs (internal navigation) === */
|
||||
.kiss-tabs {
|
||||
display: flex; gap: 4px; margin-bottom: 20px; padding-bottom: 12px;
|
||||
border-bottom: 1px solid ${c.line}; flex-wrap: wrap;
|
||||
}
|
||||
.kiss-tab {
|
||||
padding: 8px 16px; font-size: 13px; color: ${c.muted};
|
||||
text-decoration: none; border-radius: 6px; transition: all 0.2s;
|
||||
border: 1px solid transparent;
|
||||
}
|
||||
.kiss-tab:hover { color: ${c.text}; background: rgba(255,255,255,0.05); }
|
||||
.kiss-tab.active {
|
||||
color: ${c.green}; background: rgba(0,200,83,0.1);
|
||||
border-color: rgba(0,200,83,0.3);
|
||||
}
|
||||
|
||||
/* === Overlay for mobile === */
|
||||
.kiss-overlay {
|
||||
position: fixed; top: 56px; left: 0; right: 0; bottom: 0;
|
||||
background: rgba(0,0,0,0.6); z-index: 998; display: none;
|
||||
}
|
||||
.kiss-overlay.active { display: block; }
|
||||
|
||||
/* === Full Width Overrides === */
|
||||
html, body { margin: 0; padding: 0; width: 100%; min-height: 100vh; background: ${c.bg}; }
|
||||
body.kiss-mode { overflow-x: hidden; }
|
||||
body.kiss-mode #maincontent,
|
||||
body.kiss-mode .main-right,
|
||||
body.kiss-mode .main {
|
||||
margin: 0 !important; padding: 0 !important;
|
||||
width: 100% !important; max-width: 100% !important;
|
||||
background: ${c.bg} !important;
|
||||
}
|
||||
body.kiss-mode .container,
|
||||
body.kiss-mode .cbi-map,
|
||||
body.kiss-mode #cbi-network,
|
||||
body.kiss-mode .cbi-section { max-width: 100% !important; width: 100% !important; }
|
||||
|
||||
/* === Cards === */
|
||||
.kiss-root {
|
||||
background: ${c.bg}; color: ${c.text}; font-family: 'Segoe UI', sans-serif;
|
||||
width: 100%; min-height: 100vh; position: relative;
|
||||
}
|
||||
.kiss-root * { box-sizing: border-box; }
|
||||
.kiss-card {
|
||||
background: ${c.card}; border: 1px solid ${c.line};
|
||||
border-radius: 12px; padding: 20px; margin-bottom: 16px;
|
||||
}
|
||||
.kiss-card:hover { border-color: rgba(0,200,83,0.2); }
|
||||
.kiss-card-title {
|
||||
font-weight: 700; font-size: 16px; margin-bottom: 12px;
|
||||
display: flex; align-items: center; gap: 8px;
|
||||
}
|
||||
|
||||
/* === Grid === */
|
||||
.kiss-grid { display: grid; gap: 16px; }
|
||||
.kiss-grid-2 { grid-template-columns: repeat(2, 1fr); }
|
||||
.kiss-grid-3 { grid-template-columns: repeat(3, 1fr); }
|
||||
.kiss-grid-4 { grid-template-columns: repeat(4, 1fr); }
|
||||
|
||||
/* === Stats === */
|
||||
.kiss-stat {
|
||||
background: ${c.card}; border: 1px solid ${c.line};
|
||||
border-radius: 10px; padding: 16px; text-align: center;
|
||||
}
|
||||
.kiss-stat-value { font-family: monospace; font-weight: 700; font-size: 28px; color: ${c.green}; }
|
||||
.kiss-stat-label { font-size: 11px; color: ${c.muted}; text-transform: uppercase; margin-top: 4px; }
|
||||
|
||||
/* === Buttons === */
|
||||
.kiss-btn {
|
||||
padding: 10px 18px; border-radius: 8px; font-size: 13px; font-weight: 600;
|
||||
cursor: pointer; border: 1px solid ${c.line}; background: ${c.bg2};
|
||||
color: ${c.text}; display: inline-flex; align-items: center; gap: 6px;
|
||||
}
|
||||
.kiss-btn:hover { border-color: rgba(0,200,83,0.3); background: rgba(0,200,83,0.05); }
|
||||
.kiss-btn-green { border-color: ${c.green}; color: ${c.green}; }
|
||||
.kiss-btn-red { border-color: ${c.red}; color: ${c.red}; }
|
||||
.kiss-btn-blue { border-color: ${c.blue}; color: ${c.blue}; }
|
||||
|
||||
/* === Badges === */
|
||||
.kiss-badge {
|
||||
font-family: monospace; font-size: 10px; letter-spacing: 1px;
|
||||
padding: 4px 10px; border-radius: 4px; display: inline-block;
|
||||
}
|
||||
.kiss-badge-green { color: ${c.green}; background: rgba(0,200,83,0.1); border: 1px solid rgba(0,200,83,0.25); }
|
||||
.kiss-badge-red { color: ${c.red}; background: rgba(255,23,68,0.1); border: 1px solid rgba(255,23,68,0.25); }
|
||||
.kiss-badge-blue { color: ${c.blue}; background: rgba(41,121,255,0.1); border: 1px solid rgba(41,121,255,0.25); }
|
||||
.kiss-badge-yellow { color: ${c.yellow}; background: rgba(251,191,36,0.1); border: 1px solid rgba(251,191,36,0.25); }
|
||||
|
||||
/* === Tables === */
|
||||
.kiss-table { width: 100%; border-collapse: separate; border-spacing: 0; }
|
||||
.kiss-table th {
|
||||
text-align: left; padding: 10px 16px; font-size: 11px;
|
||||
text-transform: uppercase; color: ${c.muted}; border-bottom: 1px solid ${c.line};
|
||||
}
|
||||
.kiss-table td { padding: 10px 16px; font-size: 14px; border-bottom: 1px solid rgba(255,255,255,0.03); }
|
||||
.kiss-table tr:hover td { background: rgba(255,255,255,0.02); }
|
||||
|
||||
/* === Progress === */
|
||||
.kiss-progress { height: 8px; background: rgba(255,255,255,0.06); border-radius: 4px; overflow: hidden; }
|
||||
.kiss-progress-fill { height: 100%; border-radius: 4px; background: linear-gradient(90deg, ${c.green}, ${c.cyan}); }
|
||||
|
||||
/* === Panels === */
|
||||
.kiss-panel-green { border-left: 3px solid ${c.green}; }
|
||||
.kiss-panel-red { border-left: 3px solid ${c.red}; }
|
||||
.kiss-panel-blue { border-left: 3px solid ${c.blue}; }
|
||||
|
||||
/* === Toggle Buttons === */
|
||||
.kiss-toggles {
|
||||
position: fixed; bottom: 20px; right: 20px; z-index: 9999;
|
||||
display: flex; flex-direction: column; gap: 8px;
|
||||
}
|
||||
.kiss-toggle-btn {
|
||||
font-size: 20px; cursor: pointer; opacity: 0.7;
|
||||
background: ${c.card}; border: 1px solid ${c.line};
|
||||
border-radius: 50%; width: 44px; height: 44px;
|
||||
display: flex; align-items: center; justify-content: center;
|
||||
box-shadow: 0 4px 12px rgba(0,0,0,0.3); transition: all 0.2s;
|
||||
}
|
||||
.kiss-toggle-btn:hover { opacity: 1; transform: scale(1.1); border-color: ${c.green}; }
|
||||
.kiss-toggle-btn.active { border-color: ${c.green}; background: rgba(0,200,83,0.15); }
|
||||
|
||||
/* === Minimized mode === */
|
||||
.kiss-chrome-hidden .kiss-topbar,
|
||||
.kiss-chrome-hidden .kiss-sidebar,
|
||||
.kiss-chrome-hidden .kiss-overlay { display: none !important; }
|
||||
.kiss-chrome-hidden .kiss-main {
|
||||
margin-left: 0 !important; margin-top: 0 !important;
|
||||
width: 100% !important; padding: 16px !important;
|
||||
}
|
||||
|
||||
/* === Responsive === */
|
||||
@media (max-width: 1024px) {
|
||||
.kiss-sidebar { transform: translateX(-100%); }
|
||||
.kiss-sidebar.open { transform: translateX(0); }
|
||||
.kiss-main { margin-left: 0; width: 100%; }
|
||||
.kiss-grid-3, .kiss-grid-4 { grid-template-columns: repeat(2, 1fr); }
|
||||
}
|
||||
@media (max-width: 768px) {
|
||||
.kiss-grid-2 { grid-template-columns: 1fr; }
|
||||
.kiss-topbar-breadcrumb { display: none; }
|
||||
.kiss-stat-value { font-size: 22px; }
|
||||
.kiss-main { padding: 12px; width: 100%; }
|
||||
.kiss-card { padding: 14px; }
|
||||
.kiss-table { font-size: 12px; }
|
||||
.kiss-table th, .kiss-table td { padding: 8px 10px; }
|
||||
}
|
||||
@media (max-width: 480px) {
|
||||
.kiss-topbar-logo span:not(.g) { display: none; }
|
||||
.kiss-topbar-btn span { display: none; }
|
||||
.kiss-tabs { gap: 2px; }
|
||||
.kiss-tab { padding: 6px 10px; font-size: 12px; }
|
||||
.kiss-main { padding: 8px; }
|
||||
.kiss-stat { padding: 10px; }
|
||||
.kiss-stat-value { font-size: 18px; }
|
||||
}
|
||||
`;
|
||||
},
|
||||
|
||||
// Apply theme
|
||||
apply: function(options) {
|
||||
options = options || {};
|
||||
if (!document.querySelector('#kiss-theme-css')) {
|
||||
var style = document.createElement('style');
|
||||
style.id = 'kiss-theme-css';
|
||||
style.textContent = this.generateCSS();
|
||||
document.head.appendChild(style);
|
||||
}
|
||||
this.addToggle();
|
||||
if (options.hideChrome !== false) {
|
||||
this.hideChrome();
|
||||
}
|
||||
},
|
||||
|
||||
chromeVisible: true,
|
||||
|
||||
addToggle: function() {
|
||||
var self = this;
|
||||
if (document.querySelector('.kiss-toggles')) return;
|
||||
|
||||
var container = document.createElement('div');
|
||||
container.className = 'kiss-toggles';
|
||||
|
||||
// Toggle KISS chrome (sidebar/topbar)
|
||||
var chromeToggle = document.createElement('div');
|
||||
chromeToggle.className = 'kiss-toggle-btn active';
|
||||
chromeToggle.innerHTML = '📐';
|
||||
chromeToggle.title = 'Toggle sidebar & top bar';
|
||||
chromeToggle.onclick = function() { self.toggleChrome(); };
|
||||
|
||||
// Toggle LuCI mode
|
||||
var modeToggle = document.createElement('div');
|
||||
modeToggle.id = 'kiss-mode-toggle';
|
||||
modeToggle.className = 'kiss-toggle-btn';
|
||||
modeToggle.innerHTML = '👁️';
|
||||
modeToggle.title = 'Switch to LuCI mode';
|
||||
modeToggle.onclick = function() { self.toggleMode(); };
|
||||
|
||||
container.appendChild(chromeToggle);
|
||||
container.appendChild(modeToggle);
|
||||
document.body.appendChild(container);
|
||||
},
|
||||
|
||||
toggleChrome: function() {
|
||||
this.chromeVisible = !this.chromeVisible;
|
||||
var btn = document.querySelector('.kiss-toggles .kiss-toggle-btn');
|
||||
var root = document.querySelector('.kiss-root');
|
||||
|
||||
if (this.chromeVisible) {
|
||||
btn.classList.add('active');
|
||||
btn.innerHTML = '📐';
|
||||
if (root) root.classList.remove('kiss-chrome-hidden');
|
||||
} else {
|
||||
btn.classList.remove('active');
|
||||
btn.innerHTML = '📏';
|
||||
if (root) root.classList.add('kiss-chrome-hidden');
|
||||
}
|
||||
},
|
||||
|
||||
toggleMode: function() {
|
||||
this.isKissMode = !this.isKissMode;
|
||||
var toggle = document.getElementById('kiss-mode-toggle');
|
||||
if (this.isKissMode) {
|
||||
toggle.innerHTML = '👁️';
|
||||
toggle.title = 'Switch to LuCI mode';
|
||||
this.hideChrome();
|
||||
} else {
|
||||
toggle.innerHTML = '👁️🗨️';
|
||||
toggle.title = 'Switch to KISS mode';
|
||||
this.showChrome();
|
||||
}
|
||||
},
|
||||
|
||||
showChrome: function() {
|
||||
['#mainmenu', '.main-left', 'header', 'nav', 'aside', 'footer', '#topmenu', '#tabmenu', '.pull-right'].forEach(function(s) {
|
||||
var el = document.querySelector(s);
|
||||
if (el) el.style.display = '';
|
||||
});
|
||||
var main = document.querySelector('.main-right') || document.querySelector('#maincontent');
|
||||
if (main) { main.style.marginLeft = ''; main.style.marginTop = ''; main.style.width = ''; }
|
||||
// Hide KISS elements
|
||||
var kissEl = document.querySelectorAll('.kiss-topbar, .kiss-sidebar, .kiss-overlay');
|
||||
kissEl.forEach(function(el) { el.style.display = 'none'; });
|
||||
},
|
||||
|
||||
hideChrome: function() {
|
||||
document.body.classList.add('kiss-mode');
|
||||
// Hide LuCI chrome but KEEP #tabmenu for view tabs
|
||||
['#mainmenu', '.main-left', 'header', 'nav[role="navigation"]', 'aside', 'footer', '#topmenu', '.pull-right'].forEach(function(s) {
|
||||
var el = document.querySelector(s);
|
||||
if (el) el.style.display = 'none';
|
||||
});
|
||||
var main = document.querySelector('.main-right') || document.querySelector('#maincontent');
|
||||
if (main) { main.style.marginLeft = '0'; main.style.marginTop = '0'; main.style.width = '100%'; }
|
||||
// Show KISS elements
|
||||
var kissEl = document.querySelectorAll('.kiss-topbar, .kiss-sidebar, .kiss-overlay');
|
||||
kissEl.forEach(function(el) { el.style.display = ''; });
|
||||
},
|
||||
|
||||
toggleSidebar: function() {
|
||||
this.sidebarOpen = !this.sidebarOpen;
|
||||
var sidebar = document.querySelector('.kiss-sidebar');
|
||||
var overlay = document.querySelector('.kiss-overlay');
|
||||
if (sidebar) sidebar.classList.toggle('open', this.sidebarOpen);
|
||||
if (overlay) overlay.classList.toggle('active', this.sidebarOpen);
|
||||
},
|
||||
|
||||
closeSidebar: function() {
|
||||
this.sidebarOpen = false;
|
||||
var sidebar = document.querySelector('.kiss-sidebar');
|
||||
var overlay = document.querySelector('.kiss-overlay');
|
||||
if (sidebar) sidebar.classList.remove('open');
|
||||
if (overlay) overlay.classList.remove('active');
|
||||
},
|
||||
|
||||
E: function(tag, attrs, children) {
|
||||
var el = document.createElement(tag);
|
||||
if (attrs) {
|
||||
for (var k in attrs) {
|
||||
if (k === 'class') el.className = attrs[k];
|
||||
else if (k.startsWith('on') && typeof attrs[k] === 'function')
|
||||
el.addEventListener(k.slice(2).toLowerCase(), attrs[k]);
|
||||
else el.setAttribute(k, attrs[k]);
|
||||
}
|
||||
}
|
||||
if (children) {
|
||||
(Array.isArray(children) ? children : [children]).forEach(function(c) {
|
||||
if (c == null) return;
|
||||
el.appendChild(typeof c === 'string' ? document.createTextNode(c) : c);
|
||||
});
|
||||
}
|
||||
return el;
|
||||
},
|
||||
|
||||
card: function(title, content) {
|
||||
return this.E('div', { 'class': 'kiss-card' }, [
|
||||
title ? this.E('div', { 'class': 'kiss-card-title' }, title) : null,
|
||||
this.E('div', {}, content)
|
||||
]);
|
||||
},
|
||||
|
||||
stat: function(value, label, color) {
|
||||
return this.E('div', { 'class': 'kiss-stat' }, [
|
||||
this.E('div', { 'class': 'kiss-stat-value', 'style': color ? 'color:' + color : '' }, String(value)),
|
||||
this.E('div', { 'class': 'kiss-stat-label' }, label)
|
||||
]);
|
||||
},
|
||||
|
||||
badge: function(text, type) {
|
||||
return this.E('span', { 'class': 'kiss-badge kiss-badge-' + (type || 'green') }, text);
|
||||
},
|
||||
|
||||
btn: function(label, onClick, type) {
|
||||
return this.E('button', { 'class': 'kiss-btn' + (type ? ' kiss-btn-' + type : ''), 'onClick': onClick }, label);
|
||||
},
|
||||
|
||||
// Render top bar
|
||||
renderTopbar: function() {
|
||||
var self = this;
|
||||
var path = window.location.pathname.replace('/cgi-bin/luci/', '').split('/');
|
||||
var breadcrumb = path.map(function(p, i) {
|
||||
var href = '/cgi-bin/luci/' + path.slice(0, i + 1).join('/');
|
||||
return self.E('a', { 'href': href }, p);
|
||||
});
|
||||
|
||||
return this.E('header', { 'class': 'kiss-topbar' }, [
|
||||
this.E('button', { 'class': 'kiss-topbar-menu', 'onClick': function() { self.toggleSidebar(); } }, '☰'),
|
||||
this.E('div', { 'class': 'kiss-topbar-logo' }, [
|
||||
this.E('span', { 'class': 'g' }, 'C'),
|
||||
this.E('span', { 'class': 'r' }, '3'),
|
||||
this.E('span', { 'class': 'b' }, 'B'),
|
||||
this.E('span', { 'class': 'o' }, 'O'),
|
||||
this.E('span', { 'class': 'g' }, 'X')
|
||||
]),
|
||||
this.E('div', { 'class': 'kiss-topbar-breadcrumb' }, breadcrumb),
|
||||
this.E('div', { 'class': 'kiss-topbar-actions' }, [
|
||||
this.E('a', { 'class': 'kiss-topbar-btn', 'href': '/cgi-bin/luci/admin/system' }, [
|
||||
'⚙️', this.E('span', {}, 'Settings')
|
||||
]),
|
||||
this.E('a', { 'class': 'kiss-topbar-btn logout', 'href': '/cgi-bin/luci/admin/logout' }, [
|
||||
'🚪', this.E('span', {}, 'Logout')
|
||||
])
|
||||
])
|
||||
]);
|
||||
},
|
||||
|
||||
// Toggle category collapsed state
|
||||
toggleCategory: function(catName) {
|
||||
this.collapsedState[catName] = !this.collapsedState[catName];
|
||||
var section = document.querySelector('.kiss-nav-section[data-cat="' + catName + '"]');
|
||||
if (section) {
|
||||
section.classList.toggle('collapsed', this.collapsedState[catName]);
|
||||
}
|
||||
},
|
||||
|
||||
// Render sidebar
|
||||
renderSidebar: function(activePath) {
|
||||
var self = this;
|
||||
var currentPath = activePath || window.location.pathname.replace('/cgi-bin/luci/', '');
|
||||
var navItems = [];
|
||||
|
||||
// Initialize collapsed state from nav config
|
||||
this.nav.forEach(function(cat) {
|
||||
if (self.collapsedState[cat.cat] === undefined) {
|
||||
// Auto-expand if current path is in this category
|
||||
var hasActive = cat.items.some(function(item) {
|
||||
if (item.path && currentPath.indexOf(item.path) !== -1) return true;
|
||||
if (item.tabs) {
|
||||
return item.tabs.some(function(tab) {
|
||||
return currentPath === tab.path || currentPath.indexOf(tab.path) !== -1;
|
||||
});
|
||||
}
|
||||
return false;
|
||||
});
|
||||
self.collapsedState[cat.cat] = hasActive ? false : (cat.collapsed || false);
|
||||
}
|
||||
});
|
||||
|
||||
this.nav.forEach(function(cat) {
|
||||
var isCollapsed = self.collapsedState[cat.cat];
|
||||
|
||||
// Section header (clickable to expand/collapse)
|
||||
navItems.push(self.E('div', {
|
||||
'class': 'kiss-nav-section' + (isCollapsed ? ' collapsed' : ''),
|
||||
'data-cat': cat.cat,
|
||||
'onClick': function(e) {
|
||||
e.preventDefault();
|
||||
self.toggleCategory(cat.cat);
|
||||
}
|
||||
}, [
|
||||
self.E('span', { 'class': 'kiss-nav-section-icon' }, cat.icon || '📁'),
|
||||
self.E('span', {}, cat.cat),
|
||||
self.E('span', { 'class': 'kiss-nav-section-arrow' }, '▼')
|
||||
]));
|
||||
|
||||
// Items container with sub-tabs
|
||||
var itemElements = [];
|
||||
cat.items.forEach(function(item) {
|
||||
var isExternal = !!item.url;
|
||||
var href = isExternal ? item.url : '/cgi-bin/luci/' + item.path;
|
||||
var hasTabs = item.tabs && item.tabs.length > 0;
|
||||
|
||||
// Check if this item or any of its tabs is active
|
||||
var isItemActive = !isExternal && item.path && currentPath.indexOf(item.path) !== -1;
|
||||
var isTabActive = hasTabs && item.tabs.some(function(tab) {
|
||||
return currentPath === tab.path || currentPath.indexOf(tab.path) !== -1;
|
||||
});
|
||||
var isActive = isItemActive || isTabActive;
|
||||
|
||||
// Main nav item
|
||||
itemElements.push(self.E('a', {
|
||||
'href': href,
|
||||
'class': 'kiss-nav-item' + (isActive ? ' active' : '') + (isExternal ? ' external' : '') + (hasTabs ? ' has-tabs' : '') + (isActive && hasTabs ? ' expanded' : ''),
|
||||
'target': isExternal ? '_blank' : '',
|
||||
'onClick': function() { self.closeSidebar(); }
|
||||
}, [
|
||||
self.E('span', { 'class': 'kiss-nav-icon' }, item.icon),
|
||||
self.E('span', {}, item.name),
|
||||
isExternal ? self.E('span', { 'style': 'margin-left:auto;font-size:10px;opacity:0.5;' }, '↗') : null,
|
||||
hasTabs ? self.E('span', { 'class': 'tab-arrow' }, '▶') : null
|
||||
]));
|
||||
|
||||
// Sub-tabs (only rendered if item has tabs)
|
||||
if (hasTabs) {
|
||||
var tabsContainer = self.E('div', {
|
||||
'class': 'kiss-nav-tabs' + (isActive ? ' expanded' : '')
|
||||
}, item.tabs.map(function(tab) {
|
||||
var tabActive = currentPath === tab.path || currentPath.indexOf(tab.path) !== -1;
|
||||
return self.E('a', {
|
||||
'href': '/cgi-bin/luci/' + tab.path,
|
||||
'class': 'kiss-nav-tab' + (tabActive ? ' active' : ''),
|
||||
'onClick': function() { self.closeSidebar(); }
|
||||
}, tab.name);
|
||||
}));
|
||||
itemElements.push(tabsContainer);
|
||||
}
|
||||
});
|
||||
|
||||
var itemsContainer = self.E('div', { 'class': 'kiss-nav-items' }, itemElements);
|
||||
navItems.push(itemsContainer);
|
||||
});
|
||||
|
||||
return this.E('nav', { 'class': 'kiss-sidebar' }, [
|
||||
this.E('div', { 'class': 'kiss-nav' }, navItems)
|
||||
]);
|
||||
},
|
||||
|
||||
// Render overlay for mobile
|
||||
renderOverlay: function() {
|
||||
var self = this;
|
||||
return this.E('div', { 'class': 'kiss-overlay', 'onClick': function() { self.closeSidebar(); } });
|
||||
},
|
||||
|
||||
// Wrap content with theme
|
||||
wrap: function(content, activePath) {
|
||||
this.apply();
|
||||
return this.E('div', { 'class': 'kiss-root' }, [
|
||||
this.renderTopbar(),
|
||||
this.renderSidebar(activePath),
|
||||
this.renderOverlay(),
|
||||
this.E('div', { 'class': 'kiss-main' }, Array.isArray(content) ? content : [content])
|
||||
]);
|
||||
}
|
||||
});
|
||||
|
||||
var KissTheme = new KissThemeClass();
|
||||
window.KissTheme = KissTheme;
|
||||
|
||||
return KissThemeClass;
|
||||
@ -11,7 +11,7 @@ Description: Unified AI security insights dashboard for SecuBox.
|
||||
DNS Guard, Network Anomaly, CVE Triage, and LocalRecall.
|
||||
Provides security posture scoring and AI-powered analysis.
|
||||
Filename: luci-app-ai-insights_1.0.0-r1_all.ipk
|
||||
Size: 11637
|
||||
Size: 11638
|
||||
|
||||
Package: luci-app-auth-guardian
|
||||
Version: 0.4.0-r3
|
||||
@ -23,7 +23,7 @@ Architecture: all
|
||||
Installed-Size: 71680
|
||||
Description: Comprehensive authentication and session management with captive portal, OAuth2/OIDC integration, voucher system, and time-based access control
|
||||
Filename: luci-app-auth-guardian_0.4.0-r3_all.ipk
|
||||
Size: 12396
|
||||
Size: 12394
|
||||
|
||||
Package: luci-app-backup
|
||||
Version: 1.0.0-r1
|
||||
@ -35,7 +35,7 @@ Architecture: all
|
||||
Installed-Size: 30720
|
||||
Description: LuCI Backup Manager
|
||||
Filename: luci-app-backup_1.0.0-r1_all.ipk
|
||||
Size: 4532
|
||||
Size: 4527
|
||||
|
||||
Package: luci-app-bandwidth-manager
|
||||
Version: 0.5.0-r2
|
||||
@ -59,7 +59,7 @@ Architecture: all
|
||||
Installed-Size: 122880
|
||||
Description: Dashboard for managing local CDN caching proxy on OpenWrt
|
||||
Filename: luci-app-cdn-cache_0.5.0-r3_all.ipk
|
||||
Size: 24254
|
||||
Size: 24256
|
||||
|
||||
Package: luci-app-client-guardian
|
||||
Version: 0.4.0-r7
|
||||
@ -71,7 +71,7 @@ Architecture: all
|
||||
Installed-Size: 276480
|
||||
Description: Network Access Control with client monitoring, zone management, captive portal, parental controls, and SMS/email alerts
|
||||
Filename: luci-app-client-guardian_0.4.0-r7_all.ipk
|
||||
Size: 52684
|
||||
Size: 52689
|
||||
|
||||
Package: luci-app-cloner
|
||||
Version: 1.0.0-r1
|
||||
@ -82,7 +82,7 @@ Architecture: all
|
||||
Installed-Size: 102400
|
||||
Description: SecuBox cloning station for building and deploying clone images
|
||||
Filename: luci-app-cloner_1.0.0-r1_all.ipk
|
||||
Size: 19433
|
||||
Size: 19435
|
||||
|
||||
Package: luci-app-config-advisor
|
||||
Version: 1.0.0-r1
|
||||
@ -94,7 +94,7 @@ Architecture: all
|
||||
Installed-Size: 51200
|
||||
Description: ANSSI CSPN compliance checking and security configuration advisor
|
||||
Filename: luci-app-config-advisor_1.0.0-r1_all.ipk
|
||||
Size: 8858
|
||||
Size: 8857
|
||||
|
||||
Package: luci-app-cookie-tracker
|
||||
Version: 1.0.0-r1
|
||||
@ -105,7 +105,7 @@ Architecture: all
|
||||
Installed-Size: 30720
|
||||
Description: LuCI Cookie Tracker Dashboard
|
||||
Filename: luci-app-cookie-tracker_1.0.0-r1_all.ipk
|
||||
Size: 5663
|
||||
Size: 5655
|
||||
|
||||
Package: luci-app-crowdsec-dashboard
|
||||
Version: 0.8.0-r1
|
||||
@ -117,7 +117,7 @@ Architecture: all
|
||||
Installed-Size: 225280
|
||||
Description: Real-time security monitoring dashboard for CrowdSec on OpenWrt
|
||||
Filename: luci-app-crowdsec-dashboard_0.8.0-r1_all.ipk
|
||||
Size: 43019
|
||||
Size: 43023
|
||||
|
||||
Package: luci-app-cve-triage
|
||||
Version: 1.0.0-r1
|
||||
@ -129,7 +129,7 @@ Architecture: all
|
||||
Installed-Size: 30720
|
||||
Description: LuCI CVE Triage Dashboard
|
||||
Filename: luci-app-cve-triage_1.0.0-r1_all.ipk
|
||||
Size: 5950
|
||||
Size: 5945
|
||||
|
||||
Package: luci-app-cyberfeed
|
||||
Version: 0.1.1-r1
|
||||
@ -172,7 +172,7 @@ Description: SecuBox DNS Guard provides privacy-focused DNS management with AI-
|
||||
- Real-time alerts and blocklist management
|
||||
- Domain analysis with LocalAI integration
|
||||
Filename: luci-app-dnsguard_1.1.0-r1_all.ipk
|
||||
Size: 12444
|
||||
Size: 12449
|
||||
|
||||
Package: luci-app-dns-provider
|
||||
Version: 1.0.0-r1
|
||||
@ -184,7 +184,7 @@ Architecture: all
|
||||
Installed-Size: 40960
|
||||
Description: LuCI DNS Provider Manager
|
||||
Filename: luci-app-dns-provider_1.0.0-r1_all.ipk
|
||||
Size: 7168
|
||||
Size: 7173
|
||||
|
||||
Package: luci-app-domoticz
|
||||
Version: 1.0.0-r1
|
||||
@ -196,7 +196,7 @@ Architecture: all
|
||||
Installed-Size: 40960
|
||||
Description: LuCI Domoticz Home Automation Configuration
|
||||
Filename: luci-app-domoticz_1.0.0-r1_all.ipk
|
||||
Size: 7121
|
||||
Size: 7126
|
||||
|
||||
Package: luci-app-exposure
|
||||
Version: 1.0.0-r3
|
||||
@ -220,7 +220,7 @@ Architecture: all
|
||||
Installed-Size: 92160
|
||||
Description: Modern dashboard for Gitea Platform management on OpenWrt
|
||||
Filename: luci-app-gitea_1.0.0-r2_all.ipk
|
||||
Size: 16621
|
||||
Size: 16625
|
||||
|
||||
Package: luci-app-glances
|
||||
Version: 1.0.0-r2
|
||||
@ -232,7 +232,7 @@ Architecture: all
|
||||
Installed-Size: 51200
|
||||
Description: Modern dashboard for Glances system monitoring with SecuBox theme
|
||||
Filename: luci-app-glances_1.0.0-r2_all.ipk
|
||||
Size: 7022
|
||||
Size: 7023
|
||||
|
||||
Package: luci-app-gotosocial
|
||||
Version: 0.1.0-r1
|
||||
@ -244,7 +244,7 @@ Architecture: all
|
||||
Installed-Size: 51200
|
||||
Description: LuCI app for GoToSocial Fediverse Server
|
||||
Filename: luci-app-gotosocial_0.1.0-r1_all.ipk
|
||||
Size: 8206
|
||||
Size: 8213
|
||||
|
||||
Package: luci-app-haproxy
|
||||
Version: 1.0.0-r8
|
||||
@ -256,7 +256,7 @@ Architecture: all
|
||||
Installed-Size: 225280
|
||||
Description: Web interface for managing HAProxy load balancer with vhosts, SSL certificates, and backend routing
|
||||
Filename: luci-app-haproxy_1.0.0-r8_all.ipk
|
||||
Size: 35339
|
||||
Size: 35341
|
||||
|
||||
Package: luci-app-hexojs
|
||||
Version: 1.0.0-r3
|
||||
@ -268,7 +268,7 @@ Architecture: all
|
||||
Installed-Size: 194560
|
||||
Description: Modern dashboard for Hexo static site generator on OpenWrt
|
||||
Filename: luci-app-hexojs_1.0.0-r3_all.ipk
|
||||
Size: 30447
|
||||
Size: 30451
|
||||
|
||||
Package: luci-app-iot-guard
|
||||
Version: 1.0.0-r1
|
||||
@ -280,7 +280,7 @@ Architecture: all
|
||||
Installed-Size: 61440
|
||||
Description: IoT device isolation and security monitoring interface
|
||||
Filename: luci-app-iot-guard_1.0.0-r1_all.ipk
|
||||
Size: 10532
|
||||
Size: 10535
|
||||
|
||||
Package: luci-app-ipblocklist
|
||||
Version: 1.0.0-r1
|
||||
@ -292,7 +292,7 @@ Architecture: all
|
||||
Installed-Size: 40960
|
||||
Description: SecuBox IP Blocklist - Static threat defense dashboard
|
||||
Filename: luci-app-ipblocklist_1.0.0-r1_all.ipk
|
||||
Size: 6528
|
||||
Size: 6531
|
||||
|
||||
Package: luci-app-jabber
|
||||
Version: 0
|
||||
@ -304,7 +304,7 @@ Architecture: all
|
||||
Installed-Size: 61440
|
||||
Description: LuCI Jabber/XMPP Server (Prosody)
|
||||
Filename: luci-app-jabber_0_all.ipk
|
||||
Size: 9304
|
||||
Size: 9309
|
||||
|
||||
Package: luci-app-jellyfin
|
||||
Version: 1.0.0-r1
|
||||
@ -316,7 +316,7 @@ Architecture: all
|
||||
Installed-Size: 51200
|
||||
Description: LuCI Jellyfin Media Server Configuration
|
||||
Filename: luci-app-jellyfin_1.0.0-r1_all.ipk
|
||||
Size: 10482
|
||||
Size: 10488
|
||||
|
||||
Package: luci-app-jitsi
|
||||
Version: 1.0.0-r1
|
||||
@ -328,7 +328,7 @@ Architecture: all
|
||||
Installed-Size: 30720
|
||||
Description: LuCI Jitsi Meet Configuration
|
||||
Filename: luci-app-jitsi_1.0.0-r1_all.ipk
|
||||
Size: 5176
|
||||
Size: 5179
|
||||
|
||||
Package: luci-app-ksm-manager
|
||||
Version: 0.4.0-r2
|
||||
@ -340,7 +340,7 @@ Architecture: all
|
||||
Installed-Size: 112640
|
||||
Description: Centralized cryptographic key management with hardware security module (HSM) support for Nitrokey and YubiKey devices. Provides secure key storage, certificate management, SSH key handling, and secret storage with audit logging.
|
||||
Filename: luci-app-ksm-manager_0.4.0-r2_all.ipk
|
||||
Size: 18776
|
||||
Size: 18781
|
||||
|
||||
Package: luci-app-localai
|
||||
Version: 0.1.0-r15
|
||||
@ -364,7 +364,7 @@ Architecture: all
|
||||
Installed-Size: 40960
|
||||
Description: LuCI LocalRecall AI Memory Dashboard
|
||||
Filename: luci-app-localrecall_1.0.0-r1_all.ipk
|
||||
Size: 8418
|
||||
Size: 8417
|
||||
|
||||
Package: luci-app-lyrion
|
||||
Version: 1.0.0-r1
|
||||
@ -376,7 +376,7 @@ Architecture: all
|
||||
Installed-Size: 40960
|
||||
Description: LuCI support for Lyrion Music Server
|
||||
Filename: luci-app-lyrion_1.0.0-r1_all.ipk
|
||||
Size: 6834
|
||||
Size: 6836
|
||||
|
||||
Package: luci-app-mac-guardian
|
||||
Version: 0.5.0-r1
|
||||
@ -388,7 +388,7 @@ Architecture: all
|
||||
Installed-Size: 40960
|
||||
Description: LuCI MAC Guardian - WiFi MAC Security Monitor
|
||||
Filename: luci-app-mac-guardian_0.5.0-r1_all.ipk
|
||||
Size: 6657
|
||||
Size: 6666
|
||||
|
||||
Package: luci-app-magicmirror2
|
||||
Version: 0.4.0-r6
|
||||
@ -400,7 +400,7 @@ Architecture: all
|
||||
Installed-Size: 71680
|
||||
Description: Modern dashboard for MagicMirror2 smart display platform with module manager and SecuBox theme
|
||||
Filename: luci-app-magicmirror2_0.4.0-r6_all.ipk
|
||||
Size: 12359
|
||||
Size: 12360
|
||||
|
||||
Package: luci-app-mailinabox
|
||||
Version: 1.0.0-r1
|
||||
@ -412,7 +412,7 @@ Architecture: all
|
||||
Installed-Size: 30720
|
||||
Description: LuCI support for Mail-in-a-Box
|
||||
Filename: luci-app-mailinabox_1.0.0-r1_all.ipk
|
||||
Size: 5486
|
||||
Size: 5484
|
||||
|
||||
Package: luci-app-mailserver
|
||||
Version: 1.0.0-r1
|
||||
@ -424,7 +424,7 @@ Architecture: all
|
||||
Installed-Size: 40960
|
||||
Description: LuCI Mail Server Manager
|
||||
Filename: luci-app-mailserver_1.0.0-r1_all.ipk
|
||||
Size: 6508
|
||||
Size: 6506
|
||||
|
||||
Package: luci-app-master-link
|
||||
Version: 1.0.0-r1
|
||||
@ -448,7 +448,7 @@ Architecture: all
|
||||
Installed-Size: 40960
|
||||
Description: LuCI Matrix Homeserver Dashboard
|
||||
Filename: luci-app-matrix_1.0.0-r1_all.ipk
|
||||
Size: 7523
|
||||
Size: 7524
|
||||
|
||||
Package: luci-app-media-flow
|
||||
Version: 0.6.4-r1
|
||||
@ -472,7 +472,7 @@ Architecture: all
|
||||
Installed-Size: 133120
|
||||
Description: LuCI support for MetaBlogizer Static Site Publisher
|
||||
Filename: luci-app-metablogizer_1.1.0-r1_all.ipk
|
||||
Size: 26205
|
||||
Size: 26207
|
||||
|
||||
Package: luci-app-metabolizer
|
||||
Version: 1.0.0-r2
|
||||
@ -484,7 +484,7 @@ Architecture: all
|
||||
Installed-Size: 30720
|
||||
Description: LuCI support for Metabolizer CMS
|
||||
Filename: luci-app-metabolizer_1.0.0-r2_all.ipk
|
||||
Size: 4822
|
||||
Size: 4820
|
||||
|
||||
Package: luci-app-mitmproxy
|
||||
Version: 0.5.0-r2
|
||||
@ -496,7 +496,7 @@ Architecture: all
|
||||
Installed-Size: 71680
|
||||
Description: Modern dashboard for mitmproxy HTTPS traffic inspection with SecuBox theme
|
||||
Filename: luci-app-mitmproxy_0.5.0-r2_all.ipk
|
||||
Size: 13235
|
||||
Size: 13233
|
||||
|
||||
Package: luci-app-mmpm
|
||||
Version: 0.2.0-r3
|
||||
@ -508,7 +508,7 @@ Architecture: all
|
||||
Installed-Size: 51200
|
||||
Description: Web interface for MMPM - MagicMirror Package Manager
|
||||
Filename: luci-app-mmpm_0.2.0-r3_all.ipk
|
||||
Size: 7970
|
||||
Size: 7972
|
||||
|
||||
Package: luci-app-mqtt-bridge
|
||||
Version: 0.4.0-r4
|
||||
@ -520,7 +520,7 @@ Architecture: all
|
||||
Installed-Size: 122880
|
||||
Description: USB-to-MQTT IoT hub with SecuBox theme
|
||||
Filename: luci-app-mqtt-bridge_0.4.0-r4_all.ipk
|
||||
Size: 22688
|
||||
Size: 22690
|
||||
|
||||
Package: luci-app-ndpid
|
||||
Version: 1.1.2-r2
|
||||
@ -532,7 +532,7 @@ Architecture: all
|
||||
Installed-Size: 122880
|
||||
Description: Modern dashboard for nDPId deep packet inspection on OpenWrt
|
||||
Filename: luci-app-ndpid_1.1.2-r2_all.ipk
|
||||
Size: 21699
|
||||
Size: 21702
|
||||
|
||||
Package: luci-app-netdata-dashboard
|
||||
Version: 0.5.0-r2
|
||||
@ -544,7 +544,7 @@ Architecture: all
|
||||
Installed-Size: 112640
|
||||
Description: Real-time system monitoring dashboard with Netdata integration for OpenWrt
|
||||
Filename: luci-app-netdata-dashboard_0.5.0-r2_all.ipk
|
||||
Size: 20561
|
||||
Size: 20558
|
||||
|
||||
Package: luci-app-network-anomaly
|
||||
Version: 1.0.0-r1
|
||||
@ -556,7 +556,7 @@ Architecture: all
|
||||
Installed-Size: 40960
|
||||
Description: LuCI Network Anomaly Detection Dashboard
|
||||
Filename: luci-app-network-anomaly_1.0.0-r1_all.ipk
|
||||
Size: 7639
|
||||
Size: 7646
|
||||
|
||||
Package: luci-app-network-modes
|
||||
Version: 0.5.0-r3
|
||||
@ -568,7 +568,7 @@ Architecture: all
|
||||
Installed-Size: 286720
|
||||
Description: Configure OpenWrt for different network modes: Sniffer, Access Point, Relay, Router
|
||||
Filename: luci-app-network-modes_0.5.0-r3_all.ipk
|
||||
Size: 54227
|
||||
Size: 54226
|
||||
|
||||
Package: luci-app-network-tweaks
|
||||
Version: 1.0.0-r7
|
||||
@ -580,7 +580,7 @@ Architecture: all
|
||||
Installed-Size: 81920
|
||||
Description: Unified network services dashboard with DNS/hosts sync, CDN cache control, and WPAD auto-proxy configuration
|
||||
Filename: luci-app-network-tweaks_1.0.0-r7_all.ipk
|
||||
Size: 15945
|
||||
Size: 15944
|
||||
|
||||
Package: luci-app-nextcloud
|
||||
Version: 1.0.0-r1
|
||||
@ -592,7 +592,7 @@ Architecture: all
|
||||
Installed-Size: 51200
|
||||
Description: LuCI support for Nextcloud LXC
|
||||
Filename: luci-app-nextcloud_1.0.0-r1_all.ipk
|
||||
Size: 10351
|
||||
Size: 10348
|
||||
|
||||
Package: luci-app-ollama
|
||||
Version: 0.1.0-r1
|
||||
@ -616,7 +616,7 @@ Architecture: all
|
||||
Installed-Size: 30720
|
||||
Description: LuCI PeerTube Video Platform
|
||||
Filename: luci-app-peertube_0_all.ipk
|
||||
Size: 5757
|
||||
Size: 5759
|
||||
|
||||
Package: luci-app-picobrew
|
||||
Version: 1.0.0-r1
|
||||
@ -628,7 +628,7 @@ Architecture: all
|
||||
Installed-Size: 51200
|
||||
Description: Modern dashboard for PicoBrew Server management on OpenWrt
|
||||
Filename: luci-app-picobrew_1.0.0-r1_all.ipk
|
||||
Size: 9535
|
||||
Size: 9531
|
||||
|
||||
Package: luci-app-secubox
|
||||
Version: 0.7.1-r4
|
||||
@ -640,7 +640,7 @@ Architecture: all
|
||||
Installed-Size: 440320
|
||||
Description: Central control hub for all SecuBox modules. Provides unified dashboard, module status, system health monitoring, and quick actions.
|
||||
Filename: luci-app-secubox_0.7.1-r4_all.ipk
|
||||
Size: 82095
|
||||
Size: 82097
|
||||
|
||||
Package: luci-app-secubox-admin
|
||||
Version: 1.0.0-r19
|
||||
@ -651,7 +651,7 @@ Architecture: all
|
||||
Installed-Size: 337920
|
||||
Description: Unified admin control center for SecuBox appstore plugins with system monitoring
|
||||
Filename: luci-app-secubox-admin_1.0.0-r19_all.ipk
|
||||
Size: 58041
|
||||
Size: 58042
|
||||
|
||||
Package: luci-app-secubox-crowdsec
|
||||
Version: 1.0.0-r3
|
||||
@ -663,7 +663,7 @@ Architecture: all
|
||||
Installed-Size: 81920
|
||||
Description: LuCI SecuBox CrowdSec Dashboard
|
||||
Filename: luci-app-secubox-crowdsec_1.0.0-r3_all.ipk
|
||||
Size: 13923
|
||||
Size: 13919
|
||||
|
||||
Package: luci-app-secubox-mirror
|
||||
Version: 0.1.0-r1
|
||||
@ -675,7 +675,7 @@ Architecture: all
|
||||
Installed-Size: 40960
|
||||
Description: LuCI MirrorNet Dashboard
|
||||
Filename: luci-app-secubox-mirror_0.1.0-r1_all.ipk
|
||||
Size: 5847
|
||||
Size: 5848
|
||||
|
||||
Package: luci-app-secubox-netdiag
|
||||
Version: 1.0.0-r1
|
||||
@ -687,7 +687,7 @@ Architecture: all
|
||||
Installed-Size: 81920
|
||||
Description: Real-time DSA switch port statistics, error monitoring, and network health diagnostics
|
||||
Filename: luci-app-secubox-netdiag_1.0.0-r1_all.ipk
|
||||
Size: 15346
|
||||
Size: 15347
|
||||
|
||||
Package: luci-app-secubox-netifyd
|
||||
Version: 1.2.1-r1
|
||||
@ -699,7 +699,7 @@ Architecture: all
|
||||
Installed-Size: 194560
|
||||
Description: Complete LuCI interface for netifyd DPI engine with real-time flow monitoring, application detection, network analytics, and flow action plugins
|
||||
Filename: luci-app-secubox-netifyd_1.2.1-r1_all.ipk
|
||||
Size: 36721
|
||||
Size: 36720
|
||||
|
||||
Package: luci-app-secubox-p2p
|
||||
Version: 0.1.0-r1
|
||||
@ -711,7 +711,7 @@ Architecture: all
|
||||
Installed-Size: 245760
|
||||
Description: LuCI SecuBox P2P Hub
|
||||
Filename: luci-app-secubox-p2p_0.1.0-r1_all.ipk
|
||||
Size: 46833
|
||||
Size: 46831
|
||||
|
||||
Package: luci-app-secubox-portal
|
||||
Version: 0.7.0-r3
|
||||
@ -723,7 +723,7 @@ Architecture: all
|
||||
Installed-Size: 194560
|
||||
Description: Unified entry point for all SecuBox applications with tabbed navigation
|
||||
Filename: luci-app-secubox-portal_0.7.0-r3_all.ipk
|
||||
Size: 41685
|
||||
Size: 41686
|
||||
|
||||
Package: luci-app-secubox-security-threats
|
||||
Version: 1.0.0-r4
|
||||
@ -735,7 +735,7 @@ Architecture: all
|
||||
Installed-Size: 61440
|
||||
Description: Unified dashboard integrating netifyd DPI threats with CrowdSec intelligence for real-time threat monitoring and automated blocking
|
||||
Filename: luci-app-secubox-security-threats_1.0.0-r4_all.ipk
|
||||
Size: 10658
|
||||
Size: 10657
|
||||
|
||||
Package: luci-app-secubox-users
|
||||
Version: 1.0.0-r1
|
||||
@ -746,7 +746,7 @@ Architecture: all
|
||||
Installed-Size: 30720
|
||||
Description: LuCI SecuBox User Management
|
||||
Filename: luci-app-secubox-users_1.0.0-r1_all.ipk
|
||||
Size: 5148
|
||||
Size: 5146
|
||||
|
||||
Package: luci-app-service-registry
|
||||
Version: 1.0.0-r1
|
||||
@ -758,7 +758,7 @@ Architecture: all
|
||||
Installed-Size: 194560
|
||||
Description: Unified service aggregation with HAProxy vhosts, Tor hidden services, and QR-coded landing page
|
||||
Filename: luci-app-service-registry_1.0.0-r1_all.ipk
|
||||
Size: 39954
|
||||
Size: 39953
|
||||
|
||||
Package: luci-app-simplex
|
||||
Version: 1.0.0-r1
|
||||
@ -770,7 +770,7 @@ Architecture: all
|
||||
Installed-Size: 40960
|
||||
Description: LuCI SimpleX Chat Server Configuration
|
||||
Filename: luci-app-simplex_1.0.0-r1_all.ipk
|
||||
Size: 7027
|
||||
Size: 7037
|
||||
|
||||
Package: luci-app-streamlit
|
||||
Version: 1.0.0-r11
|
||||
@ -782,7 +782,7 @@ Architecture: all
|
||||
Installed-Size: 112640
|
||||
Description: Multi-instance Streamlit management with Gitea integration
|
||||
Filename: luci-app-streamlit_1.0.0-r11_all.ipk
|
||||
Size: 20567
|
||||
Size: 20568
|
||||
|
||||
Package: luci-app-system-hub
|
||||
Version: 0.5.2-r2
|
||||
@ -794,7 +794,7 @@ Architecture: all
|
||||
Installed-Size: 327680
|
||||
Description: Central system control with monitoring, services, logs, and backup
|
||||
Filename: luci-app-system-hub_0.5.2-r2_all.ipk
|
||||
Size: 64288
|
||||
Size: 64291
|
||||
|
||||
Package: luci-app-threat-analyst
|
||||
Version: 1.0.0-r1
|
||||
@ -806,7 +806,7 @@ Architecture: all
|
||||
Installed-Size: 51200
|
||||
Description: LuCI Threat Analyst Dashboard
|
||||
Filename: luci-app-threat-analyst_1.0.0-r1_all.ipk
|
||||
Size: 10140
|
||||
Size: 10141
|
||||
|
||||
Package: luci-app-tor
|
||||
Version: 1.0.0-r1
|
||||
@ -818,7 +818,7 @@ Architecture: all
|
||||
Installed-Size: 92160
|
||||
Description: Modern dashboard for Tor anonymization on OpenWrt
|
||||
Filename: luci-app-tor_1.0.0-r1_all.ipk
|
||||
Size: 17816
|
||||
Size: 17818
|
||||
|
||||
Package: luci-app-tor-shield
|
||||
Version: 1.0.0-r10
|
||||
@ -830,7 +830,7 @@ Architecture: all
|
||||
Installed-Size: 122880
|
||||
Description: Modern dashboard for Tor anonymization on OpenWrt
|
||||
Filename: luci-app-tor-shield_1.0.0-r10_all.ipk
|
||||
Size: 22765
|
||||
Size: 22767
|
||||
|
||||
Package: luci-app-traffic-shaper
|
||||
Version: 0.4.0-r2
|
||||
@ -842,7 +842,7 @@ Architecture: all
|
||||
Installed-Size: 81920
|
||||
Description: Advanced traffic shaping with TC/CAKE for precise bandwidth control
|
||||
Filename: luci-app-traffic-shaper_0.4.0-r2_all.ipk
|
||||
Size: 14585
|
||||
Size: 14591
|
||||
|
||||
Package: luci-app-vhost-manager
|
||||
Version: 0.5.0-r5
|
||||
@ -854,7 +854,7 @@ Architecture: all
|
||||
Installed-Size: 153600
|
||||
Description: Nginx reverse proxy manager with Let's Encrypt SSL certificates, authentication, and WebSocket support
|
||||
Filename: luci-app-vhost-manager_0.5.0-r5_all.ipk
|
||||
Size: 26281
|
||||
Size: 26283
|
||||
|
||||
Package: luci-app-voip
|
||||
Version: 1.0.0-r1
|
||||
@ -866,7 +866,7 @@ Architecture: all
|
||||
Installed-Size: 81920
|
||||
Description: LuCI VoIP PBX Management
|
||||
Filename: luci-app-voip_1.0.0-r1_all.ipk
|
||||
Size: 11040
|
||||
Size: 11043
|
||||
|
||||
Package: luci-app-vortex-dns
|
||||
Version: 1.0.0-r1
|
||||
@ -878,7 +878,7 @@ Architecture: all
|
||||
Installed-Size: 40960
|
||||
Description: LuCI Vortex DNS Dashboard
|
||||
Filename: luci-app-vortex-dns_1.0.0-r1_all.ipk
|
||||
Size: 6078
|
||||
Size: 6072
|
||||
|
||||
Package: luci-app-vortex-firewall
|
||||
Version: 1.0.0-r1
|
||||
@ -890,7 +890,7 @@ Architecture: all
|
||||
Installed-Size: 30720
|
||||
Description: LuCI Vortex DNS Firewall Dashboard
|
||||
Filename: luci-app-vortex-firewall_1.0.0-r1_all.ipk
|
||||
Size: 5453
|
||||
Size: 5455
|
||||
|
||||
Package: luci-app-wazuh
|
||||
Version: 1.0.0-r1
|
||||
@ -901,7 +901,7 @@ Architecture: all
|
||||
Installed-Size: 71680
|
||||
Description: Unified security monitoring dashboard for Wazuh SIEM/XDR integration
|
||||
Filename: luci-app-wazuh_1.0.0-r1_all.ipk
|
||||
Size: 11069
|
||||
Size: 11072
|
||||
|
||||
Package: luci-app-wireguard-dashboard
|
||||
Version: 0.7.0-r5
|
||||
@ -913,7 +913,7 @@ Architecture: all
|
||||
Installed-Size: 215040
|
||||
Description: Modern dashboard for WireGuard VPN monitoring on OpenWrt
|
||||
Filename: luci-app-wireguard-dashboard_0.7.0-r5_all.ipk
|
||||
Size: 42286
|
||||
Size: 42288
|
||||
|
||||
Package: luci-app-zigbee2mqtt
|
||||
Version: 1.0.0-r2
|
||||
@ -925,19 +925,19 @@ Architecture: all
|
||||
Installed-Size: 40960
|
||||
Description: Graphical interface for managing the Zigbee2MQTT LXC application.
|
||||
Filename: luci-app-zigbee2mqtt_1.0.0-r2_all.ipk
|
||||
Size: 6592
|
||||
Size: 6594
|
||||
|
||||
Package: luci-theme-secubox
|
||||
Version: 0.4.7-r1
|
||||
Version: 0.4.8-r1
|
||||
Depends: luci-base
|
||||
License: Apache-2.0
|
||||
Section: luci
|
||||
Maintainer: OpenWrt LuCI community
|
||||
Architecture: all
|
||||
Installed-Size: 450560
|
||||
Installed-Size: 491520
|
||||
Description: Global CyberMood design system (CSS/JS/i18n) shared by all SecuBox dashboards.
|
||||
Filename: luci-theme-secubox_0.4.7-r1_all.ipk
|
||||
Size: 110239
|
||||
Filename: luci-theme-secubox_0.4.8-r1_all.ipk
|
||||
Size: 121591
|
||||
|
||||
Package: secubox-app
|
||||
Version: 1.0.0-r2
|
||||
@ -948,7 +948,7 @@ Installed-Size: 92160
|
||||
Description: Command line helper for SecuBox App Store manifests. Installs /usr/sbin/secubox-app
|
||||
and ships the default manifests under /usr/share/secubox/plugins/.
|
||||
Filename: secubox-app_1.0.0-r2_all.ipk
|
||||
Size: 11186
|
||||
Size: 11183
|
||||
|
||||
Package: secubox-app-adguardhome
|
||||
Version: 1.0.0-r2
|
||||
@ -962,7 +962,7 @@ Description: Installer, configuration, and service manager for running AdGuard
|
||||
inside Docker on SecuBox-powered OpenWrt systems. Network-wide ad blocker
|
||||
with DNS-over-HTTPS/TLS support and detailed analytics.
|
||||
Filename: secubox-app-adguardhome_1.0.0-r2_all.ipk
|
||||
Size: 2877
|
||||
Size: 2883
|
||||
|
||||
Package: secubox-app-auth-logger
|
||||
Version: 1.2.2-r1
|
||||
@ -980,7 +980,7 @@ Description: Logs authentication failures from LuCI/rpcd and Dropbear SSH
|
||||
- JavaScript hook to intercept login failures
|
||||
- CrowdSec parser and bruteforce scenario
|
||||
Filename: secubox-app-auth-logger_1.2.2-r1_all.ipk
|
||||
Size: 9375
|
||||
Size: 9379
|
||||
|
||||
Package: secubox-app-crowdsec-custom
|
||||
Version: 1.1.0-r1
|
||||
@ -1005,7 +1005,7 @@ Description: Custom CrowdSec configurations for SecuBox web interface protectio
|
||||
- Insider WAF: LAN threat detection (C2, exfiltration, lateral movement)
|
||||
- Whitelist for trusted networks
|
||||
Filename: secubox-app-crowdsec-custom_1.1.0-r1_all.ipk
|
||||
Size: 6940
|
||||
Size: 6944
|
||||
|
||||
Package: secubox-app-cs-firewall-bouncer
|
||||
Version: 0.0.31-r4
|
||||
@ -1032,7 +1032,7 @@ Description: SecuBox CrowdSec Firewall Bouncer for OpenWrt.
|
||||
- Automatic restart on firewall reload
|
||||
- procd service management
|
||||
Filename: secubox-app-cs-firewall-bouncer_0.0.31-r4_aarch64_cortex-a72.ipk
|
||||
Size: 5049321
|
||||
Size: 5049325
|
||||
|
||||
Package: secubox-app-cyberfeed
|
||||
Version: 0.2.1-r1
|
||||
@ -1046,7 +1046,7 @@ Description: Cyberpunk-themed RSS feed aggregator for OpenWrt/SecuBox.
|
||||
Features emoji injection, neon styling, and RSS-Bridge support
|
||||
for social media feeds (Facebook, Twitter, Mastodon).
|
||||
Filename: secubox-app-cyberfeed_0.2.1-r1_all.ipk
|
||||
Size: 12452
|
||||
Size: 12456
|
||||
|
||||
Package: secubox-app-device-intel
|
||||
Version: 1.0.0-r1
|
||||
@ -1060,7 +1060,7 @@ Description: Unified device inventory aggregating mac-guardian, client-guardian
|
||||
P2P mesh, and exposure scanner data. Includes heuristic classification
|
||||
and pluggable emulator modules for MQTT, Zigbee, and USB devices.
|
||||
Filename: secubox-app-device-intel_1.0.0-r1_all.ipk
|
||||
Size: 13100
|
||||
Size: 13109
|
||||
|
||||
Package: secubox-app-dns-provider
|
||||
Version: 1.0.0-r1
|
||||
@ -1074,7 +1074,7 @@ Description: Programmatic DNS record management via provider APIs (OVH, Gandi
|
||||
Cloudflare). Provides the dnsctl CLI for record CRUD, zone sync
|
||||
DNS propagation verification, and ACME DNS-01 challenge support.
|
||||
Filename: secubox-app-dns-provider_1.0.0-r1_all.ipk
|
||||
Size: 8259
|
||||
Size: 8260
|
||||
|
||||
Package: secubox-app-domoticz
|
||||
Version: 1.0.0-r4
|
||||
@ -1102,7 +1102,7 @@ Description: Unified service exposure manager for SecuBox.
|
||||
- Dynamic Tor hidden service management
|
||||
- HAProxy SSL reverse proxy configuration
|
||||
Filename: secubox-app-exposure_1.0.0-r1_all.ipk
|
||||
Size: 9147
|
||||
Size: 9154
|
||||
|
||||
Package: secubox-app-gitea
|
||||
Version: 1.0.0-r5
|
||||
@ -1125,7 +1125,7 @@ Description: Gitea Git Platform - Self-hosted lightweight Git service
|
||||
Runs in LXC container with Alpine Linux.
|
||||
Configure in /etc/config/gitea.
|
||||
Filename: secubox-app-gitea_1.0.0-r5_all.ipk
|
||||
Size: 9441
|
||||
Size: 9442
|
||||
|
||||
Package: secubox-app-gk2hub
|
||||
Version: 0.1.0-r1
|
||||
@ -1139,7 +1139,7 @@ Description: Dynamic landing page generator for GK2 SecuBox services.
|
||||
Aggregates Streamlit apps, MetaBlogizer sites, and infrastructure
|
||||
services into a single service directory page.
|
||||
Filename: secubox-app-gk2hub_0.1.0-r1_all.ipk
|
||||
Size: 4057
|
||||
Size: 4061
|
||||
|
||||
Package: secubox-app-glances
|
||||
Version: 1.0.0-r1
|
||||
@ -1162,7 +1162,7 @@ Description: Glances - Cross-platform system monitoring tool for SecuBox.
|
||||
Runs in LXC container for isolation and security.
|
||||
Configure in /etc/config/glances.
|
||||
Filename: secubox-app-glances_1.0.0-r1_all.ipk
|
||||
Size: 6142
|
||||
Size: 6139
|
||||
|
||||
Package: secubox-app-guacamole
|
||||
Version: 1.0.0-r1
|
||||
@ -1176,7 +1176,7 @@ Description: Apache Guacamole clientless remote desktop gateway.
|
||||
Runs in an LXC Debian container with guacd and Tomcat.
|
||||
Supports SSH, VNC, and RDP connections via web browser.
|
||||
Filename: secubox-app-guacamole_1.0.0-r1_all.ipk
|
||||
Size: 6941
|
||||
Size: 6945
|
||||
|
||||
Package: secubox-app-haproxy
|
||||
Version: 1.0.0-r24
|
||||
@ -1196,7 +1196,7 @@ Description: HAProxy load balancer and reverse proxy running in an LXC containe
|
||||
- Stats dashboard
|
||||
- Rate limiting and ACLs
|
||||
Filename: secubox-app-haproxy_1.0.0-r24_all.ipk
|
||||
Size: 22008
|
||||
Size: 22010
|
||||
|
||||
Package: secubox-app-hexojs
|
||||
Version: 1.0.0-r8
|
||||
@ -1220,7 +1220,7 @@ Description: Hexo CMS - Self-hosted static blog generator for OpenWrt
|
||||
Runs in LXC container with Alpine Linux.
|
||||
Configure in /etc/config/hexojs.
|
||||
Filename: secubox-app-hexojs_1.0.0-r8_all.ipk
|
||||
Size: 100061
|
||||
Size: 100062
|
||||
|
||||
Package: secubox-app-ipblocklist
|
||||
Version: 1.0.0-r1
|
||||
@ -1235,7 +1235,7 @@ Description: Pre-emptive IP blocklist defense layer for SecuBox.
|
||||
Maintainer: Gandalf <gandalf@cybermind.fr>
|
||||
License: Apache-2.0
|
||||
Filename: secubox-app-ipblocklist_1.0.0-r1_all.ipk
|
||||
Size: 4698
|
||||
Size: 4697
|
||||
|
||||
Package: secubox-app-jabber
|
||||
Version: 1.0.0-r1
|
||||
@ -1249,7 +1249,7 @@ Description: Jabber/XMPP instant messaging server based on Prosody.
|
||||
Runs in an LXC Debian container with full XMPP support.
|
||||
Features multi-user chat (MUC), file uploads, and S2S federation.
|
||||
Filename: secubox-app-jabber_1.0.0-r1_all.ipk
|
||||
Size: 13276
|
||||
Size: 13278
|
||||
|
||||
Package: secubox-app-jellyfin
|
||||
Version: 3.0.0-r1
|
||||
@ -1262,7 +1262,7 @@ Installed-Size: 20480
|
||||
Description: Jellyfin media server running in LXC container.
|
||||
Free media server for streaming movies, TV shows, music, and photos.
|
||||
Filename: secubox-app-jellyfin_3.0.0-r1_all.ipk
|
||||
Size: 4746
|
||||
Size: 4753
|
||||
|
||||
Package: secubox-app-jitsi
|
||||
Version: 1.0.0-r1
|
||||
@ -1287,7 +1287,7 @@ Description: Jitsi Meet - Secure, fully featured video conferencing for SecuBox
|
||||
Integrates with HAProxy for SSL termination.
|
||||
Configure in /etc/config/jitsi.
|
||||
Filename: secubox-app-jitsi_1.0.0-r1_all.ipk
|
||||
Size: 8921
|
||||
Size: 8925
|
||||
|
||||
Package: secubox-app-localai
|
||||
Version: 3.9.0-r1
|
||||
@ -1309,7 +1309,7 @@ Description: LocalAI native binary package for OpenWrt.
|
||||
|
||||
API: http://<router-ip>:8081/v1
|
||||
Filename: secubox-app-localai_3.9.0-r1_all.ipk
|
||||
Size: 5838
|
||||
Size: 5845
|
||||
|
||||
Package: secubox-app-localai-wb
|
||||
Version: 2.25.0-r1
|
||||
@ -1333,7 +1333,7 @@ Description: LocalAI native binary package for OpenWrt.
|
||||
|
||||
API: http://<router-ip>:8080/v1
|
||||
Filename: secubox-app-localai-wb_2.25.0-r1_all.ipk
|
||||
Size: 7947
|
||||
Size: 7949
|
||||
|
||||
Package: secubox-app-lyrion
|
||||
Version: 2.0.2-r1
|
||||
@ -1353,7 +1353,7 @@ Description: Lyrion Media Server (formerly Logitech Media Server / Squeezebox S
|
||||
Auto-detects available runtime, preferring LXC for lower resource usage.
|
||||
Configure runtime in /etc/config/lyrion.
|
||||
Filename: secubox-app-lyrion_2.0.2-r1_all.ipk
|
||||
Size: 8122
|
||||
Size: 8130
|
||||
|
||||
Package: secubox-app-mac-guardian
|
||||
Version: 0.5.0-r1
|
||||
@ -1368,7 +1368,7 @@ Description: WiFi MAC address security monitor for SecuBox.
|
||||
and spoofing. Integrates with CrowdSec and provides
|
||||
real-time hostapd hotplug detection.
|
||||
Filename: secubox-app-mac-guardian_0.5.0-r1_all.ipk
|
||||
Size: 12096
|
||||
Size: 12098
|
||||
|
||||
Package: secubox-app-magicmirror2
|
||||
Version: 0.4.0-r8
|
||||
@ -1390,7 +1390,7 @@ Description: MagicMirror² - Open source modular smart mirror platform for Secu
|
||||
Runs in LXC container for isolation and security.
|
||||
Configure in /etc/config/magicmirror2.
|
||||
Filename: secubox-app-magicmirror2_0.4.0-r8_all.ipk
|
||||
Size: 9248
|
||||
Size: 9249
|
||||
|
||||
Package: secubox-app-mailinabox
|
||||
Version: 2.0.0-r1
|
||||
@ -1428,7 +1428,7 @@ Installed-Size: 20480
|
||||
Description: Postfix + Dovecot mail server running in LXC container.
|
||||
Supports IMAP/SMTP with SSL/TLS.
|
||||
Filename: secubox-app-mailserver_2.0.0-r1_all.ipk
|
||||
Size: 5694
|
||||
Size: 5700
|
||||
|
||||
Package: secubox-app-matrix
|
||||
Version: 1.0.0-r1
|
||||
@ -1442,7 +1442,7 @@ Description: Matrix homeserver based on Conduit - a lightweight, high-performan
|
||||
Matrix server written in Rust. Runs in an LXC Debian container.
|
||||
Features E2EE messaging, federation, and mesh integration.
|
||||
Filename: secubox-app-matrix_1.0.0-r1_all.ipk
|
||||
Size: 10453
|
||||
Size: 10448
|
||||
|
||||
Package: secubox-app-metabolizer
|
||||
Version: 1.0.0-r3
|
||||
@ -1463,7 +1463,7 @@ Description: Metabolizer Blog Pipeline - Integrated CMS with Git-based workflow
|
||||
|
||||
Pipeline: Edit in Streamlit -> Push to Gitea -> Build with Hexo -> Publish
|
||||
Filename: secubox-app-metabolizer_1.0.0-r3_all.ipk
|
||||
Size: 13976
|
||||
Size: 13983
|
||||
|
||||
Package: secubox-app-mitmproxy
|
||||
Version: 0.5.0-r19
|
||||
@ -1490,7 +1490,7 @@ Description: mitmproxy - Interactive HTTPS proxy for SecuBox-powered OpenWrt sy
|
||||
Runs in LXC container for isolation and security.
|
||||
Configure in /etc/config/mitmproxy.
|
||||
Filename: secubox-app-mitmproxy_0.5.0-r19_all.ipk
|
||||
Size: 22957
|
||||
Size: 22952
|
||||
|
||||
Package: secubox-app-mmpm
|
||||
Version: 0.2.0-r5
|
||||
@ -1511,7 +1511,7 @@ Description: MMPM (MagicMirror Package Manager) for SecuBox.
|
||||
|
||||
Runs inside the MagicMirror2 LXC container.
|
||||
Filename: secubox-app-mmpm_0.2.0-r5_all.ipk
|
||||
Size: 3975
|
||||
Size: 3976
|
||||
|
||||
Package: secubox-app-nextcloud
|
||||
Version: 1.0.0-r2
|
||||
@ -1525,7 +1525,7 @@ Description: Nextcloud file sync and collaboration platform running in a Debian
|
||||
LXC container with MariaDB, Redis, and Nginx. Features HAProxy SSL
|
||||
integration, automated backups, and KISS LuCI dashboard.
|
||||
Filename: secubox-app-nextcloud_1.0.0-r2_all.ipk
|
||||
Size: 9671
|
||||
Size: 9675
|
||||
|
||||
Package: secubox-app-ollama
|
||||
Version: 0.1.0-r1
|
||||
@ -1547,7 +1547,7 @@ Description: Ollama - Simple local LLM runtime for SecuBox-powered OpenWrt syst
|
||||
Runs in Docker/Podman container.
|
||||
Configure in /etc/config/ollama.
|
||||
Filename: secubox-app-ollama_0.1.0-r1_all.ipk
|
||||
Size: 5731
|
||||
Size: 5738
|
||||
|
||||
Package: secubox-app-picobrew
|
||||
Version: 1.0.0-r7
|
||||
@ -1569,7 +1569,7 @@ Description: PicoBrew Server - Self-hosted brewing controller for PicoBrew devi
|
||||
Runs in LXC container with Python/Flask backend.
|
||||
Configure in /etc/config/picobrew.
|
||||
Filename: secubox-app-picobrew_1.0.0-r7_all.ipk
|
||||
Size: 5543
|
||||
Size: 5533
|
||||
|
||||
Package: secubox-app-rustdesk
|
||||
Version: 1.0.0-r1
|
||||
@ -1582,7 +1582,7 @@ Installed-Size: 20480
|
||||
Description: Self-hosted RustDesk relay server for remote desktop access.
|
||||
Downloads and manages hbbs (ID server) and hbbr (relay server) binaries.
|
||||
Filename: secubox-app-rustdesk_1.0.0-r1_all.ipk
|
||||
Size: 4466
|
||||
Size: 4465
|
||||
|
||||
Package: secubox-app-simplex
|
||||
Version: 1.0.0-r1
|
||||
@ -1606,7 +1606,7 @@ Description: SimpleX Chat self-hosted messaging infrastructure for SecuBox.
|
||||
Privacy-first messaging relay that you control.
|
||||
Configure in /etc/config/simplex.
|
||||
Filename: secubox-app-simplex_1.0.0-r1_all.ipk
|
||||
Size: 9367
|
||||
Size: 9368
|
||||
|
||||
Package: secubox-app-smbfs
|
||||
Version: 1.0.0-r1
|
||||
@ -1620,7 +1620,7 @@ Description: SMB/CIFS remote directory mount manager for SecuBox. Manages share
|
||||
network mounts for media servers (Jellyfin, Lyrion), backups, and
|
||||
general-purpose remote storage over SMB/CIFS protocol.
|
||||
Filename: secubox-app-smbfs_1.0.0-r1_all.ipk
|
||||
Size: 5268
|
||||
Size: 5253
|
||||
|
||||
Package: secubox-app-streamlit
|
||||
Version: 1.0.0-r5
|
||||
@ -1647,7 +1647,7 @@ Description: Streamlit App Platform - Self-hosted Python data app platform
|
||||
|
||||
Configure in /etc/config/streamlit.
|
||||
Filename: secubox-app-streamlit_1.0.0-r5_all.ipk
|
||||
Size: 16512
|
||||
Size: 16515
|
||||
|
||||
Package: secubox-app-tor
|
||||
Version: 1.0.0-r1
|
||||
@ -1670,7 +1670,7 @@ Description: SecuBox Tor Shield - One-click Tor anonymization for OpenWrt
|
||||
|
||||
Configure in /etc/config/tor-shield.
|
||||
Filename: secubox-app-tor_1.0.0-r1_all.ipk
|
||||
Size: 7371
|
||||
Size: 7372
|
||||
|
||||
Package: secubox-app-voip
|
||||
Version: 1.0.0-r1
|
||||
@ -1684,7 +1684,7 @@ Description: VoIP PBX solution with Asterisk in LXC container.
|
||||
Features OVH SIP trunk integration, WebRTC support
|
||||
and Jabber/XMPP relay for SMS and voicemail notifications.
|
||||
Filename: secubox-app-voip_1.0.0-r1_all.ipk
|
||||
Size: 11955
|
||||
Size: 11954
|
||||
|
||||
Package: secubox-app-webapp
|
||||
Version: 1.5.0-r7
|
||||
@ -1702,7 +1702,7 @@ Description: SecuBox Control Center Dashboard - A web-based dashboard for monit
|
||||
- Service management
|
||||
- Network interface control
|
||||
Filename: secubox-app-webapp_1.5.0-r7_all.ipk
|
||||
Size: 39177
|
||||
Size: 39175
|
||||
|
||||
Package: secubox-app-zigbee2mqtt
|
||||
Version: 1.0.0-r3
|
||||
@ -1734,7 +1734,7 @@ Description: AI-powered configuration security advisor for SecuBox.
|
||||
- LocalAI integration for intelligent analysis
|
||||
- Automated remediation suggestions
|
||||
Filename: secubox-config-advisor_0.1.0-r1_all.ipk
|
||||
Size: 14849
|
||||
Size: 14848
|
||||
|
||||
Package: secubox-content-pkg
|
||||
Version: 1.0.0-r1
|
||||
@ -1747,7 +1747,7 @@ Installed-Size: 20480
|
||||
Description: Package Metablogizer sites and Streamlit apps as IPKs for P2P distribution.
|
||||
Auto-publishes content to the mesh feed for peer auto-sync.
|
||||
Filename: secubox-content-pkg_1.0.0-r1_all.ipk
|
||||
Size: 3909
|
||||
Size: 3910
|
||||
|
||||
Package: secubox-cookie-tracker
|
||||
Version: 1.0.0-r1
|
||||
@ -1829,7 +1829,7 @@ Description: SecuBox DNS Guard provides AI-powered DNS anomaly detection using
|
||||
- Unusual TLD pattern detection
|
||||
- Automatic blocklist generation with approval workflow
|
||||
Filename: secubox-dns-guard_1.0.0-r1_all.ipk
|
||||
Size: 12482
|
||||
Size: 12485
|
||||
|
||||
Package: secubox-identity
|
||||
Version: 0.1.0-r1
|
||||
@ -1848,7 +1848,7 @@ Description: Decentralized identity management for SecuBox mesh nodes.
|
||||
- Peer identity verification
|
||||
- Trust scoring integration
|
||||
Filename: secubox-identity_0.1.0-r1_all.ipk
|
||||
Size: 8084
|
||||
Size: 8089
|
||||
|
||||
Package: secubox-iot-guard
|
||||
Version: 1.0.0-r1
|
||||
@ -1864,7 +1864,7 @@ Description: IoT device isolation, classification, and security monitoring.
|
||||
risk scoring. Orchestrates Client Guardian, MAC Guardian
|
||||
Vortex Firewall, and Bandwidth Manager for IoT protection.
|
||||
Filename: secubox-iot-guard_1.0.0-r1_all.ipk
|
||||
Size: 13370
|
||||
Size: 13369
|
||||
|
||||
Package: secubox-localrecall
|
||||
Version: 1.0.0-r1
|
||||
@ -1879,7 +1879,7 @@ Description: Persistent memory system for SecuBox AI agents.
|
||||
for context across sessions. LocalAI integration for
|
||||
semantic search and AI-powered summarization.
|
||||
Filename: secubox-localrecall_1.0.0-r1_all.ipk
|
||||
Size: 7793
|
||||
Size: 7800
|
||||
|
||||
Package: secubox-master-link
|
||||
Version: 1.0.0-r1
|
||||
@ -1901,7 +1901,7 @@ Description: Secure mesh onboarding for SecuBox nodes via master/peer link.
|
||||
|
||||
Configure in /etc/config/master-link.
|
||||
Filename: secubox-master-link_1.0.0-r1_all.ipk
|
||||
Size: 15035
|
||||
Size: 15038
|
||||
|
||||
Package: secubox-mcp-server
|
||||
Version: 1.0.0-r1
|
||||
@ -1947,7 +1947,7 @@ Description: MirrorNet core mesh orchestration for SecuBox.
|
||||
- Mesh health monitoring and anomaly detection
|
||||
- DID-based identity (did:plc compatible)
|
||||
Filename: secubox-mirrornet_0.1.0-r1_all.ipk
|
||||
Size: 15309
|
||||
Size: 15308
|
||||
|
||||
Package: secubox-network-anomaly
|
||||
Version: 1.0.0-r1
|
||||
@ -1962,7 +1962,7 @@ Description: AI-powered network anomaly detection for SecuBox.
|
||||
DNS anomalies, and protocol anomalies using statistical
|
||||
analysis and optional LocalAI integration.
|
||||
Filename: secubox-network-anomaly_1.0.0-r1_all.ipk
|
||||
Size: 6167
|
||||
Size: 6165
|
||||
|
||||
Package: secubox-p2p
|
||||
Version: 0.6.0-r3
|
||||
@ -1981,7 +1981,7 @@ Description: SecuBox P2P Hub backend providing peer discovery, mesh networking
|
||||
and MirrorBox NetMesh Catalog for cross-chain distributed service
|
||||
registry with HAProxy vhost discovery and multi-endpoint access URLs.
|
||||
Filename: secubox-p2p_0.6.0-r3_all.ipk
|
||||
Size: 47860
|
||||
Size: 47869
|
||||
|
||||
Package: secubox-p2p-intel
|
||||
Version: 0.1.0-r1
|
||||
@ -2000,7 +2000,7 @@ Description: Decentralized threat intelligence sharing for SecuBox mesh.
|
||||
- CrowdSec and mitmproxy integration
|
||||
- Automatic firewall rule application
|
||||
Filename: secubox-p2p-intel_0.1.0-r1_all.ipk
|
||||
Size: 9801
|
||||
Size: 9797
|
||||
|
||||
Package: secubox-threat-analyst
|
||||
Version: 1.0.0-r1
|
||||
@ -2019,7 +2019,7 @@ Description: Autonomous threat analysis agent for SecuBox.
|
||||
|
||||
Part of SecuBox AI Gateway (Couche 2).
|
||||
Filename: secubox-threat-analyst_1.0.0-r1_all.ipk
|
||||
Size: 9863
|
||||
Size: 9868
|
||||
|
||||
Package: secubox-vortex-dns
|
||||
Version: 1.0.0-r1
|
||||
@ -2038,7 +2038,7 @@ Description: Meshed multi-dynamic subdomain delegation system for SecuBox.
|
||||
- Gossip-based exposure config sync
|
||||
- Submastering for nested hierarchies
|
||||
Filename: secubox-vortex-dns_1.0.0-r1_all.ipk
|
||||
Size: 5441
|
||||
Size: 5442
|
||||
|
||||
Package: secubox-vortex-firewall
|
||||
Version: 1.0.0-r1
|
||||
|
||||
Binary file not shown.
@ -1,12 +1,12 @@
|
||||
{
|
||||
"feed_url": "/secubox-feed",
|
||||
"generated": "2026-02-21T10:31:16+01:00",
|
||||
"generated": "2026-02-23T16:38:44+01:00",
|
||||
"packages": [
|
||||
{
|
||||
"name": "luci-app-ai-insights",
|
||||
"version": "1.0.0-r1",
|
||||
"filename": "luci-app-ai-insights_1.0.0-r1_all.ipk",
|
||||
"size": 11637,
|
||||
"size": 11638,
|
||||
"category": "utility",
|
||||
"icon": "package",
|
||||
"description": "SecuBox package",
|
||||
@ -18,7 +18,7 @@
|
||||
"name": "luci-app-auth-guardian",
|
||||
"version": "0.4.0-r3",
|
||||
"filename": "luci-app-auth-guardian_0.4.0-r3_all.ipk",
|
||||
"size": 12396,
|
||||
"size": 12394,
|
||||
"category": "security",
|
||||
"icon": "key",
|
||||
"description": "Authentication management",
|
||||
@ -30,7 +30,7 @@
|
||||
"name": "luci-app-backup",
|
||||
"version": "1.0.0-r1",
|
||||
"filename": "luci-app-backup_1.0.0-r1_all.ipk",
|
||||
"size": 4532,
|
||||
"size": 4527,
|
||||
"category": "utility",
|
||||
"icon": "package",
|
||||
"description": "SecuBox package",
|
||||
@ -54,7 +54,7 @@
|
||||
"name": "luci-app-cdn-cache",
|
||||
"version": "0.5.0-r3",
|
||||
"filename": "luci-app-cdn-cache_0.5.0-r3_all.ipk",
|
||||
"size": 24254,
|
||||
"size": 24256,
|
||||
"category": "network",
|
||||
"icon": "globe",
|
||||
"description": "CDN caching",
|
||||
@ -66,7 +66,7 @@
|
||||
"name": "luci-app-client-guardian",
|
||||
"version": "0.4.0-r7",
|
||||
"filename": "luci-app-client-guardian_0.4.0-r7_all.ipk",
|
||||
"size": 52684,
|
||||
"size": 52689,
|
||||
"category": "network",
|
||||
"icon": "users",
|
||||
"description": "Client management and monitoring",
|
||||
@ -78,7 +78,7 @@
|
||||
"name": "luci-app-cloner",
|
||||
"version": "1.0.0-r1",
|
||||
"filename": "luci-app-cloner_1.0.0-r1_all.ipk",
|
||||
"size": 19433,
|
||||
"size": 19435,
|
||||
"category": "utility",
|
||||
"icon": "package",
|
||||
"description": "SecuBox package",
|
||||
@ -90,7 +90,7 @@
|
||||
"name": "luci-app-config-advisor",
|
||||
"version": "1.0.0-r1",
|
||||
"filename": "luci-app-config-advisor_1.0.0-r1_all.ipk",
|
||||
"size": 8858,
|
||||
"size": 8857,
|
||||
"category": "utility",
|
||||
"icon": "package",
|
||||
"description": "SecuBox package",
|
||||
@ -102,7 +102,7 @@
|
||||
"name": "luci-app-cookie-tracker",
|
||||
"version": "1.0.0-r1",
|
||||
"filename": "luci-app-cookie-tracker_1.0.0-r1_all.ipk",
|
||||
"size": 5663,
|
||||
"size": 5655,
|
||||
"category": "utility",
|
||||
"icon": "package",
|
||||
"description": "SecuBox package",
|
||||
@ -114,7 +114,7 @@
|
||||
"name": "luci-app-crowdsec-dashboard",
|
||||
"version": "0.8.0-r1",
|
||||
"filename": "luci-app-crowdsec-dashboard_0.8.0-r1_all.ipk",
|
||||
"size": 43019,
|
||||
"size": 43023,
|
||||
"category": "security",
|
||||
"icon": "shield",
|
||||
"description": "CrowdSec security monitoring",
|
||||
@ -126,7 +126,7 @@
|
||||
"name": "luci-app-cve-triage",
|
||||
"version": "1.0.0-r1",
|
||||
"filename": "luci-app-cve-triage_1.0.0-r1_all.ipk",
|
||||
"size": 5950,
|
||||
"size": 5945,
|
||||
"category": "utility",
|
||||
"icon": "package",
|
||||
"description": "SecuBox package",
|
||||
@ -162,7 +162,7 @@
|
||||
"name": "luci-app-dnsguard",
|
||||
"version": "1.1.0-r1",
|
||||
"filename": "luci-app-dnsguard_1.1.0-r1_all.ipk",
|
||||
"size": 12444,
|
||||
"size": 12449,
|
||||
"category": "utility",
|
||||
"icon": "package",
|
||||
"description": "SecuBox package",
|
||||
@ -174,7 +174,7 @@
|
||||
"name": "luci-app-dns-provider",
|
||||
"version": "1.0.0-r1",
|
||||
"filename": "luci-app-dns-provider_1.0.0-r1_all.ipk",
|
||||
"size": 7168,
|
||||
"size": 7173,
|
||||
"category": "utility",
|
||||
"icon": "package",
|
||||
"description": "SecuBox package",
|
||||
@ -186,7 +186,7 @@
|
||||
"name": "luci-app-domoticz",
|
||||
"version": "1.0.0-r1",
|
||||
"filename": "luci-app-domoticz_1.0.0-r1_all.ipk",
|
||||
"size": 7121,
|
||||
"size": 7126,
|
||||
"category": "utility",
|
||||
"icon": "package",
|
||||
"description": "SecuBox package",
|
||||
@ -210,7 +210,7 @@
|
||||
"name": "luci-app-gitea",
|
||||
"version": "1.0.0-r2",
|
||||
"filename": "luci-app-gitea_1.0.0-r2_all.ipk",
|
||||
"size": 16621,
|
||||
"size": 16625,
|
||||
"category": "utility",
|
||||
"icon": "package",
|
||||
"description": "SecuBox package",
|
||||
@ -222,7 +222,7 @@
|
||||
"name": "luci-app-glances",
|
||||
"version": "1.0.0-r2",
|
||||
"filename": "luci-app-glances_1.0.0-r2_all.ipk",
|
||||
"size": 7022,
|
||||
"size": 7023,
|
||||
"category": "utility",
|
||||
"icon": "package",
|
||||
"description": "SecuBox package",
|
||||
@ -234,7 +234,7 @@
|
||||
"name": "luci-app-gotosocial",
|
||||
"version": "0.1.0-r1",
|
||||
"filename": "luci-app-gotosocial_0.1.0-r1_all.ipk",
|
||||
"size": 8206,
|
||||
"size": 8213,
|
||||
"category": "utility",
|
||||
"icon": "package",
|
||||
"description": "SecuBox package",
|
||||
@ -246,7 +246,7 @@
|
||||
"name": "luci-app-haproxy",
|
||||
"version": "1.0.0-r8",
|
||||
"filename": "luci-app-haproxy_1.0.0-r8_all.ipk",
|
||||
"size": 35339,
|
||||
"size": 35341,
|
||||
"category": "utility",
|
||||
"icon": "package",
|
||||
"description": "SecuBox package",
|
||||
@ -258,7 +258,7 @@
|
||||
"name": "luci-app-hexojs",
|
||||
"version": "1.0.0-r3",
|
||||
"filename": "luci-app-hexojs_1.0.0-r3_all.ipk",
|
||||
"size": 30447,
|
||||
"size": 30451,
|
||||
"category": "utility",
|
||||
"icon": "package",
|
||||
"description": "SecuBox package",
|
||||
@ -270,7 +270,7 @@
|
||||
"name": "luci-app-iot-guard",
|
||||
"version": "1.0.0-r1",
|
||||
"filename": "luci-app-iot-guard_1.0.0-r1_all.ipk",
|
||||
"size": 10532,
|
||||
"size": 10535,
|
||||
"category": "utility",
|
||||
"icon": "package",
|
||||
"description": "SecuBox package",
|
||||
@ -282,7 +282,7 @@
|
||||
"name": "luci-app-ipblocklist",
|
||||
"version": "1.0.0-r1",
|
||||
"filename": "luci-app-ipblocklist_1.0.0-r1_all.ipk",
|
||||
"size": 6528,
|
||||
"size": 6531,
|
||||
"category": "utility",
|
||||
"icon": "package",
|
||||
"description": "SecuBox package",
|
||||
@ -294,7 +294,7 @@
|
||||
"name": "luci-app-jabber",
|
||||
"version": "0",
|
||||
"filename": "luci-app-jabber_0_all.ipk",
|
||||
"size": 9304,
|
||||
"size": 9309,
|
||||
"category": "utility",
|
||||
"icon": "package",
|
||||
"description": "SecuBox package",
|
||||
@ -306,7 +306,7 @@
|
||||
"name": "luci-app-jellyfin",
|
||||
"version": "1.0.0-r1",
|
||||
"filename": "luci-app-jellyfin_1.0.0-r1_all.ipk",
|
||||
"size": 10482,
|
||||
"size": 10488,
|
||||
"category": "utility",
|
||||
"icon": "package",
|
||||
"description": "SecuBox package",
|
||||
@ -318,7 +318,7 @@
|
||||
"name": "luci-app-jitsi",
|
||||
"version": "1.0.0-r1",
|
||||
"filename": "luci-app-jitsi_1.0.0-r1_all.ipk",
|
||||
"size": 5176,
|
||||
"size": 5179,
|
||||
"category": "utility",
|
||||
"icon": "package",
|
||||
"description": "SecuBox package",
|
||||
@ -330,7 +330,7 @@
|
||||
"name": "luci-app-ksm-manager",
|
||||
"version": "0.4.0-r2",
|
||||
"filename": "luci-app-ksm-manager_0.4.0-r2_all.ipk",
|
||||
"size": 18776,
|
||||
"size": 18781,
|
||||
"category": "system",
|
||||
"icon": "cpu",
|
||||
"description": "Kernel memory management",
|
||||
@ -354,7 +354,7 @@
|
||||
"name": "luci-app-localrecall",
|
||||
"version": "1.0.0-r1",
|
||||
"filename": "luci-app-localrecall_1.0.0-r1_all.ipk",
|
||||
"size": 8418,
|
||||
"size": 8417,
|
||||
"category": "utility",
|
||||
"icon": "package",
|
||||
"description": "SecuBox package",
|
||||
@ -366,7 +366,7 @@
|
||||
"name": "luci-app-lyrion",
|
||||
"version": "1.0.0-r1",
|
||||
"filename": "luci-app-lyrion_1.0.0-r1_all.ipk",
|
||||
"size": 6834,
|
||||
"size": 6836,
|
||||
"category": "utility",
|
||||
"icon": "package",
|
||||
"description": "SecuBox package",
|
||||
@ -378,7 +378,7 @@
|
||||
"name": "luci-app-mac-guardian",
|
||||
"version": "0.5.0-r1",
|
||||
"filename": "luci-app-mac-guardian_0.5.0-r1_all.ipk",
|
||||
"size": 6657,
|
||||
"size": 6666,
|
||||
"category": "utility",
|
||||
"icon": "package",
|
||||
"description": "SecuBox package",
|
||||
@ -390,7 +390,7 @@
|
||||
"name": "luci-app-magicmirror2",
|
||||
"version": "0.4.0-r6",
|
||||
"filename": "luci-app-magicmirror2_0.4.0-r6_all.ipk",
|
||||
"size": 12359,
|
||||
"size": 12360,
|
||||
"category": "iot",
|
||||
"icon": "monitor",
|
||||
"description": "Smart mirror display",
|
||||
@ -402,7 +402,7 @@
|
||||
"name": "luci-app-mailinabox",
|
||||
"version": "1.0.0-r1",
|
||||
"filename": "luci-app-mailinabox_1.0.0-r1_all.ipk",
|
||||
"size": 5486,
|
||||
"size": 5484,
|
||||
"category": "utility",
|
||||
"icon": "package",
|
||||
"description": "SecuBox package",
|
||||
@ -414,7 +414,7 @@
|
||||
"name": "luci-app-mailserver",
|
||||
"version": "1.0.0-r1",
|
||||
"filename": "luci-app-mailserver_1.0.0-r1_all.ipk",
|
||||
"size": 6508,
|
||||
"size": 6506,
|
||||
"category": "utility",
|
||||
"icon": "package",
|
||||
"description": "SecuBox package",
|
||||
@ -438,10 +438,10 @@
|
||||
"name": "luci-app-matrix",
|
||||
"version": "1.0.0-r1",
|
||||
"filename": "luci-app-matrix_1.0.0-r1_all.ipk",
|
||||
"size": 7523,
|
||||
"category": "messaging",
|
||||
"icon": "message-square",
|
||||
"description": "Matrix/Conduit E2EE messaging server dashboard",
|
||||
"size": 7524,
|
||||
"category": "utility",
|
||||
"icon": "package",
|
||||
"description": "SecuBox package",
|
||||
"installed": false,
|
||||
"luci_app": null
|
||||
}
|
||||
@ -462,7 +462,7 @@
|
||||
"name": "luci-app-metablogizer",
|
||||
"version": "1.1.0-r1",
|
||||
"filename": "luci-app-metablogizer_1.1.0-r1_all.ipk",
|
||||
"size": 26205,
|
||||
"size": 26207,
|
||||
"category": "utility",
|
||||
"icon": "package",
|
||||
"description": "SecuBox package",
|
||||
@ -474,7 +474,7 @@
|
||||
"name": "luci-app-metabolizer",
|
||||
"version": "1.0.0-r2",
|
||||
"filename": "luci-app-metabolizer_1.0.0-r2_all.ipk",
|
||||
"size": 4822,
|
||||
"size": 4820,
|
||||
"category": "utility",
|
||||
"icon": "package",
|
||||
"description": "SecuBox package",
|
||||
@ -486,7 +486,7 @@
|
||||
"name": "luci-app-mitmproxy",
|
||||
"version": "0.5.0-r2",
|
||||
"filename": "luci-app-mitmproxy_0.5.0-r2_all.ipk",
|
||||
"size": 13235,
|
||||
"size": 13233,
|
||||
"category": "security",
|
||||
"icon": "lock",
|
||||
"description": "HTTPS proxy and traffic inspection",
|
||||
@ -498,7 +498,7 @@
|
||||
"name": "luci-app-mmpm",
|
||||
"version": "0.2.0-r3",
|
||||
"filename": "luci-app-mmpm_0.2.0-r3_all.ipk",
|
||||
"size": 7970,
|
||||
"size": 7972,
|
||||
"category": "utility",
|
||||
"icon": "package",
|
||||
"description": "SecuBox package",
|
||||
@ -510,7 +510,7 @@
|
||||
"name": "luci-app-mqtt-bridge",
|
||||
"version": "0.4.0-r4",
|
||||
"filename": "luci-app-mqtt-bridge_0.4.0-r4_all.ipk",
|
||||
"size": 22688,
|
||||
"size": 22690,
|
||||
"category": "iot",
|
||||
"icon": "message-square",
|
||||
"description": "MQTT bridge",
|
||||
@ -522,7 +522,7 @@
|
||||
"name": "luci-app-ndpid",
|
||||
"version": "1.1.2-r2",
|
||||
"filename": "luci-app-ndpid_1.1.2-r2_all.ipk",
|
||||
"size": 21699,
|
||||
"size": 21702,
|
||||
"category": "security",
|
||||
"icon": "eye",
|
||||
"description": "Deep packet inspection",
|
||||
@ -534,7 +534,7 @@
|
||||
"name": "luci-app-netdata-dashboard",
|
||||
"version": "0.5.0-r2",
|
||||
"filename": "luci-app-netdata-dashboard_0.5.0-r2_all.ipk",
|
||||
"size": 20561,
|
||||
"size": 20558,
|
||||
"category": "monitoring",
|
||||
"icon": "bar-chart-2",
|
||||
"description": "System monitoring dashboard",
|
||||
@ -546,7 +546,7 @@
|
||||
"name": "luci-app-network-anomaly",
|
||||
"version": "1.0.0-r1",
|
||||
"filename": "luci-app-network-anomaly_1.0.0-r1_all.ipk",
|
||||
"size": 7639,
|
||||
"size": 7646,
|
||||
"category": "network",
|
||||
"icon": "wifi",
|
||||
"description": "Network configuration",
|
||||
@ -558,7 +558,7 @@
|
||||
"name": "luci-app-network-modes",
|
||||
"version": "0.5.0-r3",
|
||||
"filename": "luci-app-network-modes_0.5.0-r3_all.ipk",
|
||||
"size": 54227,
|
||||
"size": 54226,
|
||||
"category": "network",
|
||||
"icon": "wifi",
|
||||
"description": "Network configuration",
|
||||
@ -570,7 +570,7 @@
|
||||
"name": "luci-app-network-tweaks",
|
||||
"version": "1.0.0-r7",
|
||||
"filename": "luci-app-network-tweaks_1.0.0-r7_all.ipk",
|
||||
"size": 15945,
|
||||
"size": 15944,
|
||||
"category": "network",
|
||||
"icon": "wifi",
|
||||
"description": "Network configuration",
|
||||
@ -582,7 +582,7 @@
|
||||
"name": "luci-app-nextcloud",
|
||||
"version": "1.0.0-r1",
|
||||
"filename": "luci-app-nextcloud_1.0.0-r1_all.ipk",
|
||||
"size": 10351,
|
||||
"size": 10348,
|
||||
"category": "utility",
|
||||
"icon": "package",
|
||||
"description": "SecuBox package",
|
||||
@ -606,7 +606,7 @@
|
||||
"name": "luci-app-peertube",
|
||||
"version": "0",
|
||||
"filename": "luci-app-peertube_0_all.ipk",
|
||||
"size": 5757,
|
||||
"size": 5759,
|
||||
"category": "utility",
|
||||
"icon": "package",
|
||||
"description": "SecuBox package",
|
||||
@ -618,7 +618,7 @@
|
||||
"name": "luci-app-picobrew",
|
||||
"version": "1.0.0-r1",
|
||||
"filename": "luci-app-picobrew_1.0.0-r1_all.ipk",
|
||||
"size": 9535,
|
||||
"size": 9531,
|
||||
"category": "utility",
|
||||
"icon": "package",
|
||||
"description": "SecuBox package",
|
||||
@ -630,7 +630,7 @@
|
||||
"name": "luci-app-secubox",
|
||||
"version": "0.7.1-r4",
|
||||
"filename": "luci-app-secubox_0.7.1-r4_all.ipk",
|
||||
"size": 82095,
|
||||
"size": 82097,
|
||||
"category": "system",
|
||||
"icon": "box",
|
||||
"description": "SecuBox system component",
|
||||
@ -642,7 +642,7 @@
|
||||
"name": "luci-app-secubox-admin",
|
||||
"version": "1.0.0-r19",
|
||||
"filename": "luci-app-secubox-admin_1.0.0-r19_all.ipk",
|
||||
"size": 58041,
|
||||
"size": 58042,
|
||||
"category": "system",
|
||||
"icon": "box",
|
||||
"description": "SecuBox system component",
|
||||
@ -654,7 +654,7 @@
|
||||
"name": "luci-app-secubox-crowdsec",
|
||||
"version": "1.0.0-r3",
|
||||
"filename": "luci-app-secubox-crowdsec_1.0.0-r3_all.ipk",
|
||||
"size": 13923,
|
||||
"size": 13919,
|
||||
"category": "system",
|
||||
"icon": "box",
|
||||
"description": "SecuBox system component",
|
||||
@ -666,7 +666,7 @@
|
||||
"name": "luci-app-secubox-mirror",
|
||||
"version": "0.1.0-r1",
|
||||
"filename": "luci-app-secubox-mirror_0.1.0-r1_all.ipk",
|
||||
"size": 5847,
|
||||
"size": 5848,
|
||||
"category": "system",
|
||||
"icon": "box",
|
||||
"description": "SecuBox system component",
|
||||
@ -678,7 +678,7 @@
|
||||
"name": "luci-app-secubox-netdiag",
|
||||
"version": "1.0.0-r1",
|
||||
"filename": "luci-app-secubox-netdiag_1.0.0-r1_all.ipk",
|
||||
"size": 15346,
|
||||
"size": 15347,
|
||||
"category": "system",
|
||||
"icon": "box",
|
||||
"description": "SecuBox system component",
|
||||
@ -690,7 +690,7 @@
|
||||
"name": "luci-app-secubox-netifyd",
|
||||
"version": "1.2.1-r1",
|
||||
"filename": "luci-app-secubox-netifyd_1.2.1-r1_all.ipk",
|
||||
"size": 36721,
|
||||
"size": 36720,
|
||||
"category": "system",
|
||||
"icon": "box",
|
||||
"description": "SecuBox system component",
|
||||
@ -702,7 +702,7 @@
|
||||
"name": "luci-app-secubox-p2p",
|
||||
"version": "0.1.0-r1",
|
||||
"filename": "luci-app-secubox-p2p_0.1.0-r1_all.ipk",
|
||||
"size": 46833,
|
||||
"size": 46831,
|
||||
"category": "system",
|
||||
"icon": "box",
|
||||
"description": "SecuBox system component",
|
||||
@ -714,7 +714,7 @@
|
||||
"name": "luci-app-secubox-portal",
|
||||
"version": "0.7.0-r3",
|
||||
"filename": "luci-app-secubox-portal_0.7.0-r3_all.ipk",
|
||||
"size": 41685,
|
||||
"size": 41686,
|
||||
"category": "system",
|
||||
"icon": "box",
|
||||
"description": "SecuBox system component",
|
||||
@ -726,7 +726,7 @@
|
||||
"name": "luci-app-secubox-security-threats",
|
||||
"version": "1.0.0-r4",
|
||||
"filename": "luci-app-secubox-security-threats_1.0.0-r4_all.ipk",
|
||||
"size": 10658,
|
||||
"size": 10657,
|
||||
"category": "system",
|
||||
"icon": "box",
|
||||
"description": "SecuBox system component",
|
||||
@ -738,7 +738,7 @@
|
||||
"name": "luci-app-secubox-users",
|
||||
"version": "1.0.0-r1",
|
||||
"filename": "luci-app-secubox-users_1.0.0-r1_all.ipk",
|
||||
"size": 5148,
|
||||
"size": 5146,
|
||||
"category": "system",
|
||||
"icon": "box",
|
||||
"description": "SecuBox system component",
|
||||
@ -750,7 +750,7 @@
|
||||
"name": "luci-app-service-registry",
|
||||
"version": "1.0.0-r1",
|
||||
"filename": "luci-app-service-registry_1.0.0-r1_all.ipk",
|
||||
"size": 39954,
|
||||
"size": 39953,
|
||||
"category": "utility",
|
||||
"icon": "package",
|
||||
"description": "SecuBox package",
|
||||
@ -762,7 +762,7 @@
|
||||
"name": "luci-app-simplex",
|
||||
"version": "1.0.0-r1",
|
||||
"filename": "luci-app-simplex_1.0.0-r1_all.ipk",
|
||||
"size": 7027,
|
||||
"size": 7037,
|
||||
"category": "utility",
|
||||
"icon": "package",
|
||||
"description": "SecuBox package",
|
||||
@ -774,7 +774,7 @@
|
||||
"name": "luci-app-streamlit",
|
||||
"version": "1.0.0-r11",
|
||||
"filename": "luci-app-streamlit_1.0.0-r11_all.ipk",
|
||||
"size": 20567,
|
||||
"size": 20568,
|
||||
"category": "utility",
|
||||
"icon": "package",
|
||||
"description": "SecuBox package",
|
||||
@ -786,7 +786,7 @@
|
||||
"name": "luci-app-system-hub",
|
||||
"version": "0.5.2-r2",
|
||||
"filename": "luci-app-system-hub_0.5.2-r2_all.ipk",
|
||||
"size": 64288,
|
||||
"size": 64291,
|
||||
"category": "system",
|
||||
"icon": "settings",
|
||||
"description": "System management",
|
||||
@ -798,7 +798,7 @@
|
||||
"name": "luci-app-threat-analyst",
|
||||
"version": "1.0.0-r1",
|
||||
"filename": "luci-app-threat-analyst_1.0.0-r1_all.ipk",
|
||||
"size": 10140,
|
||||
"size": 10141,
|
||||
"category": "utility",
|
||||
"icon": "package",
|
||||
"description": "SecuBox package",
|
||||
@ -810,7 +810,7 @@
|
||||
"name": "luci-app-tor",
|
||||
"version": "1.0.0-r1",
|
||||
"filename": "luci-app-tor_1.0.0-r1_all.ipk",
|
||||
"size": 17816,
|
||||
"size": 17818,
|
||||
"category": "utility",
|
||||
"icon": "package",
|
||||
"description": "SecuBox package",
|
||||
@ -822,7 +822,7 @@
|
||||
"name": "luci-app-tor-shield",
|
||||
"version": "1.0.0-r10",
|
||||
"filename": "luci-app-tor-shield_1.0.0-r10_all.ipk",
|
||||
"size": 22765,
|
||||
"size": 22767,
|
||||
"category": "utility",
|
||||
"icon": "package",
|
||||
"description": "SecuBox package",
|
||||
@ -834,7 +834,7 @@
|
||||
"name": "luci-app-traffic-shaper",
|
||||
"version": "0.4.0-r2",
|
||||
"filename": "luci-app-traffic-shaper_0.4.0-r2_all.ipk",
|
||||
"size": 14585,
|
||||
"size": 14591,
|
||||
"category": "network",
|
||||
"icon": "filter",
|
||||
"description": "Traffic shaping and QoS",
|
||||
@ -846,7 +846,7 @@
|
||||
"name": "luci-app-vhost-manager",
|
||||
"version": "0.5.0-r5",
|
||||
"filename": "luci-app-vhost-manager_0.5.0-r5_all.ipk",
|
||||
"size": 26281,
|
||||
"size": 26283,
|
||||
"category": "network",
|
||||
"icon": "server",
|
||||
"description": "Virtual host management",
|
||||
@ -858,7 +858,7 @@
|
||||
"name": "luci-app-voip",
|
||||
"version": "1.0.0-r1",
|
||||
"filename": "luci-app-voip_1.0.0-r1_all.ipk",
|
||||
"size": 11040,
|
||||
"size": 11043,
|
||||
"category": "utility",
|
||||
"icon": "package",
|
||||
"description": "SecuBox package",
|
||||
@ -870,7 +870,7 @@
|
||||
"name": "luci-app-vortex-dns",
|
||||
"version": "1.0.0-r1",
|
||||
"filename": "luci-app-vortex-dns_1.0.0-r1_all.ipk",
|
||||
"size": 6078,
|
||||
"size": 6072,
|
||||
"category": "utility",
|
||||
"icon": "package",
|
||||
"description": "SecuBox package",
|
||||
@ -882,7 +882,7 @@
|
||||
"name": "luci-app-vortex-firewall",
|
||||
"version": "1.0.0-r1",
|
||||
"filename": "luci-app-vortex-firewall_1.0.0-r1_all.ipk",
|
||||
"size": 5453,
|
||||
"size": 5455,
|
||||
"category": "utility",
|
||||
"icon": "package",
|
||||
"description": "SecuBox package",
|
||||
@ -894,7 +894,7 @@
|
||||
"name": "luci-app-wazuh",
|
||||
"version": "1.0.0-r1",
|
||||
"filename": "luci-app-wazuh_1.0.0-r1_all.ipk",
|
||||
"size": 11069,
|
||||
"size": 11072,
|
||||
"category": "utility",
|
||||
"icon": "package",
|
||||
"description": "SecuBox package",
|
||||
@ -906,7 +906,7 @@
|
||||
"name": "luci-app-wireguard-dashboard",
|
||||
"version": "0.7.0-r5",
|
||||
"filename": "luci-app-wireguard-dashboard_0.7.0-r5_all.ipk",
|
||||
"size": 42286,
|
||||
"size": 42288,
|
||||
"category": "vpn",
|
||||
"icon": "shield",
|
||||
"description": "WireGuard VPN dashboard",
|
||||
@ -918,7 +918,7 @@
|
||||
"name": "luci-app-zigbee2mqtt",
|
||||
"version": "1.0.0-r2",
|
||||
"filename": "luci-app-zigbee2mqtt_1.0.0-r2_all.ipk",
|
||||
"size": 6592,
|
||||
"size": 6594,
|
||||
"category": "iot",
|
||||
"icon": "radio",
|
||||
"description": "Zigbee device management",
|
||||
@ -928,9 +928,9 @@
|
||||
,
|
||||
{
|
||||
"name": "luci-theme-secubox",
|
||||
"version": "0.4.7-r1",
|
||||
"filename": "luci-theme-secubox_0.4.7-r1_all.ipk",
|
||||
"size": 110239,
|
||||
"version": "0.4.8-r1",
|
||||
"filename": "luci-theme-secubox_0.4.8-r1_all.ipk",
|
||||
"size": 121591,
|
||||
"category": "theme",
|
||||
"icon": "palette",
|
||||
"description": "LuCI theme",
|
||||
@ -942,7 +942,7 @@
|
||||
"name": "secubox-app",
|
||||
"version": "1.0.0-r2",
|
||||
"filename": "secubox-app_1.0.0-r2_all.ipk",
|
||||
"size": 11186,
|
||||
"size": 11183,
|
||||
"category": "utility",
|
||||
"icon": "package",
|
||||
"description": "SecuBox package",
|
||||
@ -954,7 +954,7 @@
|
||||
"name": "secubox-app-adguardhome",
|
||||
"version": "1.0.0-r2",
|
||||
"filename": "secubox-app-adguardhome_1.0.0-r2_all.ipk",
|
||||
"size": 2877,
|
||||
"size": 2883,
|
||||
"category": "secubox",
|
||||
"icon": "package",
|
||||
"description": "SecuBox backend service",
|
||||
@ -966,7 +966,7 @@
|
||||
"name": "secubox-app-auth-logger",
|
||||
"version": "1.2.2-r1",
|
||||
"filename": "secubox-app-auth-logger_1.2.2-r1_all.ipk",
|
||||
"size": 9375,
|
||||
"size": 9379,
|
||||
"category": "secubox",
|
||||
"icon": "package",
|
||||
"description": "SecuBox backend service",
|
||||
@ -978,7 +978,7 @@
|
||||
"name": "secubox-app-crowdsec-custom",
|
||||
"version": "1.1.0-r1",
|
||||
"filename": "secubox-app-crowdsec-custom_1.1.0-r1_all.ipk",
|
||||
"size": 6940,
|
||||
"size": 6944,
|
||||
"category": "secubox",
|
||||
"icon": "package",
|
||||
"description": "SecuBox backend service",
|
||||
@ -990,7 +990,7 @@
|
||||
"name": "secubox-app-cs-firewall-bouncer",
|
||||
"version": "0.0.31-r4_aarch64",
|
||||
"filename": "secubox-app-cs-firewall-bouncer_0.0.31-r4_aarch64_cortex-a72.ipk",
|
||||
"size": 5049321,
|
||||
"size": 5049325,
|
||||
"category": "secubox",
|
||||
"icon": "package",
|
||||
"description": "SecuBox backend service",
|
||||
@ -1002,7 +1002,7 @@
|
||||
"name": "secubox-app-cyberfeed",
|
||||
"version": "0.2.1-r1",
|
||||
"filename": "secubox-app-cyberfeed_0.2.1-r1_all.ipk",
|
||||
"size": 12452,
|
||||
"size": 12456,
|
||||
"category": "secubox",
|
||||
"icon": "package",
|
||||
"description": "SecuBox backend service",
|
||||
@ -1014,7 +1014,7 @@
|
||||
"name": "secubox-app-device-intel",
|
||||
"version": "1.0.0-r1",
|
||||
"filename": "secubox-app-device-intel_1.0.0-r1_all.ipk",
|
||||
"size": 13100,
|
||||
"size": 13109,
|
||||
"category": "secubox",
|
||||
"icon": "package",
|
||||
"description": "SecuBox backend service",
|
||||
@ -1026,7 +1026,7 @@
|
||||
"name": "secubox-app-dns-provider",
|
||||
"version": "1.0.0-r1",
|
||||
"filename": "secubox-app-dns-provider_1.0.0-r1_all.ipk",
|
||||
"size": 8259,
|
||||
"size": 8260,
|
||||
"category": "secubox",
|
||||
"icon": "package",
|
||||
"description": "SecuBox backend service",
|
||||
@ -1050,7 +1050,7 @@
|
||||
"name": "secubox-app-exposure",
|
||||
"version": "1.0.0-r1",
|
||||
"filename": "secubox-app-exposure_1.0.0-r1_all.ipk",
|
||||
"size": 9147,
|
||||
"size": 9154,
|
||||
"category": "secubox",
|
||||
"icon": "package",
|
||||
"description": "SecuBox backend service",
|
||||
@ -1062,7 +1062,7 @@
|
||||
"name": "secubox-app-gitea",
|
||||
"version": "1.0.0-r5",
|
||||
"filename": "secubox-app-gitea_1.0.0-r5_all.ipk",
|
||||
"size": 9441,
|
||||
"size": 9442,
|
||||
"category": "secubox",
|
||||
"icon": "package",
|
||||
"description": "SecuBox backend service",
|
||||
@ -1074,7 +1074,7 @@
|
||||
"name": "secubox-app-gk2hub",
|
||||
"version": "0.1.0-r1",
|
||||
"filename": "secubox-app-gk2hub_0.1.0-r1_all.ipk",
|
||||
"size": 4057,
|
||||
"size": 4061,
|
||||
"category": "secubox",
|
||||
"icon": "package",
|
||||
"description": "SecuBox backend service",
|
||||
@ -1086,7 +1086,7 @@
|
||||
"name": "secubox-app-glances",
|
||||
"version": "1.0.0-r1",
|
||||
"filename": "secubox-app-glances_1.0.0-r1_all.ipk",
|
||||
"size": 6142,
|
||||
"size": 6139,
|
||||
"category": "secubox",
|
||||
"icon": "package",
|
||||
"description": "SecuBox backend service",
|
||||
@ -1098,7 +1098,7 @@
|
||||
"name": "secubox-app-guacamole",
|
||||
"version": "1.0.0-r1",
|
||||
"filename": "secubox-app-guacamole_1.0.0-r1_all.ipk",
|
||||
"size": 6941,
|
||||
"size": 6945,
|
||||
"category": "secubox",
|
||||
"icon": "package",
|
||||
"description": "SecuBox backend service",
|
||||
@ -1110,7 +1110,7 @@
|
||||
"name": "secubox-app-haproxy",
|
||||
"version": "1.0.0-r24",
|
||||
"filename": "secubox-app-haproxy_1.0.0-r24_all.ipk",
|
||||
"size": 22008,
|
||||
"size": 22010,
|
||||
"category": "secubox",
|
||||
"icon": "package",
|
||||
"description": "SecuBox backend service",
|
||||
@ -1122,7 +1122,7 @@
|
||||
"name": "secubox-app-hexojs",
|
||||
"version": "1.0.0-r8",
|
||||
"filename": "secubox-app-hexojs_1.0.0-r8_all.ipk",
|
||||
"size": 100061,
|
||||
"size": 100062,
|
||||
"category": "secubox",
|
||||
"icon": "package",
|
||||
"description": "SecuBox backend service",
|
||||
@ -1134,7 +1134,7 @@
|
||||
"name": "secubox-app-ipblocklist",
|
||||
"version": "1.0.0-r1",
|
||||
"filename": "secubox-app-ipblocklist_1.0.0-r1_all.ipk",
|
||||
"size": 4698,
|
||||
"size": 4697,
|
||||
"category": "secubox",
|
||||
"icon": "package",
|
||||
"description": "SecuBox backend service",
|
||||
@ -1146,7 +1146,7 @@
|
||||
"name": "secubox-app-jabber",
|
||||
"version": "1.0.0-r1",
|
||||
"filename": "secubox-app-jabber_1.0.0-r1_all.ipk",
|
||||
"size": 13276,
|
||||
"size": 13278,
|
||||
"category": "secubox",
|
||||
"icon": "package",
|
||||
"description": "SecuBox backend service",
|
||||
@ -1158,7 +1158,7 @@
|
||||
"name": "secubox-app-jellyfin",
|
||||
"version": "3.0.0-r1",
|
||||
"filename": "secubox-app-jellyfin_3.0.0-r1_all.ipk",
|
||||
"size": 4746,
|
||||
"size": 4753,
|
||||
"category": "secubox",
|
||||
"icon": "package",
|
||||
"description": "SecuBox backend service",
|
||||
@ -1170,7 +1170,7 @@
|
||||
"name": "secubox-app-jitsi",
|
||||
"version": "1.0.0-r1",
|
||||
"filename": "secubox-app-jitsi_1.0.0-r1_all.ipk",
|
||||
"size": 8921,
|
||||
"size": 8925,
|
||||
"category": "secubox",
|
||||
"icon": "package",
|
||||
"description": "SecuBox backend service",
|
||||
@ -1182,7 +1182,7 @@
|
||||
"name": "secubox-app-localai",
|
||||
"version": "3.9.0-r1",
|
||||
"filename": "secubox-app-localai_3.9.0-r1_all.ipk",
|
||||
"size": 5838,
|
||||
"size": 5845,
|
||||
"category": "secubox",
|
||||
"icon": "package",
|
||||
"description": "SecuBox backend service",
|
||||
@ -1194,7 +1194,7 @@
|
||||
"name": "secubox-app-localai-wb",
|
||||
"version": "2.25.0-r1",
|
||||
"filename": "secubox-app-localai-wb_2.25.0-r1_all.ipk",
|
||||
"size": 7947,
|
||||
"size": 7949,
|
||||
"category": "secubox",
|
||||
"icon": "package",
|
||||
"description": "SecuBox backend service",
|
||||
@ -1206,7 +1206,7 @@
|
||||
"name": "secubox-app-lyrion",
|
||||
"version": "2.0.2-r1",
|
||||
"filename": "secubox-app-lyrion_2.0.2-r1_all.ipk",
|
||||
"size": 8122,
|
||||
"size": 8130,
|
||||
"category": "secubox",
|
||||
"icon": "package",
|
||||
"description": "SecuBox backend service",
|
||||
@ -1218,7 +1218,7 @@
|
||||
"name": "secubox-app-mac-guardian",
|
||||
"version": "0.5.0-r1",
|
||||
"filename": "secubox-app-mac-guardian_0.5.0-r1_all.ipk",
|
||||
"size": 12096,
|
||||
"size": 12098,
|
||||
"category": "secubox",
|
||||
"icon": "package",
|
||||
"description": "SecuBox backend service",
|
||||
@ -1230,7 +1230,7 @@
|
||||
"name": "secubox-app-magicmirror2",
|
||||
"version": "0.4.0-r8",
|
||||
"filename": "secubox-app-magicmirror2_0.4.0-r8_all.ipk",
|
||||
"size": 9248,
|
||||
"size": 9249,
|
||||
"category": "secubox",
|
||||
"icon": "package",
|
||||
"description": "SecuBox backend service",
|
||||
@ -1254,7 +1254,7 @@
|
||||
"name": "secubox-app-mailserver",
|
||||
"version": "2.0.0-r1",
|
||||
"filename": "secubox-app-mailserver_2.0.0-r1_all.ipk",
|
||||
"size": 5694,
|
||||
"size": 5700,
|
||||
"category": "secubox",
|
||||
"icon": "package",
|
||||
"description": "SecuBox backend service",
|
||||
@ -1266,10 +1266,10 @@
|
||||
"name": "secubox-app-matrix",
|
||||
"version": "1.0.0-r1",
|
||||
"filename": "secubox-app-matrix_1.0.0-r1_all.ipk",
|
||||
"size": 10453,
|
||||
"category": "messaging",
|
||||
"icon": "message-square",
|
||||
"description": "Matrix/Conduit federated E2EE messaging server",
|
||||
"size": 10448,
|
||||
"category": "secubox",
|
||||
"icon": "package",
|
||||
"description": "SecuBox backend service",
|
||||
"installed": false,
|
||||
"luci_app": "luci-app-matrix"
|
||||
}
|
||||
@ -1278,7 +1278,7 @@
|
||||
"name": "secubox-app-metabolizer",
|
||||
"version": "1.0.0-r3",
|
||||
"filename": "secubox-app-metabolizer_1.0.0-r3_all.ipk",
|
||||
"size": 13976,
|
||||
"size": 13983,
|
||||
"category": "secubox",
|
||||
"icon": "package",
|
||||
"description": "SecuBox backend service",
|
||||
@ -1290,7 +1290,7 @@
|
||||
"name": "secubox-app-mitmproxy",
|
||||
"version": "0.5.0-r19",
|
||||
"filename": "secubox-app-mitmproxy_0.5.0-r19_all.ipk",
|
||||
"size": 22957,
|
||||
"size": 22952,
|
||||
"category": "secubox",
|
||||
"icon": "package",
|
||||
"description": "SecuBox backend service",
|
||||
@ -1302,7 +1302,7 @@
|
||||
"name": "secubox-app-mmpm",
|
||||
"version": "0.2.0-r5",
|
||||
"filename": "secubox-app-mmpm_0.2.0-r5_all.ipk",
|
||||
"size": 3975,
|
||||
"size": 3976,
|
||||
"category": "secubox",
|
||||
"icon": "package",
|
||||
"description": "SecuBox backend service",
|
||||
@ -1314,7 +1314,7 @@
|
||||
"name": "secubox-app-nextcloud",
|
||||
"version": "1.0.0-r2",
|
||||
"filename": "secubox-app-nextcloud_1.0.0-r2_all.ipk",
|
||||
"size": 9671,
|
||||
"size": 9675,
|
||||
"category": "secubox",
|
||||
"icon": "package",
|
||||
"description": "SecuBox backend service",
|
||||
@ -1326,7 +1326,7 @@
|
||||
"name": "secubox-app-ollama",
|
||||
"version": "0.1.0-r1",
|
||||
"filename": "secubox-app-ollama_0.1.0-r1_all.ipk",
|
||||
"size": 5731,
|
||||
"size": 5738,
|
||||
"category": "secubox",
|
||||
"icon": "package",
|
||||
"description": "SecuBox backend service",
|
||||
@ -1338,7 +1338,7 @@
|
||||
"name": "secubox-app-picobrew",
|
||||
"version": "1.0.0-r7",
|
||||
"filename": "secubox-app-picobrew_1.0.0-r7_all.ipk",
|
||||
"size": 5543,
|
||||
"size": 5533,
|
||||
"category": "secubox",
|
||||
"icon": "package",
|
||||
"description": "SecuBox backend service",
|
||||
@ -1350,7 +1350,7 @@
|
||||
"name": "secubox-app-rustdesk",
|
||||
"version": "1.0.0-r1",
|
||||
"filename": "secubox-app-rustdesk_1.0.0-r1_all.ipk",
|
||||
"size": 4466,
|
||||
"size": 4465,
|
||||
"category": "secubox",
|
||||
"icon": "package",
|
||||
"description": "SecuBox backend service",
|
||||
@ -1362,7 +1362,7 @@
|
||||
"name": "secubox-app-simplex",
|
||||
"version": "1.0.0-r1",
|
||||
"filename": "secubox-app-simplex_1.0.0-r1_all.ipk",
|
||||
"size": 9367,
|
||||
"size": 9368,
|
||||
"category": "secubox",
|
||||
"icon": "package",
|
||||
"description": "SecuBox backend service",
|
||||
@ -1374,7 +1374,7 @@
|
||||
"name": "secubox-app-smbfs",
|
||||
"version": "1.0.0-r1",
|
||||
"filename": "secubox-app-smbfs_1.0.0-r1_all.ipk",
|
||||
"size": 5268,
|
||||
"size": 5253,
|
||||
"category": "secubox",
|
||||
"icon": "package",
|
||||
"description": "SecuBox backend service",
|
||||
@ -1386,7 +1386,7 @@
|
||||
"name": "secubox-app-streamlit",
|
||||
"version": "1.0.0-r5",
|
||||
"filename": "secubox-app-streamlit_1.0.0-r5_all.ipk",
|
||||
"size": 16512,
|
||||
"size": 16515,
|
||||
"category": "secubox",
|
||||
"icon": "package",
|
||||
"description": "SecuBox backend service",
|
||||
@ -1398,7 +1398,7 @@
|
||||
"name": "secubox-app-tor",
|
||||
"version": "1.0.0-r1",
|
||||
"filename": "secubox-app-tor_1.0.0-r1_all.ipk",
|
||||
"size": 7371,
|
||||
"size": 7372,
|
||||
"category": "secubox",
|
||||
"icon": "package",
|
||||
"description": "SecuBox backend service",
|
||||
@ -1410,7 +1410,7 @@
|
||||
"name": "secubox-app-voip",
|
||||
"version": "1.0.0-r1",
|
||||
"filename": "secubox-app-voip_1.0.0-r1_all.ipk",
|
||||
"size": 11955,
|
||||
"size": 11954,
|
||||
"category": "secubox",
|
||||
"icon": "package",
|
||||
"description": "SecuBox backend service",
|
||||
@ -1422,7 +1422,7 @@
|
||||
"name": "secubox-app-webapp",
|
||||
"version": "1.5.0-r7",
|
||||
"filename": "secubox-app-webapp_1.5.0-r7_all.ipk",
|
||||
"size": 39177,
|
||||
"size": 39175,
|
||||
"category": "secubox",
|
||||
"icon": "package",
|
||||
"description": "SecuBox backend service",
|
||||
@ -1446,7 +1446,7 @@
|
||||
"name": "secubox-config-advisor",
|
||||
"version": "0.1.0-r1",
|
||||
"filename": "secubox-config-advisor_0.1.0-r1_all.ipk",
|
||||
"size": 14849,
|
||||
"size": 14848,
|
||||
"category": "utility",
|
||||
"icon": "package",
|
||||
"description": "SecuBox package",
|
||||
@ -1458,7 +1458,7 @@
|
||||
"name": "secubox-content-pkg",
|
||||
"version": "1.0.0-r1",
|
||||
"filename": "secubox-content-pkg_1.0.0-r1_all.ipk",
|
||||
"size": 3909,
|
||||
"size": 3910,
|
||||
"category": "utility",
|
||||
"icon": "package",
|
||||
"description": "SecuBox package",
|
||||
@ -1506,7 +1506,7 @@
|
||||
"name": "secubox-dns-guard",
|
||||
"version": "1.0.0-r1",
|
||||
"filename": "secubox-dns-guard_1.0.0-r1_all.ipk",
|
||||
"size": 12482,
|
||||
"size": 12485,
|
||||
"category": "utility",
|
||||
"icon": "package",
|
||||
"description": "SecuBox package",
|
||||
@ -1518,7 +1518,7 @@
|
||||
"name": "secubox-identity",
|
||||
"version": "0.1.0-r1",
|
||||
"filename": "secubox-identity_0.1.0-r1_all.ipk",
|
||||
"size": 8084,
|
||||
"size": 8089,
|
||||
"category": "utility",
|
||||
"icon": "package",
|
||||
"description": "SecuBox package",
|
||||
@ -1530,7 +1530,7 @@
|
||||
"name": "secubox-iot-guard",
|
||||
"version": "1.0.0-r1",
|
||||
"filename": "secubox-iot-guard_1.0.0-r1_all.ipk",
|
||||
"size": 13370,
|
||||
"size": 13369,
|
||||
"category": "utility",
|
||||
"icon": "package",
|
||||
"description": "SecuBox package",
|
||||
@ -1542,7 +1542,7 @@
|
||||
"name": "secubox-localrecall",
|
||||
"version": "1.0.0-r1",
|
||||
"filename": "secubox-localrecall_1.0.0-r1_all.ipk",
|
||||
"size": 7793,
|
||||
"size": 7800,
|
||||
"category": "utility",
|
||||
"icon": "package",
|
||||
"description": "SecuBox package",
|
||||
@ -1554,7 +1554,7 @@
|
||||
"name": "secubox-master-link",
|
||||
"version": "1.0.0-r1",
|
||||
"filename": "secubox-master-link_1.0.0-r1_all.ipk",
|
||||
"size": 15035,
|
||||
"size": 15038,
|
||||
"category": "utility",
|
||||
"icon": "package",
|
||||
"description": "SecuBox package",
|
||||
@ -1578,7 +1578,7 @@
|
||||
"name": "secubox-mirrornet",
|
||||
"version": "0.1.0-r1",
|
||||
"filename": "secubox-mirrornet_0.1.0-r1_all.ipk",
|
||||
"size": 15309,
|
||||
"size": 15308,
|
||||
"category": "utility",
|
||||
"icon": "package",
|
||||
"description": "SecuBox package",
|
||||
@ -1590,7 +1590,7 @@
|
||||
"name": "secubox-network-anomaly",
|
||||
"version": "1.0.0-r1",
|
||||
"filename": "secubox-network-anomaly_1.0.0-r1_all.ipk",
|
||||
"size": 6167,
|
||||
"size": 6165,
|
||||
"category": "utility",
|
||||
"icon": "package",
|
||||
"description": "SecuBox package",
|
||||
@ -1602,7 +1602,7 @@
|
||||
"name": "secubox-p2p",
|
||||
"version": "0.6.0-r3",
|
||||
"filename": "secubox-p2p_0.6.0-r3_all.ipk",
|
||||
"size": 47860,
|
||||
"size": 47869,
|
||||
"category": "utility",
|
||||
"icon": "package",
|
||||
"description": "SecuBox package",
|
||||
@ -1614,7 +1614,7 @@
|
||||
"name": "secubox-p2p-intel",
|
||||
"version": "0.1.0-r1",
|
||||
"filename": "secubox-p2p-intel_0.1.0-r1_all.ipk",
|
||||
"size": 9801,
|
||||
"size": 9797,
|
||||
"category": "utility",
|
||||
"icon": "package",
|
||||
"description": "SecuBox package",
|
||||
@ -1626,7 +1626,7 @@
|
||||
"name": "secubox-threat-analyst",
|
||||
"version": "1.0.0-r1",
|
||||
"filename": "secubox-threat-analyst_1.0.0-r1_all.ipk",
|
||||
"size": 9863,
|
||||
"size": 9868,
|
||||
"category": "utility",
|
||||
"icon": "package",
|
||||
"description": "SecuBox package",
|
||||
@ -1638,7 +1638,7 @@
|
||||
"name": "secubox-vortex-dns",
|
||||
"version": "1.0.0-r1",
|
||||
"filename": "secubox-vortex-dns_1.0.0-r1_all.ipk",
|
||||
"size": 5441,
|
||||
"size": 5442,
|
||||
"category": "utility",
|
||||
"icon": "package",
|
||||
"description": "SecuBox package",
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user