package auth import ( "log" "net/http" "lishwist/db" "lishwist/env" "lishwist/types" "github.com/gorilla/sessions" ) type AuthMiddleware struct { Store *sessions.CookieStore protectedHandler http.Handler publicHandler http.Handler } func (auth *AuthMiddleware) ServeHTTP(w http.ResponseWriter, r *http.Request) { session, _ := auth.Store.Get(r, "lishwist_user") authorized, _ := session.Values["authorized"].(bool) if !authorized { auth.publicHandler.ServeHTTP(w, r) } else { auth.protectedHandler.ServeHTTP(w, r) } } func (auth *AuthMiddleware) ExpectUser(r *http.Request) *types.UserData { session, _ := auth.Store.Get(r, "lishwist_user") username, ok := session.Values["username"].(string) if !ok { log.Fatalln("Failed to get username") } user := db.GetUser(username) if user == nil { log.Fatalln("Failed to get user") } return user } func NewAuthMiddleware(protectedHandler http.Handler, publicHandler http.Handler) *AuthMiddleware { store := sessions.NewCookieStore([]byte(env.Secret)) return &AuthMiddleware{store, protectedHandler, publicHandler} }