注册
This commit is contained in:
@@ -1,7 +1,93 @@
|
||||
package controllers
|
||||
|
||||
import "git.rosy.net.cn/jx-print/globals"
|
||||
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"
|
||||
)
|
||||
|
||||
func init() {
|
||||
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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,10 +1,120 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"git.rosy.net.cn/jx-print/globals"
|
||||
"git.rosy.net.cn/jx-print/model"
|
||||
"git.rosy.net.cn/jx-print/services"
|
||||
"git.rosy.net.cn/jx-print/utils"
|
||||
"github.com/gin-gonic/gin"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
func RefreshCode(c *gin.Context){
|
||||
utils.Captcha(c,4)
|
||||
//刷新验证码 POST
|
||||
func RefreshCode(c *gin.Context) {
|
||||
utils.Captcha(c, 4)
|
||||
}
|
||||
|
||||
type GetUsersParam struct {
|
||||
Name string `json:"name" uri:"name"` //用户名
|
||||
UserID string `json:"user_id" uri:"user_id"` //用户名
|
||||
Mobile string `json:"mobile" uri:"mobile"` //用户名
|
||||
}
|
||||
|
||||
//查询用户 GET
|
||||
func GetUsers(c *gin.Context) {
|
||||
var (
|
||||
err error
|
||||
user = &GetUsersParam{}
|
||||
)
|
||||
globals.SugarLogger.Debugf("Begin API :%s params: %v ip: %s", c.Request.URL, c.Params, c.ClientIP())
|
||||
if err = c.ShouldBindUri(&user); err != nil {
|
||||
c.JSON(http.StatusOK, &CallBack{
|
||||
Code: model.ErrCodeNormal,
|
||||
Desc: err.Error(),
|
||||
})
|
||||
return
|
||||
}
|
||||
if !callFunc(c, func() (retVal interface{}, errCode string, err error) {
|
||||
retVal, err = services.GetUsers(c, user.UserID, user.Name, user.Mobile)
|
||||
return retVal, "", err
|
||||
}) {
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
type RegisterUserParam struct {
|
||||
Name string `json:"name" form:"name" binding:"required"` //用户名
|
||||
Password string `json:"password" form:"password" binding:"required"` //密码,md5后的
|
||||
Code string `json:"code" form:"code" binding:"required"` //验证码
|
||||
}
|
||||
|
||||
//注册 POST
|
||||
func RegisterUser(c *gin.Context) {
|
||||
var (
|
||||
err error
|
||||
user = &RegisterUserParam{}
|
||||
)
|
||||
globals.SugarLogger.Debugf("Begin API :%s params: %v ip: %s", c.Request.URL, c.Params, c.ClientIP())
|
||||
if err = c.Bind(&user); err != nil {
|
||||
c.JSON(http.StatusOK, &CallBack{
|
||||
Code: model.ErrCodeNormal,
|
||||
Desc: err.Error(),
|
||||
})
|
||||
globals.SugarLogger.Debugf("End API :%s error:%v:", c.Request.URL, err)
|
||||
return
|
||||
}
|
||||
if !captchaVerify(c, user.Code) {
|
||||
c.JSON(http.StatusOK, &CallBack{
|
||||
Code: model.ErrCodeNormal,
|
||||
Desc: "验证码错误!",
|
||||
})
|
||||
globals.SugarLogger.Debugf("End API :%s error:%v:", c.Request.URL, err)
|
||||
return
|
||||
}
|
||||
if !callFunc(c, func() (retVal interface{}, errCode string, err error) {
|
||||
err = services.RegisterUser(c, user.Name, user.Password)
|
||||
return retVal, "", err
|
||||
}) {
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
type LoginParam struct {
|
||||
Name string `json:"name" form:"name" binding:"required"` //用户名
|
||||
Password string `json:"password" form:"password" binding:"required"` //密码,md5后的
|
||||
Code string `json:"code" form:"code" binding:"required"` //验证码
|
||||
}
|
||||
|
||||
//登录 POST
|
||||
func Login(c *gin.Context) {
|
||||
var (
|
||||
err error
|
||||
user = &LoginParam{}
|
||||
)
|
||||
globals.SugarLogger.Debugf("Begin API :%s params: %v ip: %s", c.Request.URL, c.Params, c.ClientIP())
|
||||
if err = c.Bind(&user); err != nil {
|
||||
c.JSON(http.StatusOK, &CallBack{
|
||||
Code: model.ErrCodeNormal,
|
||||
Desc: err.Error(),
|
||||
})
|
||||
globals.SugarLogger.Debugf("End API :%s error:%v:", c.Request.URL, err)
|
||||
return
|
||||
}
|
||||
if !captchaVerify(c, user.Code) {
|
||||
c.JSON(http.StatusOK, &CallBack{
|
||||
Code: model.ErrCodeNormal,
|
||||
Desc: "验证码错误!",
|
||||
})
|
||||
globals.SugarLogger.Debugf("End API :%s error:%v:", c.Request.URL, err)
|
||||
return
|
||||
}
|
||||
if !callFunc(c, func() (retVal interface{}, errCode string, err error) {
|
||||
retVal, err = services.Login(c, user.Name, user.Password, user.Code)
|
||||
return retVal, "", err
|
||||
}) {
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user