mirror of
https://github.com/lzh-1625/go_process_manager.git
synced 2025-09-26 20:11:20 +08:00
74 lines
1.5 KiB
Go
74 lines
1.5 KiB
Go
package middle
|
|
|
|
import (
|
|
"errors"
|
|
"msm/consts/ctxflag"
|
|
"msm/dao"
|
|
"msm/log"
|
|
"msm/utils"
|
|
"slices"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
// code -1为失败,-2为token失效
|
|
func rErr(ctx *gin.Context, code int, message string, err error) {
|
|
var statusCode int
|
|
switch code {
|
|
case -1:
|
|
statusCode = 500
|
|
case -2:
|
|
statusCode = 401
|
|
default:
|
|
statusCode = 200
|
|
}
|
|
log.Logger.Warn(err)
|
|
ctx.JSON(statusCode, map[string]any{
|
|
"code": code,
|
|
"msg": message,
|
|
})
|
|
ctx.Abort()
|
|
}
|
|
|
|
func CheckToken() gin.HandlerFunc {
|
|
return func(c *gin.Context) {
|
|
whiteList := []string{
|
|
"/api/user/login",
|
|
"/api/user/register/admin",
|
|
}
|
|
if !slices.Contains(whiteList, c.Request.URL.Path) {
|
|
var token string
|
|
if c.Request.Header.Get("token") != "" {
|
|
token = c.Request.Header.Get("token")
|
|
} else {
|
|
token = c.Query("token")
|
|
}
|
|
if _, err := utils.ParseToken(token); err != nil {
|
|
rErr(c, -2, "token校验失败", err)
|
|
return
|
|
}
|
|
if username, err := getUser(c); err != nil {
|
|
rErr(c, -1, "无法获取user信息", err)
|
|
} else {
|
|
c.Set(ctxflag.USER_NAME, username)
|
|
c.Set(ctxflag.ROLE, dao.UserDao.GetUserByName(username).Role)
|
|
}
|
|
}
|
|
c.Next()
|
|
}
|
|
}
|
|
|
|
func getUser(ctx *gin.Context) (string, error) {
|
|
var token string
|
|
if ctx.Request.Header.Get("token") != "" {
|
|
token = ctx.Request.Header.Get("token")
|
|
} else {
|
|
token = ctx.Query("token")
|
|
}
|
|
if mc, err := utils.ParseToken(token); err == nil && mc != nil {
|
|
return mc.UserName, nil
|
|
} else {
|
|
return "", errors.Join(errors.New("用户信息获取失败"), err)
|
|
}
|
|
}
|