Files
jx-print/controllers/controller.go
suyl 0fd6aa4207 aa
2021-07-20 16:25:36 +08:00

138 lines
3.5 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/jx-print/globals"
"git.rosy.net.cn/jx-print/model"
"git.rosy.net.cn/jx-print/utils"
"github.com/dchest/captcha"
"github.com/gin-gonic/gin"
"net/http"
"strings"
)
type CallBack struct {
Data string `json:"data"`
Code string `json:"code"`
Desc string `json:"desc"`
}
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") {
if cookie, err = c.Request.Cookie("token"); err != nil {
c.JSON(http.StatusOK, &CallBack{
Desc: err.Error(),
Code: model.ErrCodeNormal,
})
return nil
} else {
tokenInfo.Token = cookie.Value
}
globals.SugarLogger.Debugf("checkToken token: %v", tokenInfo.Token)
if tokenMap = utils.GetKey(tokenInfo.Token).(map[string]interface{}); tokenMap == nil {
err = fmt.Errorf("token过期或无效请重新登录")
c.JSON(http.StatusOK, &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, &CallBack{
Desc: err.Error(),
Code: model.ErrCodeToken,
})
return nil
}
globals.SugarLogger.Debugf("checkToken user: %v", utils.Format4Output(user, true))
}
return tokenInfo
}
func callFunc(c *gin.Context, worker func() (retVal interface{}, errCode string, err error)) bool {
var (
err error
callBack = &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 {
//session := sessions.Default(c)
if captchaId := utils.GetKey(c.ClientIP() + model.SessionKey).(string); captchaId != "" {
utils.DelKey(c.ClientIP() + model.SessionKey)
if captcha.VerifyString(captchaId, code) {
return true
} else {
return false
}
} else {
return false
}
//if captchaId := session.Get(c.ClientIP() + model.SessionKey); captchaId != nil {
// session.Delete(c.ClientIP() + model.SessionKey)
// _ = session.Save()
// if captcha.VerifyString(captchaId.(string), code) {
// return true
// } else {
// return false
// }
//} else {
// return false
//}
}
func buildErrJson(c *gin.Context, err error) {
c.JSON(http.StatusOK, &CallBack{
Code: model.ErrCodeNormal,
Desc: err.Error(),
})
globals.SugarLogger.Debugf("End API :%s error:%v:", c.Request.URL, err)
}