From 24c40bc77636c212460c51227c7d3da43e679347 Mon Sep 17 00:00:00 2001 From: Debian Date: Wed, 13 May 2026 07:04:19 +0200 Subject: [PATCH] refactor(fwlog): Live-Log als Child-Route /firewall/live statt Firewall-Tab MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit User-Feedback: Tab fühlt sich falsch an, will eine eigene Page mit URL-Pfad unter /firewall. UI: - pages/Firewall/LiveLog.tsx → pages/FirewallLive/index.tsx - FirewallPage entfernt den live-Tab aus tabs[] - App.tsx routet /firewall/live → FirewallLivePage - Sidebar: neuer Eintrag „Firewall-Log" eingerückt direkt unter „Firewall" in der Security-Section (child: true Flag → CSS-Klasse sidebar-menu-item--child mit padding-left 28px + dünnem vertikalem Trenn-Stab links). Sibling-Active-Logik exklusiv: /firewall matched NICHT mehr wenn /firewall/live aktiv ist. - AppLayout PAGE_TITLES bekommt /firewall/live VOR /firewall damit der Title-Lookup den spezifischeren Pfad zuerst trifft. Keine Backend-Änderungen. Bekanntes Verhalten zu erklären: Im Live-Log sehen User aktuell nur Smoke-Test-Events (oob.prefix=edgeguard:smoke / edgeguard:42, src/dst 127.0.0.1) — das sind die manuell-injizierten nft-Rules vom End-to- End-Test der Pipeline. Reale Pakete fließen erst durch, wenn der Operator auf einer firewall_rule den Log-Switch aktiviert (Firewall → Regeln → bearbeiten → Logging an). Aktuell hat keine einzige Rule log=true. Co-Authored-By: Claude Opus 4.7 (1M context) --- VERSION | 2 +- cmd/edgeguard-api/main.go | 2 +- cmd/edgeguard-ctl/main.go | 2 +- cmd/edgeguard-scheduler/main.go | 2 +- management-ui/src/App.tsx | 2 ++ .../src/components/Layout/AppLayout.tsx | 2 ++ .../src/components/Layout/Sidebar.tsx | 27 ++++++++++++++----- management-ui/src/pages/Firewall/index.tsx | 2 -- .../LiveLog.tsx => FirewallLive/index.tsx} | 10 ++++++- management-ui/src/styles/enterprise.css | 18 +++++++++++++ 10 files changed, 55 insertions(+), 14 deletions(-) rename management-ui/src/pages/{Firewall/LiveLog.tsx => FirewallLive/index.tsx} (98%) diff --git a/VERSION b/VERSION index c8b4742..01c08cf 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.0.67 +1.0.68 diff --git a/cmd/edgeguard-api/main.go b/cmd/edgeguard-api/main.go index f873893..601225a 100644 --- a/cmd/edgeguard-api/main.go +++ b/cmd/edgeguard-api/main.go @@ -52,7 +52,7 @@ import ( wgsvc "git.netcell-it.de/projekte/edgeguard-native/internal/services/wireguard" ) -var version = "1.0.67" +var version = "1.0.68" func main() { addr := os.Getenv("EDGEGUARD_API_ADDR") diff --git a/cmd/edgeguard-ctl/main.go b/cmd/edgeguard-ctl/main.go index 50193e5..8298191 100644 --- a/cmd/edgeguard-ctl/main.go +++ b/cmd/edgeguard-ctl/main.go @@ -9,7 +9,7 @@ import ( "os" ) -var version = "1.0.67" +var version = "1.0.68" const usage = `edgeguard-ctl — EdgeGuard CLI diff --git a/cmd/edgeguard-scheduler/main.go b/cmd/edgeguard-scheduler/main.go index d5caefa..50addfc 100644 --- a/cmd/edgeguard-scheduler/main.go +++ b/cmd/edgeguard-scheduler/main.go @@ -25,7 +25,7 @@ import ( "git.netcell-it.de/projekte/edgeguard-native/internal/services/tlscerts" ) -var version = "1.0.67" +var version = "1.0.68" const ( // renewTickInterval — how often we re-evaluate expiring certs. diff --git a/management-ui/src/App.tsx b/management-ui/src/App.tsx index 835ae38..a1ea82c 100644 --- a/management-ui/src/App.tsx +++ b/management-ui/src/App.tsx @@ -25,6 +25,7 @@ const ForwardProxyPage = lazy(() => import('./pages/ForwardProxy')) const DNSPage = lazy(() => import('./pages/DNS')) const NTPPage = lazy(() => import('./pages/NTP')) const ClusterPage = lazy(() => import('./pages/Cluster')) +const FirewallLivePage = lazy(() => import('./pages/FirewallLive')) const LogsPage = lazy(() => import('./pages/Logs')) const BackupsPage = lazy(() => import('./pages/Backups')) const LicensePage = lazy(() => import('./pages/License')) @@ -106,6 +107,7 @@ export default function App() { } /> } /> } /> + } /> } /> } /> } /> diff --git a/management-ui/src/components/Layout/AppLayout.tsx b/management-ui/src/components/Layout/AppLayout.tsx index 48982ee..6fc9603 100644 --- a/management-ui/src/components/Layout/AppLayout.tsx +++ b/management-ui/src/components/Layout/AppLayout.tsx @@ -16,6 +16,8 @@ const PAGE_TITLES: Record = { '/routing-rules': 'nav.routing', '/networks': 'nav.networks', '/ip-addresses': 'nav.ipAddresses', + '/firewall/live': 'nav.firewallLive', + '/firewall': 'nav.firewall', '/cluster': 'nav.cluster', '/logs': 'nav.logs', '/backups': 'nav.backups', diff --git a/management-ui/src/components/Layout/Sidebar.tsx b/management-ui/src/components/Layout/Sidebar.tsx index 2d3531a..d640367 100644 --- a/management-ui/src/components/Layout/Sidebar.tsx +++ b/management-ui/src/components/Layout/Sidebar.tsx @@ -7,6 +7,7 @@ import { ClusterOutlined, CrownOutlined, DashboardOutlined, + EyeOutlined, FileSearchOutlined, DatabaseOutlined, FireOutlined, @@ -27,6 +28,7 @@ interface NavItem { path: string labelKey: string icon: ReactNode + child?: boolean // visuell eingerückt unter dem Parent-Item } interface NavSection { @@ -62,6 +64,7 @@ const NAV: NavSection[] = [ labelKey: 'nav.section.security', items: [ { path: '/firewall', labelKey: 'nav.firewall', icon: }, + { path: '/firewall/live', labelKey: 'nav.firewallLive', icon: , child: true }, { path: '/vpn/wireguard', labelKey: 'nav.wireguard', icon: }, { path: '/forward-proxy', labelKey: 'nav.forwardProxy', icon: }, ], @@ -78,7 +81,7 @@ const NAV: NavSection[] = [ }, ] -const VERSION = '1.0.67' +const VERSION = '1.0.68' // Sidebar-Pattern 1:1 aus netcell-webpanel (enconf) übernommen: // -