Files
frp-panel/middleware/auth.go
VaalaCat f07c03ce68 feat: fx
2025-04-26 10:52:21 +00:00

71 lines
1.7 KiB
Go

package middleware
import (
"github.com/VaalaCat/frp-panel/common"
"github.com/VaalaCat/frp-panel/defs"
"github.com/VaalaCat/frp-panel/models"
"github.com/VaalaCat/frp-panel/services/app"
"github.com/VaalaCat/frp-panel/services/dao"
"github.com/VaalaCat/frp-panel/utils"
"github.com/VaalaCat/frp-panel/utils/logger"
"github.com/gin-gonic/gin"
)
func AuthCtx(appInstance app.Application) func(*gin.Context) {
return func(c *gin.Context) {
var uid int64
var err error
var u *models.UserEntity
appCtx := app.NewContext(c, appInstance)
defer func() {
logger.Logger(c).Info("finish auth user middleware")
}()
userID, ok := utils.GetValue[int](c, defs.UserIDKey)
if !ok {
logger.Logger(c).Errorf("invalid user id")
common.ErrUnAuthorized(c, "token invalid")
c.Abort()
return
}
u, err = dao.NewQuery(appCtx).GetUserByUserID(userID)
if err != nil {
logger.Logger(c).Errorf("get user by user id failed: %v", err)
common.ErrUnAuthorized(c, "token invalid")
c.Abort()
return
}
logger.Logger(c).Infof("auth middleware authed user is: [%+v]", u)
if u.Valid() {
logger.Logger(c).Infof("set auth user to context, login success")
c.Set(defs.UserInfoKey, u)
c.Next()
return
} else {
if uid == 1 {
logger.Logger(c).Infof("seems to be admin assign token login")
c.Next()
return
}
logger.Logger(c).Errorf("invalid authorization, auth ctx middleware login failed")
common.ErrUnAuthorized(c, "token invalid")
c.Abort()
return
}
}
}
func AuthAdmin(c *gin.Context) {
u := common.GetUserInfo(c)
if u != nil && u.GetRole() == models.ROLE_ADMIN {
common.ErrUnAuthorized(c, "permission denied")
c.Abort()
return
}
c.Next()
}