/* * Copyright (C) 2023 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" ) func SessionExists(sm *scs.SessionManager) gin.HandlerFunc { return func(c *gin.Context) { user_id := sm.Get(c.Request.Context(), "user_id") if user_id != 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", user_id) // TODO: Validate in db? c.Next() } } else { if c.Request.URL.Path == "/login" { c.Next() } else { c.Redirect(http.StatusTemporaryRedirect, "/login") c.Abort() } } } }