Backend: * Migration 0009_networks: network_interfaces (ethernet|vlan|bond| bridge|wireguard, role wan|lan|dmz|mgmt|cluster, parent + vlan_id für VLANs) + ip_addresses (interface_id FK, address+prefix, is_vip + vip_priority für Cluster-Failover-VIPs). * Repos services/networkifs + services/ipaddresses + Models + Handler /api/v1/network-interfaces (CRUD + /:id/ip-addresses) und /api/v1/ip-addresses (CRUD). * /api/v1/system/interfaces refactored auf Go-natives net.Interfaces() statt `ip -j addr show` shell-out — die systemd-Sandbox blockt AF_NETLINK auch für Go's runtime, deswegen edgeguard-api.service RestrictAddressFamilies um AF_NETLINK ergänzt. Output-Shape bleibt identisch (ifindex, ifname, flags[], mtu, link_type, address, addr_info[]) — Frontend muss nicht angepasst werden. Frontend: * Networks-Page (/networks): "System-discovered Interfaces" read-only Tags-Card oben, deklarierte Interfaces unten als Tabelle mit Modal-CRUD; Type-Switch zeigt parent+vlan_id-Felder bei type=vlan; Role-Tags farbig (wan blau, lan grün, dmz orange, mgmt purple, cluster magenta). * IPAddresses-Page (/ip-addresses): Tabelle pro Interface, VIP- Toggle blendet vip_priority-Eingabe ein. Goldenes VIP-Tag in der Liste. * Sidebar erweitert um Networks + IP-Adressen + section-grouping. Design 1:1 von mail-gateway/management-ui/ übernommen: * enterprise.css verbatim (Inter-Font via Google CDN statt local woff2), Sidebar 240px dunkler Gradient #0B1426→#101D33→#0D1829, branding-accent #1677ff für Active-State, abgerundete Cards mit shadow-Token, Header weiß mit subtilem backdrop-filter. * AntD-Theme-Tokens: colorPrimary #0EA5E9, fontSize 13, fontFamily 'Inter', controlHeight 34, borderRadius 6. * Layout-Komponenten neu strukturiert: AppLayout/Sidebar/Header matchen mailguard-Klassen-Naming (.app-layout, .main-content, .sidebar-section, .sidebar-menu-item.active, .header-left, …). * Sidebar mit 4 Sektionen (Übersicht / Routing / Netzwerk / System) + Logo-Header + Versions-Footer. Live-deployed auf 89.163.205.6: Networks-Endpoint listet eth0 (89.163.205.6/24, MAC bc:24:11:64:29:e8) + lo, frontend zeigt sie als System-Tags in der Networks-Page. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
166 lines
5.1 KiB
JSON
166 lines
5.1 KiB
JSON
{
|
||
"app": {
|
||
"title": "EdgeGuard",
|
||
"subtitle": "Native Reverse-Proxy / VPN / Firewall"
|
||
},
|
||
"nav": {
|
||
"dashboard": "Dashboard",
|
||
"domains": "Domains",
|
||
"backends": "Backends",
|
||
"routing": "Routing",
|
||
"networks": "Netzwerk-Interfaces",
|
||
"ipAddresses": "IP-Adressen",
|
||
"ssl": "SSL-Zertifikate",
|
||
"vpn": "VPN",
|
||
"firewall": "Firewall",
|
||
"cluster": "Cluster",
|
||
"settings": "Einstellungen",
|
||
"section": {
|
||
"overview": "Übersicht",
|
||
"routing": "Routing",
|
||
"network": "Netzwerk",
|
||
"system": "System"
|
||
}
|
||
},
|
||
"networks": {
|
||
"title": "Netzwerk-Interfaces",
|
||
"intro": "Verwalte WAN-, LAN-, VLAN- und Bond-Interfaces. Read-only-Discovery der Kernel-Interfaces oben; deklarierte Konfiguration unten — runtime-Apply via systemd-networkd folgt in einem späteren Release.",
|
||
"systemDiscovered": "System-Interfaces (read-only)",
|
||
"addInterface": "Interface hinzufügen",
|
||
"editInterface": "Interface bearbeiten",
|
||
"name": "Name",
|
||
"type": "Typ",
|
||
"parent": "Parent-Interface",
|
||
"vlan": "VLAN",
|
||
"vlanId": "VLAN-ID",
|
||
"role": "Rolle",
|
||
"mtu": "MTU",
|
||
"active": "Aktiv",
|
||
"description": "Beschreibung",
|
||
"actions": "Aktionen",
|
||
"deleteConfirm": "Interface {{name}} wirklich löschen?"
|
||
},
|
||
"ips": {
|
||
"title": "IP-Adressen",
|
||
"intro": "Adressen, die EdgeGuard verwaltet — inklusive VIPs für Cluster-Failover. Bindung an die deklarierten Interfaces oben.",
|
||
"addAddress": "Adresse hinzufügen",
|
||
"editAddress": "Adresse bearbeiten",
|
||
"interface": "Interface",
|
||
"selectInterface": "Interface wählen",
|
||
"address": "Adresse",
|
||
"prefix": "Prefix",
|
||
"vip": "VIP",
|
||
"vipFlag": "Als VIP markieren",
|
||
"vipPriority": "VIP-Priorität (Cluster-Failover)",
|
||
"active": "Aktiv",
|
||
"description": "Beschreibung",
|
||
"actions": "Aktionen",
|
||
"deleteConfirm": "Adresse {{addr}} wirklich löschen?"
|
||
},
|
||
"auth": {
|
||
"loginTitle": "Anmelden",
|
||
"email": "E-Mail",
|
||
"password": "Passwort",
|
||
"login": "Anmelden",
|
||
"logout": "Abmelden",
|
||
"loginFailed": "Anmeldung fehlgeschlagen",
|
||
"loggedInAs": "Angemeldet als"
|
||
},
|
||
"setup": {
|
||
"title": "Erst-Einrichtung",
|
||
"intro": "Lege den Admin-Account an, gib die öffentliche FQDN an und – optional – einen Lizenzschlüssel. Ohne Lizenz startet eine 30-Tage-Trial.",
|
||
"adminEmail": "Admin-E-Mail",
|
||
"adminPassword": "Admin-Passwort",
|
||
"passwordRule": "Mindestens 12 Zeichen.",
|
||
"fqdn": "Öffentliche FQDN",
|
||
"acmeEmail": "ACME-/Let's-Encrypt-E-Mail",
|
||
"licenseKey": "Lizenzschlüssel (optional)",
|
||
"submit": "Setup abschließen",
|
||
"successTitle": "Setup abgeschlossen",
|
||
"successHint": "Du wirst zur Anmeldung weitergeleitet."
|
||
},
|
||
"dashboard": {
|
||
"title": "Dashboard",
|
||
"welcomeHint": "Übersicht aller laufenden EdgeGuard-Komponenten."
|
||
},
|
||
"domains": {
|
||
"title": "Domains",
|
||
"addDomain": "Domain hinzufügen",
|
||
"editDomain": "Domain bearbeiten",
|
||
"name": "Name",
|
||
"active": "Aktiv",
|
||
"primaryBackend": "Primary-Backend",
|
||
"httpToHttps": "HTTP→HTTPS",
|
||
"hsts": "HSTS",
|
||
"notes": "Notizen",
|
||
"actions": "Aktionen",
|
||
"edit": "Bearbeiten",
|
||
"delete": "Löschen",
|
||
"deleteConfirm": "Domain {{name}} wirklich löschen?"
|
||
},
|
||
"backends": {
|
||
"title": "Backends",
|
||
"addBackend": "Backend hinzufügen",
|
||
"editBackend": "Backend bearbeiten",
|
||
"name": "Name",
|
||
"scheme": "Schema",
|
||
"address": "Adresse",
|
||
"port": "Port",
|
||
"target": "Ziel",
|
||
"healthCheck": "Health-Check-Pfad",
|
||
"active": "Aktiv",
|
||
"actions": "Aktionen",
|
||
"deleteConfirm": "Backend {{name}} wirklich löschen?"
|
||
},
|
||
"routing": {
|
||
"title": "Routing-Regeln",
|
||
"addRule": "Regel hinzufügen",
|
||
"editRule": "Regel bearbeiten",
|
||
"domain": "Domain",
|
||
"pathPrefix": "Pfad-Präfix",
|
||
"backend": "Backend",
|
||
"priority": "Priorität",
|
||
"active": "Aktiv",
|
||
"actions": "Aktionen",
|
||
"selectDomain": "Domain wählen",
|
||
"selectBackend": "Backend wählen",
|
||
"deleteConfirm": "Diese Routing-Regel wirklich löschen?"
|
||
},
|
||
"cluster": {
|
||
"title": "Cluster",
|
||
"intro": "{{count}} Node(s) registriert. Multi-Node-Cluster (KeyDB Active-Active + PG Streaming Replication) folgt in einem späteren Release.",
|
||
"id": "Node-ID",
|
||
"fqdn": "FQDN",
|
||
"role": "Rolle",
|
||
"joinedAt": "Beigetreten",
|
||
"self": "diese Node"
|
||
},
|
||
"settings": {
|
||
"title": "Einstellungen",
|
||
"intro": "System-Information und Setup-Status. Bearbeitbare Werte folgen in einem späteren Release.",
|
||
"systemInfo": "System",
|
||
"version": "Version",
|
||
"status": "Status",
|
||
"setupInfo": "Setup",
|
||
"adminEmail": "Admin-E-Mail",
|
||
"fqdn": "FQDN",
|
||
"setupCompleted": "Setup abgeschlossen"
|
||
},
|
||
"update": {
|
||
"available": "Update verfügbar: {{pkg}} {{installed}} → {{available}}",
|
||
"applyNow": "Jetzt aktualisieren",
|
||
"applying": "Update läuft …",
|
||
"started": "Update wurde gestartet — der Server wird in Kürze neu starten."
|
||
},
|
||
"common": {
|
||
"yes": "Ja",
|
||
"no": "Nein",
|
||
"save": "Speichern",
|
||
"cancel": "Abbrechen",
|
||
"loading": "Lädt …",
|
||
"error": "Fehler",
|
||
"edit": "Bearbeiten",
|
||
"delete": "Löschen"
|
||
}
|
||
}
|