summaryrefslogtreecommitdiffstats
path: root/web/middleware/auth.go
diff options
context:
space:
mode:
authorLeonardo Bishop <me@leonardobishop.net>2026-01-16 17:19:27 +0000
committerLeonardo Bishop <me@leonardobishop.net>2026-01-16 17:19:27 +0000
commite6cbb8415490524034561102b6c9f03e92e4dae7 (patch)
tree2012f04c11adf636bdd06ae37f5ef3efd7a645a0 /web/middleware/auth.go
parent8fc52adfdc705a1b05d3a0aef4d6e63f8ec0308d (diff)
Add OIDC auth
Diffstat (limited to 'web/middleware/auth.go')
-rw-r--r--web/middleware/auth.go40
1 files changed, 36 insertions, 4 deletions
diff --git a/web/middleware/auth.go b/web/middleware/auth.go
index fcba3b7..c0257e2 100644
--- a/web/middleware/auth.go
+++ b/web/middleware/auth.go
@@ -2,28 +2,60 @@ package middleware
import (
"context"
+ "errors"
+ "html/template"
+ "log/slog"
"net/http"
+ "git.leonardobishop.net/instancer/pkg/auth"
"git.leonardobishop.net/instancer/pkg/session"
)
-func MustAuthenticate(store *session.MemoryStore) func(http.HandlerFunc) http.HandlerFunc {
+func MustAuthenticate(tmpl *template.Template, store *session.MemoryStore, authProvider *auth.OIDCAuthProvider) func(http.HandlerFunc) http.HandlerFunc {
return func(next http.HandlerFunc) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
- sessionCookie, err := r.Cookie("session")
+ sessionCookie, err := r.Cookie("instancer-session")
if err != nil {
- w.Header().Add("HX-Redirect", "/auth")
http.Redirect(w, r, "/auth", http.StatusFound)
return
}
s := store.GetByToken(sessionCookie.Value)
if s == nil {
- w.Header().Add("HX-Redirect", "/auth")
http.Redirect(w, r, "/auth", http.StatusFound)
return
}
+ err = authProvider.UpdateUserInfo(r.Context(), s)
+ if err != nil {
+ if errors.Is(err, auth.ErrInvalidToken) {
+ http.Redirect(w, r, "/auth", http.StatusFound)
+ return
+ }
+ slog.Error("error updating user info", "cause", err)
+ w.Header().Add("HX-Redirect", "/problem")
+ tmpl.ExecuteTemplate(w, "problem.html", struct {
+ Error string
+ ShowLogout bool
+ }{
+ Error: "There was a problem fetching your user info. Try again later.",
+ ShowLogout: true,
+ })
+ return
+ }
+
+ if s.TeamID == "" || s.TeamName == "" {
+ w.Header().Add("HX-Redirect", "/problem")
+ tmpl.ExecuteTemplate(w, "problem.html", struct {
+ Error string
+ ShowLogout bool
+ }{
+ Error: "You are not part of a team. Please join a team and then refresh this page.",
+ ShowLogout: true,
+ })
+ return
+ }
+
ctx := context.WithValue(r.Context(), "session", s)
next(w, r.WithContext(ctx))