Code-Review: tote Stellen entfernt, Umwege vereinfacht
- SQLite-Import, migrate.sh, notes/migrations.md und altes jQuery-Skript entfernt - Backend: scanEntry/queryEntries statt doppelter Scan-Liste, Feed-Queries direkt statt feedWhere, Thread ohne Map-Umweg, gemeinsame Helfer für Cookie-Löschen und Mediennamen, usernameTaken - Frontend: PostForm für Beitrag und Antwort, EntryCard in Deleted/LiveCard aufgeteilt, tote CSS-Regeln und Typen entfernt, Strich-Regeln zusammengelegt - Rechtstexte verlinken /stats; Kommentare ohne Vorgeschichte Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TiXsPUqw7oeomZ8wZrQW5q
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
d1bd0f5f1d
commit
df0cfec132
@@ -69,8 +69,6 @@ func handleLogin(w http.ResponseWriter, r *http.Request) error {
|
||||
return Invalid("user.name_short", "Der Nutzername ist zu kurz.").At("user")
|
||||
}
|
||||
|
||||
// Gleiche Meldung für "Nutzer existiert nicht" und "Passwort falsch": sonst
|
||||
// wird der Endpunkt zum Nutzernamen-Orakel.
|
||||
var uid int64
|
||||
var hash []byte
|
||||
err := db.QueryRow(`SELECT uid, password FROM account WHERE username = $1`, username).Scan(&uid, &hash)
|
||||
@@ -142,6 +140,12 @@ func handleLogout(w http.ResponseWriter, r *http.Request) error {
|
||||
return Internal(err)
|
||||
}
|
||||
}
|
||||
clearSessionCookie(w, r)
|
||||
writeJSON(w, http.StatusOK, map[string]string{"status": "ok"})
|
||||
return nil
|
||||
}
|
||||
|
||||
func clearSessionCookie(w http.ResponseWriter, r *http.Request) {
|
||||
http.SetCookie(w, &http.Cookie{
|
||||
Name: "session",
|
||||
Value: "",
|
||||
@@ -152,8 +156,6 @@ func handleLogout(w http.ResponseWriter, r *http.Request) error {
|
||||
Secure: isHTTPS(r),
|
||||
SameSite: http.SameSiteLaxMode,
|
||||
})
|
||||
writeJSON(w, http.StatusOK, map[string]string{"status": "ok"})
|
||||
return nil
|
||||
}
|
||||
|
||||
// handleNewUser sammelt alle Validierungsfehler ein, statt beim ersten
|
||||
@@ -165,7 +167,7 @@ func handleNewUser(w http.ResponseWriter, r *http.Request) error {
|
||||
username := sanitizeUsername(r.FormValue("user"))
|
||||
if len(username) < 3 {
|
||||
fields["user"] = "Der Nutzername ist zu kurz."
|
||||
} else if idFromUsername(username) != 0 {
|
||||
} else if usernameTaken(username) {
|
||||
fields["user"] = "Der Nutzername wird bereits verwendet."
|
||||
}
|
||||
|
||||
@@ -217,12 +219,7 @@ func handleSessionInfo(w http.ResponseWriter, r *http.Request) error {
|
||||
}
|
||||
|
||||
func sanitizeUsername(u string) string {
|
||||
u = strings.TrimSpace(u)
|
||||
// Auf 32 Zeichen (Runen) kürzen, nicht 32 Bytes -- sonst kann der Schnitt
|
||||
// mitten in eine Multibyte-Rune fallen und kaputtes UTF-8 erzeugen.
|
||||
if r := []rune(u); len(r) > 32 {
|
||||
u = string(r[:32])
|
||||
}
|
||||
u = truncateRunes(strings.TrimSpace(u), 32)
|
||||
u = reNonWord.ReplaceAllString(u, "")
|
||||
u = reSpace.ReplaceAllString(u, "_")
|
||||
return u
|
||||
|
||||
Reference in New Issue
Block a user