diff --git a/package/secubox/secubox-app-webapp/Makefile b/package/secubox/secubox-app-webapp/Makefile index 244aacbb..1fcd70da 100644 --- a/package/secubox/secubox-app-webapp/Makefile +++ b/package/secubox/secubox-app-webapp/Makefile @@ -1,7 +1,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=secubox-app-webapp -PKG_VERSION:=1.2.0 +PKG_VERSION:=1.4.1 PKG_RELEASE:=1 PKG_LICENSE:=MIT PKG_MAINTAINER:=CyberMind.FR @@ -37,8 +37,8 @@ define Package/secubox-app-webapp/install $(INSTALL_DIR) $(1)/etc/config $(INSTALL_CONF) ./files/etc/config/secubox-webapp $(1)/etc/config/secubox-webapp - $(INSTALL_DIR) $(1)/www/secubox-dashboard - $(INSTALL_DATA) ./files/www/secubox-dashboard/index.html $(1)/www/secubox-dashboard/index.html + $(INSTALL_DIR) $(1)/www/secubox + $(INSTALL_DATA) ./files/www/secubox-dashboard/index.html $(1)/www/secubox/index.html $(INSTALL_DIR) $(1)/usr/share/rpcd/acl.d $(INSTALL_DATA) ./files/usr/share/rpcd/acl.d/secubox-dashboard.json $(1)/usr/share/rpcd/acl.d/secubox-dashboard.json @@ -64,8 +64,8 @@ uci commit uhttpd /etc/init.d/rpcd restart /etc/init.d/uhttpd restart -echo "SecuBox Dashboard installed at /www/secubox-dashboard/" -echo "Access via: http:///secubox-dashboard/" +echo "SecuBox Dashboard installed at /www/secubox/" +echo "Access via: http:///secubox/" exit 0 endef diff --git a/package/secubox/secubox-app-webapp/files/usr/sbin/secubox-webapp-setup b/package/secubox/secubox-app-webapp/files/usr/sbin/secubox-webapp-setup index 51c6779e..388b7a0d 100644 --- a/package/secubox/secubox-app-webapp/files/usr/sbin/secubox-webapp-setup +++ b/package/secubox/secubox-app-webapp/files/usr/sbin/secubox-webapp-setup @@ -17,7 +17,7 @@ Commands: check Check rpcd/uhttpd configuration info Show access URLs -Dashboard URL: http:///secubox-dashboard/ +Dashboard URL: http:///secubox/ EOF } @@ -60,7 +60,7 @@ cmd_status() { fi # Check dashboard files - if [ -f /www/secubox-dashboard/index.html ]; then + if [ -f /www/secubox/index.html ]; then echo "Dashboard: installed" else echo "Dashboard: not found" @@ -69,7 +69,7 @@ cmd_status() { echo "" echo "=== Access URL ===" local lan_ip=$(uci -q get network.lan.ipaddr || echo "192.168.1.1") - echo "http://$lan_ip/secubox-dashboard/" + echo "http://$lan_ip/secubox/" } cmd_enable() { @@ -147,7 +147,7 @@ cmd_info() { echo "║ SecuBox Dashboard - Access Information ║" echo "╠════════════════════════════════════════════════════════════╣" echo "║ ║" - printf "║ Dashboard: %-46s ║\n" "http://$lan_ip/secubox-dashboard/" + printf "║ Dashboard: %-46s ║\n" "http://$lan_ip/secubox/" printf "║ UBUS API: %-46s ║\n" "http://$lan_ip/ubus" echo "║ ║" echo "║ Login: Use OpenWrt root credentials ║" diff --git a/package/secubox/secubox-app-webapp/files/www/secubox-dashboard/index.html b/package/secubox/secubox-app-webapp/files/www/secubox-dashboard/index.html index c82e37d5..697da11f 100644 --- a/package/secubox/secubox-app-webapp/files/www/secubox-dashboard/index.html +++ b/package/secubox/secubox-app-webapp/files/www/secubox-dashboard/index.html @@ -1248,6 +1248,40 @@ background: rgba(244, 63, 94, 0.25); } + /* Quick Actions Grid */ + .quick-actions-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); + gap: 1.5rem; + } + + .quick-action-group { + display: flex; + flex-direction: column; + gap: 0.75rem; + } + + .quick-action-title { + font-size: 0.7rem; + font-weight: 600; + color: var(--text-muted); + text-transform: uppercase; + letter-spacing: 0.05em; + padding-bottom: 0.5rem; + border-bottom: 1px solid var(--border); + } + + .quick-action-buttons { + display: flex; + flex-direction: column; + gap: 0.5rem; + } + + .quick-action-buttons .action-btn { + justify-content: flex-start; + width: 100%; + } + /* Interfaces Table */ .interfaces-table { width: 100%; @@ -1642,6 +1676,71 @@ color: var(--emerald); } + .service-btn.warning:hover { + border-color: var(--amber); + color: var(--amber); + } + + .service-item.important { + border-left: 3px solid var(--cyan); + } + + .service-badge { + font-size: 0.6rem; + padding: 0.125rem 0.375rem; + background: var(--cyan-glow); + color: var(--cyan); + border-radius: 0.25rem; + margin-left: 0.5rem; + text-transform: uppercase; + letter-spacing: 0.05em; + } + + .status-running { + color: var(--emerald); + } + + .status-stopped { + color: var(--text-muted); + } + + .status-disabled { + color: var(--amber); + font-size: 0.7rem; + } + + .loading-services { + display: flex; + align-items: center; + justify-content: center; + gap: 0.75rem; + padding: 2rem; + color: var(--text-muted); + } + + /* Process Table */ + .process-table { + font-size: 0.75rem; + } + + .process-table th, + .process-table td { + padding: 0.5rem 0.75rem; + } + + .process-cmd { + max-width: 200px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + font-family: 'JetBrains Mono', monospace; + font-size: 0.7rem; + } + + .status-sleeping { + color: var(--text-muted); + } + /* DHCP Leases Table */ .leases-table { width: 100%; @@ -1861,11 +1960,159 @@ border-radius: 0.375rem; } + .skeleton-text { + height: 1em; + width: 60%; + display: inline-block; + } + + .skeleton-value { + height: 2em; + width: 3em; + display: inline-block; + } + @keyframes shimmer { 0% { background-position: 200% 0; } 100% { background-position: -200% 0; } } + /* Value transition animations */ + .value-transition { + transition: all 0.3s ease-out; + } + + .value-increase { + color: var(--emerald) !important; + } + + .value-decrease { + color: var(--rose) !important; + } + + /* Pulse effect for live data */ + .pulse-on-update { + animation: pulseUpdate 0.5s ease-out; + } + + @keyframes pulseUpdate { + 0% { transform: scale(1); opacity: 1; } + 50% { transform: scale(1.05); opacity: 0.8; } + 100% { transform: scale(1); opacity: 1; } + } + + /* Loading overlay */ + .loading-overlay { + position: absolute; + inset: 0; + background: rgba(13, 17, 23, 0.7); + display: flex; + align-items: center; + justify-content: center; + z-index: 10; + opacity: 0; + pointer-events: none; + transition: opacity 0.2s; + } + + .loading-overlay.active { + opacity: 1; + pointer-events: auto; + } + + .spinner { + width: 32px; + height: 32px; + border: 3px solid var(--border); + border-top-color: var(--cyan); + border-radius: 50%; + animation: spin 0.8s linear infinite; + } + + @keyframes spin { + to { transform: rotate(360deg); } + } + + /* Connection status indicator */ + .connection-indicator { + display: flex; + align-items: center; + gap: 0.5rem; + padding: 0.25rem 0.75rem; + background: var(--bg-secondary); + border-radius: 1rem; + font-size: 0.7rem; + transition: all 0.3s; + } + + .connection-indicator.connected { + background: rgba(16, 185, 129, 0.15); + color: var(--emerald); + } + + .connection-indicator.disconnected { + background: rgba(244, 63, 94, 0.15); + color: var(--rose); + } + + .connection-indicator.reconnecting { + background: rgba(245, 158, 11, 0.15); + color: var(--amber); + } + + /* Smooth number counter */ + .counter { + display: inline-block; + transition: transform 0.2s; + } + + /* Progress bar for operations */ + .progress-bar { + height: 3px; + background: var(--bg-secondary); + border-radius: 2px; + overflow: hidden; + position: relative; + } + + .progress-bar-fill { + height: 100%; + background: linear-gradient(90deg, var(--cyan), var(--emerald)); + border-radius: 2px; + transition: width 0.3s ease-out; + } + + .progress-bar.indeterminate .progress-bar-fill { + width: 30%; + animation: indeterminate 1.5s infinite; + } + + @keyframes indeterminate { + 0% { transform: translateX(-100%); } + 100% { transform: translateX(400%); } + } + + /* Real-time badge */ + .realtime-badge { + display: inline-flex; + align-items: center; + gap: 0.375rem; + padding: 0.25rem 0.5rem; + background: rgba(6, 182, 212, 0.15); + border: 1px solid rgba(6, 182, 212, 0.3); + border-radius: 0.375rem; + font-size: 0.65rem; + color: var(--cyan); + } + + .realtime-badge .dot { + width: 6px; + height: 6px; + background: var(--cyan); + border-radius: 50%; + animation: pulse 2s infinite; + } + /* Empty State */ .empty-state { text-align: center; @@ -1877,6 +2124,27 @@ margin-bottom: 1rem; opacity: 0.5; } + + /* Responsive card loading */ + .card.loading { + position: relative; + } + + .card.loading::after { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + height: 2px; + background: linear-gradient(90deg, transparent, var(--cyan), transparent); + animation: loadingBar 1s infinite; + } + + @keyframes loadingBar { + 0% { transform: translateX(-100%); } + 100% { transform: translateX(100%); } + } @@ -2294,31 +2562,58 @@
-
- - - - - - +
+
+
Sécurité
+
+ + + +
+
+
+
Réseau
+
+ + + +
+
+
+
Système
+
+ + + LuCI Admin + + + +
+
@@ -2382,6 +2677,31 @@ + +
+
+
+ + Processus +
+
0 processus
+
+
+ + + + + + + + + + + + +
PIDUtilisateurCPU%MEM%Commande
+
+
@@ -2538,6 +2858,30 @@ +
+
+
+ + Alertes Récentes (24h) +
+
0 alertes
+
+
+ + + + + + + + + + + +
SourceScénarioÉvénementsDate
+
+
+
@@ -2605,6 +2949,31 @@
+
+
+
+ + Redirections de Ports (DNAT) +
+
0 règles
+
+
+ + + + + + + + + + + + +
NomProtocolePort ExterneDestinationÉtat
+
+
+
@@ -2743,7 +3112,7 @@