Files
jx-print/controllers/controller.go
2021-07-07 10:21:51 +08:00

94 lines
2.2 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"
"github.com/dchest/captcha"
"github.com/gin-contrib/sessions"
"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 callFunc(c *gin.Context, worker func() (retVal interface{}, errCode string, err error)) bool {
var (
err error
callBack = &CallBack{
Code: model.ErrCodeNormal,
}
token string
cookie *http.Cookie
result interface{}
)
//验证token
//v2下的接口需要验证v1不需要
if !strings.Contains(c.Request.URL.String(), "v1") {
if cookie, err = c.Request.Cookie("token"); err != nil {
callBack.Desc = err.Error()
c.JSON(http.StatusOK, callBack)
return false
} else {
token = cookie.Value
}
if token != "token" {
err = fmt.Errorf("token 已过期,请重新登录!")
callBack.Desc = err.Error()
c.JSON(http.StatusOK, callBack)
return false
}
}
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 := 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
}
}