From c3a228583420c2f98cd8e554d7c299615a7373d3 Mon Sep 17 00:00:00 2001 From: mkelvers Date: Tue, 21 Apr 2026 01:20:36 +0200 Subject: [PATCH] fix: check render errors and handle htmx redirect in auth --- api/auth/handler.go | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/api/auth/handler.go b/api/auth/handler.go index ddc0d04..b44dc93 100644 --- a/api/auth/handler.go +++ b/api/auth/handler.go @@ -1,6 +1,7 @@ package auth import ( + "log" "net/http" "mal/web/templates" @@ -26,7 +27,10 @@ func rateLimitErrorFromQuery(r *http.Request) string { func (h *Handler) HandleLogin(w http.ResponseWriter, r *http.Request) { if err := r.ParseForm(); err != nil { - templates.Login("Something went wrong. Please try again.", "").Render(r.Context(), w) + if renderErr := templates.Login("Something went wrong. Please try again.", "").Render(r.Context(), w); renderErr != nil { + log.Printf("render error: %v", renderErr) + http.Error(w, "Internal Server Error", http.StatusInternalServerError) + } return } @@ -34,23 +38,34 @@ func (h *Handler) HandleLogin(w http.ResponseWriter, r *http.Request) { password := r.FormValue("password") if username == "" || password == "" { - templates.Login("The email or password is wrong.", username).Render(r.Context(), w) + if renderErr := templates.Login("The email or password is wrong.", username).Render(r.Context(), w); renderErr != nil { + log.Printf("render error: %v", renderErr) + http.Error(w, "Internal Server Error", http.StatusInternalServerError) + } return } session, err := h.authService.Login(r.Context(), username, password) if err != nil { - templates.Login("The email or password is wrong.", username).Render(r.Context(), w) + if renderErr := templates.Login("The email or password is wrong.", username).Render(r.Context(), w); renderErr != nil { + log.Printf("render error: %v", renderErr) + http.Error(w, "Internal Server Error", http.StatusInternalServerError) + } return } SetSessionCookie(w, session.ID, session.ExpiresAt) - // HTMX-friendly redirect to root or previous page - w.Header().Set("HX-Redirect", "/") + if r.Header.Get("HX-Request") == "true" { + w.Header().Set("HX-Redirect", "/") + return + } http.Redirect(w, r, "/", http.StatusFound) } func (h *Handler) HandleLoginPage(w http.ResponseWriter, r *http.Request) { - templates.Login(rateLimitErrorFromQuery(r), "").Render(r.Context(), w) + if err := templates.Login(rateLimitErrorFromQuery(r), "").Render(r.Context(), w); err != nil { + log.Printf("render error: %v", err) + http.Error(w, "Internal Server Error", http.StatusInternalServerError) + } }