nandi/gleanpublic Fork 0
9ed5b26
Commits
Clone
git clone https://git.rickub.com/nandi/glean.git
git clone ssh://git@rickub.com/nandi/glean.git

Host key fingerprint (ed25519): SHA256:iycHnxEyq0Q7uyVpB7JlznP0G7JrTPXLYRcAU5CSLhc — verify it before your first connect.

Extract HTMX constants and helper functionUnverified

Julien Robert committed 2026-06-08T17:48:50+02:00 Browse files
9ed5b26 parent: 212dde3
modified internal/server/articles_handler.go +1 -1
@@ -144,7 +144,7 @@ func (s *Server) handleArticles(w http.ResponseWriter, r *http.Request) {
144144 }
145145 }
146146
147- if r.Header.Get("HX-Request") == htmxRequestHeader {
147+ if isHXRequest(r) {
148148 s.render(w, r, "articles-content.html", data)
149149 return
150150 }
@@ -144,7 +144,7 @@ func (s *Server) handleArticles(w http.ResponseWriter, r *http.Request) {
144 }144 }
145 }145 }
146 146
147- if r.Header.Get("HX-Request") == htmxRequestHeader {147+ if isHXRequest(r) {
148 s.render(w, r, "articles-content.html", data)148 s.render(w, r, "articles-content.html", data)
149 return149 return
150 }150 }
modified internal/server/digest_handler.go +1 -1
@@ -282,6 +282,6 @@ func (s *Server) handleDigestMarkRead(w http.ResponseWriter, r *http.Request) {
282282 consumed: true,
283283 })
284284
285- w.Header().Set("HX-Refresh", "true")
285+ w.Header().Set(HXRefresh, "true")
286286 s.renderDigest(w, &digestCtx{Consumed: true})
287287 }
@@ -282,6 +282,6 @@ func (s *Server) handleDigestMarkRead(w http.ResponseWriter, r *http.Request) {
282 consumed: true,282 consumed: true,
283 })283 })
284 284
285- w.Header().Set("HX-Refresh", "true")285+ w.Header().Set(HXRefresh, "true")
286 s.renderDigest(w, &digestCtx{Consumed: true})286 s.renderDigest(w, &digestCtx{Consumed: true})
287 }287 }
modified internal/server/feeds_handler.go +2 -2
@@ -332,7 +332,7 @@ func (s *Server) handleClearAllSubscriptions(w http.ResponseWriter, r *http.Requ
332332 return
333333 }
334334
335- w.Header().Set("HX-Redirect", "/feeds")
335+ w.Header().Set(HXRedirect, "/feeds")
336336 w.WriteHeader(http.StatusOK)
337337 }
338338
@@ -416,7 +416,7 @@ func (s *Server) handleOPMLUpload(w http.ResponseWriter, r *http.Request) {
416416 }
417417 }()
418418
419- w.Header().Set("HX-Redirect", "/feeds")
419+ w.Header().Set(HXRedirect, "/feeds")
420420 w.WriteHeader(http.StatusOK)
421421 }
422422
@@ -332,7 +332,7 @@ func (s *Server) handleClearAllSubscriptions(w http.ResponseWriter, r *http.Requ
332 return332 return
333 }333 }
334 334
335- w.Header().Set("HX-Redirect", "/feeds")335+ w.Header().Set(HXRedirect, "/feeds")
336 w.WriteHeader(http.StatusOK)336 w.WriteHeader(http.StatusOK)
337 }337 }
338 338
@@ -416,7 +416,7 @@ func (s *Server) handleOPMLUpload(w http.ResponseWriter, r *http.Request) {
416 }416 }
417 }()417 }()
418 418
419- w.Header().Set("HX-Redirect", "/feeds")419+ w.Header().Set(HXRedirect, "/feeds")
420 w.WriteHeader(http.StatusOK)420 w.WriteHeader(http.StatusOK)
421 }421 }
422 422
added internal/server/htmx.go +13 -0
new file mode 100644
@@ -0,0 +1,13 @@
1+package server
2+
3+import "net/http"
4+
5+const (
6+ HXRequest = "HX-Request"
7+ HXRedirect = "HX-Redirect"
8+ HXRefresh = "HX-Refresh"
9+)
10+
11+func isHXRequest(r *http.Request) bool {
12+ return r.Header.Get(HXRequest) == "true"
13+}
new file mode 100644
@@ -0,0 +1,13 @@
1+package server
2+
3+import "net/http"
4+
5+const (
6+ HXRequest = "HX-Request"
7+ HXRedirect = "HX-Redirect"
8+ HXRefresh = "HX-Refresh"
9+)
10+
11+func isHXRequest(r *http.Request) bool {
12+ return r.Header.Get(HXRequest) == "true"
13+}
modified internal/server/middleware.go +1 -1
@@ -73,7 +73,7 @@ func (s *Server) csrfMiddleware(next http.Handler) http.Handler {
7373 return
7474 }
7575
76- if r.Header.Get("HX-Request") == htmxRequestHeader {
76+ if isHXRequest(r) {
7777 origin := r.Header.Get("Origin")
7878 if origin != "" && !sameOrigin(origin, r.Host) {
7979 http.Error(w, "forbidden", http.StatusForbidden)
@@ -73,7 +73,7 @@ func (s *Server) csrfMiddleware(next http.Handler) http.Handler {
73 return73 return
74 }74 }
75 75
76- if r.Header.Get("HX-Request") == htmxRequestHeader {76+ if isHXRequest(r) {
77 origin := r.Header.Get("Origin")77 origin := r.Header.Get("Origin")
78 if origin != "" && !sameOrigin(origin, r.Host) {78 if origin != "" && !sameOrigin(origin, r.Host) {
79 http.Error(w, "forbidden", http.StatusForbidden)79 http.Error(w, "forbidden", http.StatusForbidden)
modified internal/server/server.go +2 -3
@@ -34,7 +34,6 @@ import (
3434 "pkg.rbrt.fr/glean/static"
3535 )
3636
37-const htmxRequestHeader = "true"
3837
3938 var oauthScopes = []string{
4039 "atproto",
@@ -574,7 +573,7 @@ func (s *Server) handleNotFound(w http.ResponseWriter, r *http.Request) {
574573 }
575574
576575 func (s *Server) renderError(w http.ResponseWriter, r *http.Request, code int, title, message string) {
577- if r.Header.Get("HX-Request") == htmxRequestHeader {
576+ if isHXRequest(r) {
578577 w.WriteHeader(code)
579578 w.Write([]byte(message))
580579 return
@@ -597,7 +596,7 @@ func (s *Server) render(w http.ResponseWriter, r *http.Request, name string, dat
597596 data["CSRFToken"] = cookie.Value
598597 }
599598
600- if r.Header.Get("HX-Request") == htmxRequestHeader {
599+ if isHXRequest(r) {
601600 if err := s.templates.ExecuteTemplate(w, name, data); err != nil {
602601 s.logger.Error("template error", "error", err, "template", name)
603602 http.Error(w, err.Error(), http.StatusInternalServerError)
@@ -34,7 +34,6 @@ import (
34 "pkg.rbrt.fr/glean/static"34 "pkg.rbrt.fr/glean/static"
35 )35 )
36 36
37-const htmxRequestHeader = "true"
38 37
39 var oauthScopes = []string{38 var oauthScopes = []string{
40 "atproto",39 "atproto",
@@ -574,7 +573,7 @@ func (s *Server) handleNotFound(w http.ResponseWriter, r *http.Request) {
574 }573 }
575 574
576 func (s *Server) renderError(w http.ResponseWriter, r *http.Request, code int, title, message string) {575 func (s *Server) renderError(w http.ResponseWriter, r *http.Request, code int, title, message string) {
577- if r.Header.Get("HX-Request") == htmxRequestHeader {576+ if isHXRequest(r) {
578 w.WriteHeader(code)577 w.WriteHeader(code)
579 w.Write([]byte(message))578 w.Write([]byte(message))
580 return579 return
@@ -597,7 +596,7 @@ func (s *Server) render(w http.ResponseWriter, r *http.Request, name string, dat
597 data["CSRFToken"] = cookie.Value596 data["CSRFToken"] = cookie.Value
598 }597 }
599 598
600- if r.Header.Get("HX-Request") == htmxRequestHeader {599+ if isHXRequest(r) {
601 if err := s.templates.ExecuteTemplate(w, name, data); err != nil {600 if err := s.templates.ExecuteTemplate(w, name, data); err != nil {
602 s.logger.Error("template error", "error", err, "template", name)601 s.logger.Error("template error", "error", err, "template", name)
603 http.Error(w, err.Error(), http.StatusInternalServerError)602 http.Error(w, err.Error(), http.StatusInternalServerError)
modified internal/server/settings_handler.go +1 -1
@@ -50,7 +50,7 @@ func (s *Server) handleToggleLanguage(w http.ResponseWriter, r *http.Request) {
5050 return
5151 }
5252
53- w.Header().Set("HX-Redirect", "/profile/"+user.DID)
53+ w.Header().Set(HXRedirect, "/profile/"+user.DID)
5454 w.WriteHeader(http.StatusOK)
5555 }
5656
@@ -50,7 +50,7 @@ func (s *Server) handleToggleLanguage(w http.ResponseWriter, r *http.Request) {
50 return50 return
51 }51 }
52 52
53- w.Header().Set("HX-Redirect", "/profile/"+user.DID)53+ w.Header().Set(HXRedirect, "/profile/"+user.DID)
54 w.WriteHeader(http.StatusOK)54 w.WriteHeader(http.StatusOK)
55 }55 }
56 56