From 31f504e61b3c8cdc7d9d25e48ee5a9467ed9bd83 Mon Sep 17 00:00:00 2001 From: sysops Date: Sat, 11 Jul 2026 23:53:43 +0200 Subject: [PATCH] Document current product capabilities (multi-server CRUD, per-server access control, confirmed gaps) --- DEVLOG.md | 512 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 512 insertions(+) diff --git a/DEVLOG.md b/DEVLOG.md index 228c3eb..44c77ce 100644 --- a/DEVLOG.md +++ b/DEVLOG.md @@ -830,3 +830,515 @@ Keine Commits in dieser Session. - scripts/install.sh | 5 +++-- --- +## 2026-07-10 18:31 – 18:34 (3m) +**Beschreibung:** Claude Code Session +**Projekt:** wireguard-ui-multi + +### Commits +- 94f0e69 Remove stray tool-generated tmp file accidentally committed +- 867dc77 Replace from-scratch rewrite with real ngoduykhanh/wireguard-ui fork + +### Geänderte Dateien +- .claude/settings.local.json.tmp.2113725.efbfaa50a5c4 | 10 ---------- + +--- +## 2026-07-10 18:35 – 18:38 (2m) +**Beschreibung:** Claude Code Session +**Projekt:** wireguard-ui-multi + +### Commits +- e5c0a58 Adapt installers to upstream wireguard-ui build (Go+embed, yarn assets) + +### Geänderte Dateien +- README.md | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- +- bootstrap.sh | 39 +++++++++++++++++++++++++-------------- +- scripts/install.sh | 70 ++++++++++++++++++++++++++++++++++------------------------------------ +- scripts/proxmox-install.sh | 10 ++++++---- +- systemd/wireguard-ui-multi.service | 21 +++++++++++++++++++++ +- update.sh | 19 ++++++++++++++++--- + +--- +## 2026-07-10 18:48 – 18:48 (0m) +**Beschreibung:** Claude Code Session +**Projekt:** wireguard-ui-multi + +### Commits +Keine Commits in dieser Session. + +### Geänderte Dateien +- README.md | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- +- bootstrap.sh | 39 +++++++++++++++++++++++++-------------- +- scripts/install.sh | 70 ++++++++++++++++++++++++++++++++++------------------------------------ +- scripts/proxmox-install.sh | 10 ++++++---- +- systemd/wireguard-ui-multi.service | 21 +++++++++++++++++++++ +- update.sh | 19 ++++++++++++++++--- + +--- +## 2026-07-10 19:03 – 19:03 (0m) +**Beschreibung:** Claude Code Session +**Projekt:** wireguard-ui-multi + +### Commits +Keine Commits in dieser Session. + +### Geänderte Dateien +- README.md | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- +- bootstrap.sh | 39 +++++++++++++++++++++++++-------------- +- scripts/install.sh | 70 ++++++++++++++++++++++++++++++++++------------------------------------ +- scripts/proxmox-install.sh | 10 ++++++---- +- systemd/wireguard-ui-multi.service | 21 +++++++++++++++++++++ +- update.sh | 19 ++++++++++++++++--- + +--- +## 2026-07-10 19:04 – 19:05 (0m) +**Beschreibung:** Claude Code Session +**Projekt:** wireguard-ui-multi + +### Commits +Keine Commits in dieser Session. + +### Geänderte Dateien +- README.md | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- +- bootstrap.sh | 39 +++++++++++++++++++++++++-------------- +- scripts/install.sh | 70 ++++++++++++++++++++++++++++++++++------------------------------------ +- scripts/proxmox-install.sh | 10 ++++++---- +- systemd/wireguard-ui-multi.service | 21 +++++++++++++++++++++ +- update.sh | 19 ++++++++++++++++--- + +--- +## 2026-07-10 19:06 – 19:07 (0m) +**Beschreibung:** Claude Code Session +**Projekt:** wireguard-ui-multi + +### Commits +Keine Commits in dieser Session. + +### Geänderte Dateien +- README.md | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- +- bootstrap.sh | 39 +++++++++++++++++++++++++-------------- +- scripts/install.sh | 70 ++++++++++++++++++++++++++++++++++------------------------------------ +- scripts/proxmox-install.sh | 10 ++++++---- +- systemd/wireguard-ui-multi.service | 21 +++++++++++++++++++++ +- update.sh | 19 ++++++++++++++++--- + +--- +## 2026-07-11 22:08 – 22:08 (0m) +**Beschreibung:** Claude Code Session +**Projekt:** wireguard-ui-multi + +### Commits +Keine Commits in dieser Session. + +### Geänderte Dateien +- README.md | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- +- bootstrap.sh | 39 +++++++++++++++++++++++++-------------- +- scripts/install.sh | 70 ++++++++++++++++++++++++++++++++++------------------------------------ +- scripts/proxmox-install.sh | 10 ++++++---- +- systemd/wireguard-ui-multi.service | 21 +++++++++++++++++++++ +- update.sh | 19 ++++++++++++++++--- + +--- +## 2026-07-11 22:16 – 22:16 (0m) +**Beschreibung:** Claude Code Session +**Projekt:** wireguard-ui-multi + +### Commits +Keine Commits in dieser Session. + +### Geänderte Dateien +- README.md | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- +- bootstrap.sh | 39 +++++++++++++++++++++++++-------------- +- scripts/install.sh | 70 ++++++++++++++++++++++++++++++++++------------------------------------ +- scripts/proxmox-install.sh | 10 ++++++---- +- systemd/wireguard-ui-multi.service | 21 +++++++++++++++++++++ +- update.sh | 19 ++++++++++++++++--- + +--- +## 2026-07-11 22:17 – 22:17 (0m) +**Beschreibung:** Claude Code Session +**Projekt:** wireguard-ui-multi + +### Commits +Keine Commits in dieser Session. + +### Geänderte Dateien +- README.md | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- +- bootstrap.sh | 39 +++++++++++++++++++++++++-------------- +- scripts/install.sh | 70 ++++++++++++++++++++++++++++++++++------------------------------------ +- scripts/proxmox-install.sh | 10 ++++++---- +- systemd/wireguard-ui-multi.service | 21 +++++++++++++++++++++ +- update.sh | 19 ++++++++++++++++--- + +--- +## 2026-07-11 22:18 – 22:18 (0m) +**Beschreibung:** Claude Code Session +**Projekt:** wireguard-ui-multi + +### Commits +Keine Commits in dieser Session. + +### Geänderte Dateien +- README.md | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- +- bootstrap.sh | 39 +++++++++++++++++++++++++-------------- +- scripts/install.sh | 70 ++++++++++++++++++++++++++++++++++------------------------------------ +- scripts/proxmox-install.sh | 10 ++++++---- +- systemd/wireguard-ui-multi.service | 21 +++++++++++++++++++++ +- update.sh | 19 ++++++++++++++++--- + +--- +## 2026-07-11 22:26 – 22:26 (0m) +**Beschreibung:** Claude Code Session +**Projekt:** wireguard-ui-multi + +### Commits +Keine Commits in dieser Session. + +### Geänderte Dateien +- README.md | 55 ++++++++++++++++++++++++++++++++++++++++- +- bootstrap.sh | 39 ++++++++++++++++++----------- +- scripts/install.sh | 70 +++++++++++++++++++++++++--------------------------- +- scripts/proxmox-install.sh | 10 +++++--- +- systemd/wireguard-ui-multi.service | 21 ++++++++++++++++ +- update.sh | 19 +++++++++++--- + +--- +## 2026-07-11 22:28 – 22:41 (12m) +**Beschreibung:** Claude Code Session +**Projekt:** wireguard-ui-multi + +### Commits +- a946c05 Add read-only multi-server API (step 2) + dedupe serverID validation +- 7eca2d0 Add server-registry store methods with record-ID validation (step 1) +- 40d7862 Add multi-server data model + legacy DB migration (step 0) + +### Geänderte Dateien +- handler/routes.go | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ +- main.go | 2 ++ +- store/jsondb/jsondb.go | 37 +++++++++++++++++++++++-------------- + +--- +## 2026-07-11 22:41 – 22:41 (0m) +**Beschreibung:** Claude Code Session +**Projekt:** wireguard-ui-multi + +### Commits +Keine Commits in dieser Session. + +### Geänderte Dateien +- handler/routes.go | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ +- main.go | 2 ++ +- store/jsondb/jsondb.go | 37 +++++++++++++++++++++++-------------- + +--- +## 2026-07-11 23:07 – 23:08 (0m) +**Beschreibung:** Claude Code Session +**Projekt:** wireguard-ui-multi + +### Commits +Keine Commits in dieser Session. + +### Geänderte Dateien +- handler/routes.go | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ +- main.go | 2 ++ +- store/jsondb/jsondb.go | 37 +++++++++++++++++++++++-------------- + +--- +## 2026-07-11 23:13 – 23:13 (0m) +**Beschreibung:** Claude Code Session +**Projekt:** wireguard-ui-multi + +### Commits +Keine Commits in dieser Session. + +### Geänderte Dateien +- handler/routes.go | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ +- main.go | 2 ++ +- store/jsondb/jsondb.go | 37 +++++++++++++++++++++++-------------- + +--- +## 2026-07-11 23:13 – 23:15 (1m) +**Beschreibung:** Claude Code Session +**Projekt:** wireguard-ui-multi + +### Commits +Keine Commits in dieser Session. + +### Geänderte Dateien +- handler/routes.go | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ +- main.go | 2 ++ +- store/jsondb/jsondb.go | 37 +++++++++++++++++++++++-------------- + +--- +## 2026-07-11 23:16 – 23:16 (0m) +**Beschreibung:** Claude Code Session +**Projekt:** wireguard-ui-multi + +### Commits +Keine Commits in dieser Session. + +### Geänderte Dateien +- handler/routes.go | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ +- main.go | 2 ++ +- store/jsondb/jsondb.go | 37 +++++++++++++++++++++++-------------- + +--- +## 2026-07-11 23:18 – 23:21 (2m) +**Beschreibung:** Claude Code Session +**Projekt:** wireguard-ui-multi + +### Commits +- 5b72a7c Add per-server access control (User.ServerIDs) + +### Geänderte Dateien +- handler/routes.go | 20 ++++++++++++++++++++ +- handler/session.go | 29 +++++++++++++++++++++++++++++ +- main.go | 2 +- +- model/user.go | 4 ++++ +- store/jsondb/jsondb.go | 21 +++++++++++++++++++++ + +--- +## 2026-07-11 23:21 – 23:24 (2m) +**Beschreibung:** Claude Code Session +**Projekt:** wireguard-ui-multi + +### Commits +- 3842c7a Add server creation UI + user-server access assignment (step 3) + +### Geänderte Dateien +- handler/routes.go | 107 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +- main.go | 2 ++ +- router/router.go | 6 ++++ +- templates/base.html | 8 ++++++ +- templates/servers.html | 233 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +- templates/users_settings.html | 41 ++++++++++++++++++++++++++- + +--- +## 2026-07-11 23:24 – 23:24 (0m) +**Beschreibung:** Claude Code Session +**Projekt:** wireguard-ui-multi + +### Commits +- c7df129 Escape server name before HTML interpolation in servers.html + +### Geänderte Dateien +- templates/servers.html | 6 +++++- + +--- +## 2026-07-11 23:25 – 23:26 (1m) +**Beschreibung:** Claude Code Session +**Projekt:** wireguard-ui-multi + +### Commits +Keine Commits in dieser Session. + +### Geänderte Dateien +- templates/servers.html | 6 +++++- + +--- +## 2026-07-11 23:30 – 23:31 (1m) +**Beschreibung:** Claude Code Session +**Projekt:** wireguard-ui-multi + +### Commits +- bb72a0a Rewrite README to be fork-only, drop all Docker/upstream content + +### Geänderte Dateien +- README.md | 322 +++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------------------------------------------------------------------------------------------------- + +--- +## 2026-07-11 23:35 – 23:36 (0m) +**Beschreibung:** Claude Code Session +**Projekt:** wireguard-ui-multi + +### Commits +- e353462 Remove Docker files (Dockerfile, docker-compose.yaml, examples/docker-compose) + +### Geänderte Dateien +- Dockerfile | 77 ----------------------------------------------------------------------------- +- docker-compose.yaml | 27 --------------------------- +- examples/docker-compose/README.md | 30 ------------------------------ +- examples/docker-compose/boringtun.yml | 43 ------------------------------------------- +- examples/docker-compose/linuxserver.yml | 42 ------------------------------------------ +- examples/docker-compose/system.yml | 27 --------------------------- + +--- +## 2026-07-11 23:36 – 23:44 (7m) +**Beschreibung:** Claude Code Session +**Projekt:** wireguard-ui-multi + +### Commits +Keine Commits in dieser Session. + +### Geänderte Dateien +- Dockerfile | 77 ----------------------------------------------------------------------------- +- docker-compose.yaml | 27 --------------------------- +- examples/docker-compose/README.md | 30 ------------------------------ +- examples/docker-compose/boringtun.yml | 43 ------------------------------------------- +- examples/docker-compose/linuxserver.yml | 42 ------------------------------------------ +- examples/docker-compose/system.yml | 27 --------------------------- + +--- +## 2026-07-11 23:45 – 23:51 (6m) +**Beschreibung:** Claude Code Session +**Projekt:** wireguard-ui-multi + +### Commits +- 3fe3dc8 Add per-server settings editor (step 5) +- 74389a9 Scope client management and config-apply per server (step 4) + +### Geänderte Dateien +- handler/routes.go | 39 +++++++++++++++++++++++++++++++++++++++ +- main.go | 2 ++ +- templates/servers.html | 112 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +--- +## 2026-07-11 23:52 – 23:52 (0m) +**Beschreibung:** Claude Code Session +**Projekt:** wireguard-ui-multi + +### Commits +Keine Commits in dieser Session. + +### Geänderte Dateien +- handler/routes.go | 39 +++++++++++++++++++++++++++++++++++++++ +- main.go | 2 ++ +- templates/servers.html | 112 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +--- + +## 2026-07-11 – Status: What Works Today + +Diese Session hat keinen Code geändert, sondern den aktuellen Stand des +Multi-Server-Umbaus gegen das committete `HEAD` verifiziert (`handler/routes.go`, +`main.go`, `model/server.go`, `model/setting.go`, `model/user.go`, +`store/jsondb/jsondb.go`, `templates/*.html`). Ziel: eine ehrliche +Bestandsaufnahme, keine Ankündigung geplanter Features. + +### Datenmodell (verifiziert) + +- `model/server.go`: `Server{ID, Name, KeyPair *ServerKeypair, Interface *ServerInterface}`. +- `model/setting.go`: `GlobalSetting` (app-weit: DNS, MTU, PersistentKeepalive, + FirewallMark, Table, EndpointAddress, ConfigFilePath — Legacy-Struktur) und + `ServerSetting` (pro Server: EndpointAddress, FirewallMark, Table, + ConfigFilePath). Der Kommentar über `ServerSetting` im Quelltext sagt + "not yet wired into store/handler layers" — das ist **veraltet**: die Methoden + `GetServerSettings`/`SaveServerSettings` in `store/jsondb/jsondb.go` (Zeile + ~674–690) sind sehr wohl verdrahtet und werden von + `handler.GetServerSettings`/`handler.SaveServerSettingsHandler` sowie von + `buildEffectiveSettings()` (`handler/routes.go:50`) genutzt. +- `model/client.go`: `Client` trägt `ServerID`. +- `model/user.go`: `User.ServerIDs []string` — leer/nil heißt "kein Zugriff", + Admins sind davon ausgenommen. + +### Migration von Single-Server-Installationen + +- Beim ersten Start nach dem Upgrade migriert `store/jsondb/jsondb.go` + automatisch: die bestehende Legacy-Server-Konfiguration wird unter der + synthetischen ID `util.DefaultServerID` (= `"wg0"`) in `db/servers/wg0.json`, + `db/server_settings/wg0.json` angelegt (Konstante `legacyDefaultServerID`, + `store/jsondb/jsondb.go:22-24`). Bestehende Clients bekommen `ServerID = "wg0"` + rückwirkend zugewiesen, bestehende User bekommen `ServerIDs` entsprechend + befüllt. Die alte Legacy-Collection bleibt erhalten (wird nicht gelöscht). + Der Interface-Name des migrierten Default-Servers wird aus dem Dateinamen von + `ConfigFilePath` abgeleitet, falls gesetzt. + +### Routen — Legacy (bare, operieren immer auf `wg0`) + +Registriert in `main.go` (Zeilen ~211–275), unverändert nutzbar: + +- `GET /` – Client-Liste (Dashboard des Default-Servers) +- `GET/POST /login`, `GET /logout`, `GET /profile` +- `GET /users-settings`, `POST /update-user`, `POST /create-user`, + `POST /remove-user`, `GET /get-users`, `GET /api/user/:username` +- `POST /new-client`, `POST /update-client`, `POST /email-client`, + `POST /send-telegram-client`, `POST /client/set-status`, + `POST /remove-client`, `GET /download` +- `GET /wg-server`, `POST /wg-server/interfaces`, `POST /wg-server/keypair` + — einzige Stelle, an der Interface-Adressen/Port und das Schlüsselpaar + eines Servers editierbar sind (siehe Lücke unten) +- `GET/POST /global-settings` +- `GET /status`, `GET /test-hash`, `GET /about`, `GET /_health`, `GET /favicon` +- `GET /api/clients`, `GET /api/client/:id`, `GET /api/machine-ips`, + `GET /api/subnet-ranges`, `GET /api/suggest-client-ips`, + `POST /api/apply-wg-config` +- `GET /wake_on_lan_hosts`, `POST /wake_on_lan_host` + +### Routen — neu, `/servers/...` Namespace + +- `GET /servers-settings` – Admin-Übersichtsseite (`servers.html`), nur Admin +- `GET /servers` – Serverliste; für Nicht-Admins gefiltert auf + `User.ServerIDs` (`handler.ListServers`, `handler/routes.go:530`) +- `POST /servers` – neuen Server anlegen (nur Admin), validiert die ID gegen + `util.ValidateRecordID` (nur Buchstaben/Ziffern/`-`/`_`) +- `GET /servers/:id/clients` – Client-Verwaltungsseite pro Server + (`server_clients.html`) +- `GET /servers/:id/api/clients`, `GET /servers/:id/api/client/:cid` +- `POST /servers/:id/new-client`, `POST /servers/:id/update-client`, + `POST /servers/:id/client/set-status`, `POST /servers/:id/remove-client` +- `GET /servers/:id/download` +- `POST /servers/:id/api/apply-wg-config` – schreibt die Config-Datei dieses + Servers, siehe Bugfix unten +- `GET /servers/:id/settings`, `POST /servers/:id/settings` (POST nur Admin) + +Alle `/servers/:id/...`-Routen außer der reinen Admin-Erstellung laufen durch +`handler.RequireServerAccess(db)` (`handler/session.go:53`): Admins und +`DisableLogin` passieren immer, sonst wird geprüft, ob `serverID` in +`User.ServerIDs` enthalten ist. + +### Bugfix bestätigt: Peer-Leak zwischen Servern behoben + +`handler.ApplyServerConfig` (`handler/routes.go:1504`) filtert Clients jetzt +korrekt nach `Client.ServerID == serverID`, bevor sie als Peers in die Config +geschrieben werden (Zeilen 1528–1539). Für die Legacy-Route (`serverID == +"wg0"`) wird weiterhin `db.GetServer()` (Legacy-Collection) statt +`db.GetServerByID` gelesen, um mit gerade über `/wg-server` vorgenommenen +Änderungen konsistent zu bleiben. + +### Bestätigte Lücken (nicht gebaut, keine Ankündigung, sondern Fakt) + +- **Keine UI zum Bearbeiten von Interface/KeyPair für Nicht-Default-Server.** + `store.UpdateServerInterface` und `store.UpdateServerKeyPair` + (`store/jsondb/jsondb.go:561`, `:577`) existieren, werden aber im gesamten + Code nur mit `util.DefaultServerID` aufgerufen (`handler/routes.go:1211`, + `:1242`, innerhalb von `WireGuardServerInterfaces`/`WireGuardServerKeyPair`, + den Handlern hinter `/wg-server/...`). Für über `/servers` neu angelegte + Server gibt es keine Route, die Adressen/Port oder das Schlüsselpaar danach + ändert. +- **Kein wg-quick/systemd-Exec.** Es gibt keinen `exec.Command`-Aufruf von + `wg-quick` oder `systemctl` irgendwo im Repo (verifiziert per Grep über + `internal/`, `handler/`, `util/`). Die Anwendung schreibt ausschließlich + `.conf`-Dateien; das Hoch-/Runterfahren der Interfaces bleibt Aufgabe des + Betreibers (z. B. manuell oder per eigenem systemd-Unit/Hook). +- **Keine Security-Härtung über das bereits vorhandene Session-/CSRF-Maß + hinaus.** Themen wie Cookie-Flags (Secure/SameSite), CSP-Header oder + Rate-Limiting wurden in Planungsgesprächen erwähnt, sind aber im + aktuellen Code nicht umgesetzt. +- Die alte Legacy-Collection (Pre-Migrations-Daten) wird beim Auto-Migrate + nicht gelöscht — kein Rollback-Mechanismus, aber auch kein Cleanup. + +### Fazit + +Multi-Server-CRUD (Anlage, Auflistung, gefilterte Sicht), pro-Server +Client-Verwaltung (Anlegen/Bearbeiten/Löschen/Status/Download), pro-Server +Zugriffskontrolle über `User.ServerIDs`, und die automatische Migration einer +bestehenden Single-Server-Installation sind lauffähig und durch Code bestätigt. +Was fehlt, um "produktiv nutzbar" im Sinne des ursprünglichen Lastenhefts zu +sein: Interface/Keypair-Verwaltung für neu angelegte Server, tatsächliches +Hoch-/Runterfahren der wg-Interfaces, und die in CLAUDE.md geplante +Security-/Firewall-Integration (nftables-Hooks, Audit-Log) — davon ist nichts +im aktuellen Code vorhanden. + +--- +## 2026-07-11 23:53 – 23:53 (0m) +**Beschreibung:** Claude Code Session +**Projekt:** wireguard-ui-multi + +### Commits +Keine Commits in dieser Session. + +### Geänderte Dateien +- handler/routes.go | 39 +++++++++++++++++++++++++++++++++++++++ +- main.go | 2 ++ +- templates/servers.html | 112 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +---