54 lines
1008 B
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)
|
|
}
|