diff --git a/controllers/app_controller.go b/controllers/app_controller.go new file mode 100644 index 0000000..e4824a1 --- /dev/null +++ b/controllers/app_controller.go @@ -0,0 +1,37 @@ +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" +) + +//查询账号下的app GET +func GetApps(c *gin.Context) { + var ( + b, ok bool + token string + user *model.User + ) + globals.SugarLogger.Debugf("Begin API :%s params: %v ip: %s", c.Request.URL, c.Params, c.ClientIP()) + if token, b = checkToken(c); !b { + return + } + if user, ok = utils.GetKet(token).(*model.User); !ok { + c.JSON(http.StatusOK, &CallBack{ + Code: model.ErrCodeToken, + Desc: "token 过期或无效!", + }) + return + } + if !callFunc(c, func() (retVal interface{}, errCode string, err error) { + retVal, err = services.GetApps(c, user) + return retVal, "", err + }) { + return + } + return +} diff --git a/controllers/controller.go b/controllers/controller.go index bdb59ad..9f5da7c 100644 --- a/controllers/controller.go +++ b/controllers/controller.go @@ -5,6 +5,7 @@ import ( "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-contrib/sessions" "github.com/gin-gonic/gin" @@ -22,35 +23,43 @@ func init() { globals.SugarLogger.Debugf("test init ...") } +func checkToken(c *gin.Context) (token string, b bool) { + var ( + cookie *http.Cookie + err error + ) + //验证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 "", false + } else { + token = cookie.Value + } + if user := utils.GetKet(token); user == nil { + err = fmt.Errorf("token过期或无效,请重新登录!") + c.JSON(http.StatusOK, &CallBack{ + Desc: err.Error(), + Code: model.ErrCodeToken, + }) + return "", false + } + } + return token, true +} + 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 - } - fmt.Println(token) - //if user := putils.GetKet(token); user == nil { - // err = fmt.Errorf("token过期或无效,请重新登录!") - // callBack.Desc = err.Error() - // callBack.Code = model.ErrCodeToken - // c.JSON(http.StatusOK, callBack) - // return false - //} - } if result, _, err = worker(); err == nil { if result != nil { if data, err := json.Marshal(&result); err == nil { diff --git a/controllers/user_controller.go b/controllers/user_controller.go index 720e9df..ac1c7d2 100644 --- a/controllers/user_controller.go +++ b/controllers/user_controller.go @@ -34,6 +34,9 @@ func GetUsers(c *gin.Context) { }) return } + if _, b := checkToken(c); !b { + 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 @@ -116,22 +119,15 @@ func Login(c *gin.Context) { //自动登录,获取token POST func GetTokenInfo(c *gin.Context) { var ( - err error - user = &struct { - Token string `json:"token" form:"token" binding:"required"` - }{} + token string + b bool ) 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) + if token, b = checkToken(c); !b { return } if !callFunc(c, func() (retVal interface{}, errCode string, err error) { - retVal, err = services.GetTokenInfo(c, user.Token) + retVal, err = services.GetTokenInfo(c, token) return retVal, "", err }) { return @@ -142,22 +138,14 @@ func GetTokenInfo(c *gin.Context) { //登出,删token POST func Logout(c *gin.Context) { var ( - err error - user = &struct { - Token string `json:"token" form:"token" binding:"required"` - }{} + token string + b bool ) - 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) + if token, b = checkToken(c); !b { return } if !callFunc(c, func() (retVal interface{}, errCode string, err error) { - err = services.Logout(c, user.Token) + err = services.Logout(c, token) return retVal, "", err }) { return @@ -182,6 +170,9 @@ func UpdateUser(c *gin.Context) { globals.SugarLogger.Debugf("End API :%s error:%v:", c.Request.URL, err) return } + if _, b := checkToken(c); !b { + return + } if !callFunc(c, func() (retVal interface{}, errCode string, err error) { err = services.UpdateUser(c, user.Payload) return retVal, "", err diff --git a/dao/app_dao.go b/dao/app_dao.go new file mode 100644 index 0000000..14a96c3 --- /dev/null +++ b/dao/app_dao.go @@ -0,0 +1,23 @@ +package dao + +import ( + "git.rosy.net.cn/jx-print/model" + "github.com/jmoiron/sqlx" +) + +func GetApps(db *sqlx.DB, userID string) (apps []*model.Apps, err error) { + var sqlParams []interface{} + sql := ` + SELECT * + FROM apps + WHERE 1 = 1 + ` + if userID != "" { + sql += " AND user_id = ?" + sqlParams = append(sqlParams, userID) + } + if err = db.Select(&apps, sql, sqlParams...); err == nil { + return apps, err + } + return apps, err +} diff --git a/dao/user_dao.go b/dao/user_dao.go index 68f073a..292e374 100644 --- a/dao/user_dao.go +++ b/dao/user_dao.go @@ -30,6 +30,20 @@ func GetUsers(db *sqlx.DB, userID, name, mobile string) (users []*model.User, er return users, err } +func GetUser(db *sqlx.DB, userID string) (user *model.User, err error) { + var users []*model.User + sql := ` + SELECT * + FROM user + WHERE 1 = 1 AND user_id = ? + ` + sqlParams := []interface{}{userID} + if err = db.Select(&users, sql, sqlParams...); err == nil { + return users[0], err + } + return users[0], err +} + func GetUserForLogin(db *sqlx.DB, name, password string) (user *model.User, err error) { var users []*model.User sql := ` diff --git a/model/model.go b/model/model.go index 32699aa..fb0af1a 100644 --- a/model/model.go +++ b/model/model.go @@ -41,3 +41,43 @@ type ModelIDCULD struct { LastOperator string `json:"last_operator" db:"last_operator"` DeletedAt *time.Time `json:"deleted_at" db:"deleted_at"` } + +type User struct { + ID int `json:"id" db:"id"` + CreatedAt *time.Time `json:"created_at" db:"created_at"` + UpdatedAt *time.Time `json:"updated_at" db:"updated_at"` + LastOperator string `json:"last_operator" db:"last_operator"` + DeletedAt *time.Time `json:"deleted_at" db:"deleted_at"` + UserID string `json:"user_id" db:"user_id"` // 内部唯一标识 + Password string `json:"password"` //密码 + Name string `json:"name"` // 外部显示标识(当前可以重复) + Mobile string `json:"mobile"` + Email string `json:"email"` + Avatar string `json:"avatar"` // 头像 + Status int8 `json:"status"` + Type int8 `json:"type"` // 用户类型 + Company string `json:"company"` //公司名称 + CityCode int `json:"city_code" db:"city_code"` + DistrictCode int `json:"district_code" db:"district_code"` + Address string `json:"address"` + + IDCardNo string `json:"id_card_no" db:"id_card_no"` // 身份证号 + Remark string `json:"remark"` + + LastLoginAt *time.Time `json:"last_login_at" db:"last_login_at"` + LastLoginIP string `json:"last_login_ip" db:"last_login_ip"` + LastLoginType string `json:"last_login_type" db:"last_login_type"` +} + +type Apps struct { + ID int `json:"id" db:"id"` + CreatedAt *time.Time `json:"created_at" db:"created_at"` + UpdatedAt *time.Time `json:"updated_at" db:"updated_at"` + LastOperator string `json:"last_operator" db:"last_operator"` + DeletedAt *time.Time `json:"deleted_at" db:"deleted_at"` + UserID string `json:"user_id" db:"user_id"` //属于哪个账号的 + Name string `json:"name"` //应用名称 + Type int `json:"type"` //应用类型 + AppKey string `json:"app_key" db:"app_key"` //Key + Status int `json:"status"` //状态 +} diff --git a/model/user.go b/model/user.go deleted file mode 100644 index 82ef290..0000000 --- a/model/user.go +++ /dev/null @@ -1,32 +0,0 @@ -package model - -import ( - "time" -) - -type User struct { - ID int `json:"id" db:"id"` - CreatedAt *time.Time `json:"created_at" db:"created_at"` - UpdatedAt *time.Time `json:"updated_at" db:"updated_at"` - LastOperator string `json:"last_operator" db:"last_operator"` - DeletedAt *time.Time `json:"deleted_at" db:"deleted_at"` - UserID string `json:"user_id" db:"user_id"` // 内部唯一标识 - Password string `json:"password"` //密码 - Name string `json:"name"` // 外部显示标识(当前可以重复) - Mobile string `json:"mobile"` - Email string `json:"email"` - Avatar string `json:"avatar"` // 头像 - Status int8 `json:"status"` - Type int8 `json:"type"` // 用户类型 - Company string `json:"company"` //公司名称 - CityCode int `json:"city_code" db:"city_code"` - DistrictCode int `json:"district_code" db:"district_code"` - Address string `json:"address"` - - IDCardNo string `json:"id_card_no" db:"id_card_no"` // 身份证号 - Remark string `json:"remark"` - - LastLoginAt *time.Time `json:"last_login_at" db:"last_login_at"` - LastLoginIP string `json:"last_login_ip" db:"last_login_ip"` - LastLoginType string `json:"last_login_type" db:"last_login_type"` -} diff --git a/routers/router.go b/routers/router.go index feebea5..9409113 100644 --- a/routers/router.go +++ b/routers/router.go @@ -13,6 +13,9 @@ func Init(r *gin.Engine) { user.GET("/getTokenInfo", controllers.GetTokenInfo) user.GET("/logout", controllers.Logout) user.GET("/updateUser", controllers.UpdateUser) + //app + app := v2.Group("/app") + app.GET("/getApps", controllers.GetApps) //v1是不需要token的 v1 := r.Group("v1") diff --git a/services/app.go b/services/app.go new file mode 100644 index 0000000..d8e62a2 --- /dev/null +++ b/services/app.go @@ -0,0 +1,19 @@ +package services + +import ( + "fmt" + "git.rosy.net.cn/jx-print/dao" + "git.rosy.net.cn/jx-print/globals" + "git.rosy.net.cn/jx-print/model" + "github.com/gin-gonic/gin" +) + +func GetApps(c *gin.Context, user *model.User) (apps []*model.Apps, err error) { + if user == nil { + return nil, fmt.Errorf("未获取到账号信息!") + } + if user.UserID == "" { + return nil, fmt.Errorf("账号信息有误,请重新登录!") + } + return dao.GetApps(globals.GetDB(), user.UserID) +}