Passwort-Reset per Einmal-Link (kver reset-link)
Ohne E-Mail-System erzeugt der Admin per CLI einen Link (/reset#<token>), gültig 72 h und einmal. Gespeichert wird nur der SHA-256 des Tokens; es steht im Fragment und geht nur im POST-Body an die API. Der Reset meldet alle alten Sessions ab und loggt direkt neu ein. Passwortregeln jetzt gemeinsam in checkNewPassword. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
b6cf8c7fa0
commit
81a74375b7
@@ -172,18 +172,7 @@ func handleNewUser(w http.ResponseWriter, r *http.Request) error {
|
||||
}
|
||||
|
||||
pass1 := r.FormValue("pass1")
|
||||
pass2 := r.FormValue("pass2")
|
||||
switch {
|
||||
case len(pass1) < 10:
|
||||
fields["pass1"] = "Das Passwort ist kürzer als 10 Zeichen."
|
||||
// bcrypt verarbeitet maximal 72 Bytes; GenerateFromPassword gäbe darüber
|
||||
// einen Fehler -> hier abfangen statt als generischer 500 zu enden.
|
||||
case len(pass1) > 72:
|
||||
fields["pass1"] = "Das Passwort ist länger als 72 Bytes."
|
||||
}
|
||||
if pass1 != pass2 {
|
||||
fields["pass2"] = "Passwort und Passwortbestätigung sind ungleich."
|
||||
}
|
||||
checkNewPassword(pass1, r.FormValue("pass2"), fields)
|
||||
|
||||
if len(fields) > 0 {
|
||||
e := Invalid("user.invalid", "Die Angaben sind unvollständig oder ungültig.")
|
||||
@@ -204,6 +193,22 @@ func handleNewUser(w http.ResponseWriter, r *http.Request) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// checkNewPassword trägt Fehler zu einem neuen Passwort (pass1) und seiner
|
||||
// Wiederholung (pass2) in fields ein. Gemeinsam für Registrierung und Reset.
|
||||
func checkNewPassword(pass1, pass2 string, fields map[string]string) {
|
||||
switch {
|
||||
case len(pass1) < 10:
|
||||
fields["pass1"] = "Das Passwort ist kürzer als 10 Zeichen."
|
||||
// bcrypt verarbeitet maximal 72 Bytes; GenerateFromPassword gäbe darüber
|
||||
// einen Fehler -> hier abfangen statt als generischer 500 zu enden.
|
||||
case len(pass1) > 72:
|
||||
fields["pass1"] = "Das Passwort ist länger als 72 Bytes."
|
||||
}
|
||||
if pass1 != pass2 {
|
||||
fields["pass2"] = "Passwort und Passwortbestätigung sind ungleich."
|
||||
}
|
||||
}
|
||||
|
||||
func handleSessionInfo(w http.ResponseWriter, r *http.Request) error {
|
||||
s, ok := getSession(r)
|
||||
if !ok {
|
||||
|
||||
Reference in New Issue
Block a user