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 } }