126 lines
3.0 KiB
Go
126 lines
3.0 KiB
Go
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
|
||
ok bool
|
||
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
|
||
}
|
||
if user, ok = utils.GetKet(tokenInfo.Token).(*model.User); !ok || user == nil {
|
||
err = fmt.Errorf("token过期或无效,请重新登录!")
|
||
c.JSON(http.StatusOK, &CallBack{
|
||
Desc: err.Error(),
|
||
Code: model.ErrCodeToken,
|
||
})
|
||
return nil
|
||
}
|
||
tokenInfo.User = user
|
||
}
|
||
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.GetKet(c.ClientIP() + model.SessionKey); captchaId != nil {
|
||
utils.DelKey(c.ClientIP() + model.SessionKey)
|
||
if captcha.VerifyString(captchaId.(string), 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)
|
||
}
|