Files
lan-manager/server/middleware/auth.go

54 lines
1008 B
Go

package middleware
import (
"net/http"
"github.com/gin-contrib/sessions"
"github.com/gin-gonic/gin"
)
const AdminSessionKey = "admin_user"
func AuthRequired() gin.HandlerFunc {
return func(c *gin.Context) {
session := sessions.Default(c)
user := session.Get(AdminSessionKey)
if user == nil {
c.AbortWithStatusJSON(http.StatusUnauthorized, gin.H{"error": "unauthorized"})
return
}
c.Set("admin_user", user.(string))
c.Set("is_admin", true)
c.Next()
}
}
func OptionalAuth() gin.HandlerFunc {
return func(c *gin.Context) {
session := sessions.Default(c)
if user := session.Get(AdminSessionKey); user != nil {
c.Set("admin_user", user.(string))
c.Set("is_admin", true)
} else {
c.Set("is_admin", false)
}
c.Next()
}
}
func IsAdmin(c *gin.Context) bool {
v, exists := c.Get("is_admin")
if !exists {
return false
}
return v.(bool)
}
func CurrentUser(c *gin.Context) string {
u, _ := c.Get("admin_user")
if u == nil {
return ""
}
return u.(string)
}