/* * Copyright (C) 2024 Jonni Liljamo * * This file is licensed under AGPL-3.0-or-later, see NOTICE and LICENSE for * more information. */ package middlewares import ( "net/http" "github.com/alexedwards/scs/v2" "github.com/gin-gonic/gin" ) // SessionExists returns a gin middleware for checking if a session exists. func SessionExists(sm *scs.SessionManager) gin.HandlerFunc { return func(c *gin.Context) { userID := sm.Get(c.Request.Context(), "user_id") if userID != nil { if c.Request.URL.Path == "/login" { c.Redirect(http.StatusTemporaryRedirect, "/manage") c.Abort() } else { // Set user_id in context, if needed later (e.g. AdminOnly middleware) c.Set("user_id", userID) // TODO: Validate in db? c.Next() } } else { if c.Request.URL.Path == "/login" { c.Next() } else { c.Redirect(http.StatusTemporaryRedirect, "/login") c.Abort() } } } }