fix(api): WireGuard Private-Key-Verlust bei Peer-Update + Domain-Header-Ownership

wireguard.go: UpdatePeer zerstörte den gespeicherten encPriv wenn der Client
denselben public_key im Update-Body mitschickte (encPriv = nil auf Zeile 532).
Fix: encPriv wird nur geleert wenn der public_key sich tatsächlich ÄNDERT.
Andernfalls (gleicher Public Key = Benutzer ändert z.B. nur Allowed-IPs)
bleibt das verschlüsselte Private Key erhalten und QR/conf-Download
bleiben verfügbar.

domains.go + domainheaders.go: UpdateHeader() ignorierte die domainID aus der
URL. Fix: Update-SQL prüft jetzt WHERE id=$4 AND domain_id=$5 — falsch
adressierte Requests kriegen 404 statt blind zu updaten.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Debian
2026-05-24 12:59:13 +02:00
parent 1aaca2c056
commit 9708e4441b
7 changed files with 14 additions and 10 deletions

View File

@@ -85,13 +85,13 @@ RETURNING id, domain_id, name, value, position, created_at, updated_at`,
return scan(row)
}
func (r *Repo) Update(ctx context.Context, id int64, h models.DomainResponseHeader) (*models.DomainResponseHeader, error) {
func (r *Repo) Update(ctx context.Context, domainID, id int64, h models.DomainResponseHeader) (*models.DomainResponseHeader, error) {
row := r.Pool.QueryRow(ctx, `
UPDATE domain_response_headers SET
name = $1, value = $2, position = $3, updated_at = NOW()
WHERE id = $4
WHERE id = $4 AND domain_id = $5
RETURNING id, domain_id, name, value, position, created_at, updated_at`,
h.Name, h.Value, h.Position, id)
h.Name, h.Value, h.Position, id, domainID)
out, err := scan(row)
if err != nil {
if errors.Is(err, pgx.ErrNoRows) {