Files
jx-print/controllers/controller.go
邹宗楠 f4f6bbd80b 1
2022-07-26 17:37:13 +08:00

160 lines
4.1 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package controllers
import (
"encoding/json"
"fmt"
"git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-print/globals"
"git.rosy.net.cn/jx-print/model"
wxConst "git.rosy.net.cn/jx-print/model/app_model"
"git.rosy.net.cn/jx-print/putils"
"git.rosy.net.cn/jx-print/services/print_server"
"github.com/dchest/captcha"
"github.com/gin-gonic/gin"
"net/http"
"strings"
"time"
)
func init() {
globals.SugarLogger.Debugf("test init ...")
}
func CheckToken(c *gin.Context) (tokenInfo *model.TokenInfo) {
var (
cookie *http.Cookie
err error
tokenMap map[string]interface{}
user *model.User
)
tokenInfo = &model.TokenInfo{}
//验证token
//v2下的接口需要验证v1不需要
if !strings.Contains(c.Request.URL.String(), "v1") || !strings.Contains(c.Request.URL.String(), "app_no") {
if cookie, err = c.Request.Cookie("token"); err != nil {
c.JSON(http.StatusOK, &model.CallBack{
Desc: err.Error(),
Code: model.ErrCodeNormal,
})
return nil
} else {
tokenInfo.Token = cookie.Value
}
globals.SugarLogger.Debugf("checkToken token: %v", tokenInfo.Token)
if tokenMap = putils.GetKey(tokenInfo.Token).(map[string]interface{}); tokenMap == nil {
err = fmt.Errorf("token过期或无效请重新登录")
c.JSON(http.StatusOK, &model.CallBack{
Desc: err.Error(),
Code: model.ErrCodeToken,
})
return nil
}
data, _ := json.Marshal(tokenMap)
if err = json.Unmarshal(data, &user); err == nil && user != nil {
tokenInfo.User = user
} else {
err = fmt.Errorf("token错误请重新登录")
c.JSON(http.StatusOK, &model.CallBack{
Desc: err.Error(),
Code: model.ErrCodeToken,
})
return nil
}
globals.SugarLogger.Debugf("checkToken user: %v", putils.Format4Output(user, true))
}
return tokenInfo
}
func CallFunc(c *gin.Context, worker func() (retVal interface{}, errCode string, err error)) bool {
var (
err error
callBack = &model.CallBack{
Code: model.ErrCodeNormal,
}
result interface{}
)
if result, _, err = worker(); err == nil {
if result != nil {
if data, err := json.Marshal(&result); err == nil {
callBack.Code = model.ErrCodeSuccess
callBack.Data = string(data)
c.JSON(http.StatusOK, callBack)
globals.SugarLogger.Debugf("End API :%s success", c.Request.URL)
return true
} else {
err = fmt.Errorf("data error!")
callBack.Desc = err.Error()
c.JSON(http.StatusOK, callBack)
return false
}
} else {
callBack.Code = model.ErrCodeSuccess
c.JSON(http.StatusOK, callBack)
globals.SugarLogger.Debugf("End API :%s success", c.Request.URL)
return true
}
} else {
callBack.Desc = err.Error()
c.JSON(http.StatusOK, callBack)
globals.SugarLogger.Debugf("End API :%s error:%v", c.Request.URL, err)
}
return false
}
func CaptchaVerify(c *gin.Context, code string) bool {
verifyCode := putils.GetKey(c.ClientIP() + model.SessionKey)
if verifyCode == nil {
return true
}
if captchaId := verifyCode.(string); captchaId != "" {
putils.DelKey(c.ClientIP() + model.SessionKey)
return captcha.VerifyString(captchaId, code)
}
return false
}
func BuildErrJson(c *gin.Context, err error) {
c.JSON(http.StatusOK, &model.CallBack{
Code: model.ErrCodeNormal,
Desc: err.Error(),
})
globals.SugarLogger.Debugf("End API :%s error:%v:", c.Request.URL, err)
}
func GetConfig(c *gin.Context) {
var (
err error
param = &struct {
Type string `json:"type" form:"type" binding:"required"`
Key string `json:"key" form:"key" binding:"required"`
}{}
)
if err = c.ShouldBind(&param); err != nil {
BuildErrJson(c, err)
return
}
if !CallFunc(c, func() (retVal interface{}, errCode string, err error) {
retVal, err = print_server.GetConfig(c, param.Type, param.Key)
return retVal, "", err
}) {
return
}
}
func SetToken(user *model.User) (token string, err error) {
token = createToken(user)
err = putils.SetKey(token, user, putils.DefTokenDuration)
return token, err
}
func createToken(user *model.User) (token string) {
return strings.Join([]string{
wxConst.TokenHeader,
wxConst.TokenVer,
user.UserID,
time.Now().Format("20060102-150405"),
utils.GetUUID(),
user.Name,
}, wxConst.TokenTypeSep)
}