Passwort-Reset: Review-Fixes

- Token vor bcrypt prüfen, damit beliebige Tokens keine CPU-Last erzeugen
- CLI meldet DB-Fehler nicht mehr als "Nutzer nicht gefunden"
- Reset in einem Browser mit fremder Session räumt diese mit ab
- Konto-Löschen entfernt auch offene Reset-Links

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
irrlicht
2026-10-02 00:44:32 +02:00
co-authored by Claude Opus 5.5
parent 81a74375b7
commit 764ad50b8e
3 changed files with 61 additions and 10 deletions
+5 -3
View File
@@ -166,9 +166,10 @@ func handleSetAvatar(w http.ResponseWriter, r *http.Request) error {
}
// handleUserDelete löscht den eingeloggten Account dauerhaft, nach Bestätigung
// durch das Passwort (Formularfeld pass1). Sessions und Votes werden in einer
// Transaktion mitgelöscht; die eigenen Beiträge werden soft-gelöscht (als
// [deleted]-Platzhalter erhalten), damit fremde Antworten nicht verwaisen.
// durch das Passwort (Formularfeld pass1). Sessions, Reset-Links und Votes
// werden in einer Transaktion mitgelöscht; die eigenen Beiträge werden
// soft-gelöscht (als [deleted]-Platzhalter erhalten), damit fremde Antworten
// nicht verwaisen.
// Zugehörige Mediendateien werden best effort entfernt.
func handleUserDelete(w http.ResponseWriter, r *http.Request) error {
uid := uidFromContext(r.Context())
@@ -205,6 +206,7 @@ func handleUserDelete(w http.ResponseWriter, r *http.Request) error {
}
for _, q := range []string{
`DELETE FROM session WHERE uid = $1`,
`DELETE FROM password_reset WHERE uid = $1`,
`DELETE FROM vote WHERE uid = $1`,
`UPDATE entry SET deleted = 1, content = '', filepath = '', uid = 0 WHERE uid = $1`,
`DELETE FROM account WHERE uid = $1`,