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:
irrlicht
2026-09-27 15:03:22 +02:00
co-authored by Claude Opus 5.5
parent d1bd0f5f1d
commit df0cfec132
33 changed files with 235 additions and 933 deletions
+8 -11
View File
@@ -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