app
This commit is contained in:
37
controllers/app_controller.go
Normal file
37
controllers/app_controller.go
Normal file
@@ -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
|
||||||
|
}
|
||||||
@@ -5,6 +5,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"git.rosy.net.cn/jx-print/globals"
|
"git.rosy.net.cn/jx-print/globals"
|
||||||
"git.rosy.net.cn/jx-print/model"
|
"git.rosy.net.cn/jx-print/model"
|
||||||
|
"git.rosy.net.cn/jx-print/utils"
|
||||||
"github.com/dchest/captcha"
|
"github.com/dchest/captcha"
|
||||||
"github.com/gin-contrib/sessions"
|
"github.com/gin-contrib/sessions"
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
@@ -22,35 +23,43 @@ func init() {
|
|||||||
globals.SugarLogger.Debugf("test 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 {
|
func callFunc(c *gin.Context, worker func() (retVal interface{}, errCode string, err error)) bool {
|
||||||
var (
|
var (
|
||||||
err error
|
err error
|
||||||
callBack = &CallBack{
|
callBack = &CallBack{
|
||||||
Code: model.ErrCodeNormal,
|
Code: model.ErrCodeNormal,
|
||||||
}
|
}
|
||||||
token string
|
|
||||||
cookie *http.Cookie
|
|
||||||
result interface{}
|
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, _, err = worker(); err == nil {
|
||||||
if result != nil {
|
if result != nil {
|
||||||
if data, err := json.Marshal(&result); err == nil {
|
if data, err := json.Marshal(&result); err == nil {
|
||||||
|
|||||||
@@ -34,6 +34,9 @@ func GetUsers(c *gin.Context) {
|
|||||||
})
|
})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
if _, b := checkToken(c); !b {
|
||||||
|
return
|
||||||
|
}
|
||||||
if !callFunc(c, func() (retVal interface{}, errCode string, err error) {
|
if !callFunc(c, func() (retVal interface{}, errCode string, err error) {
|
||||||
retVal, err = services.GetUsers(c, user.UserID, user.Name, user.Mobile)
|
retVal, err = services.GetUsers(c, user.UserID, user.Name, user.Mobile)
|
||||||
return retVal, "", err
|
return retVal, "", err
|
||||||
@@ -116,22 +119,15 @@ func Login(c *gin.Context) {
|
|||||||
//自动登录,获取token POST
|
//自动登录,获取token POST
|
||||||
func GetTokenInfo(c *gin.Context) {
|
func GetTokenInfo(c *gin.Context) {
|
||||||
var (
|
var (
|
||||||
err error
|
token string
|
||||||
user = &struct {
|
b bool
|
||||||
Token string `json:"token" form:"token" binding:"required"`
|
|
||||||
}{}
|
|
||||||
)
|
)
|
||||||
globals.SugarLogger.Debugf("Begin API :%s params: %v ip: %s", c.Request.URL, c.Params, c.ClientIP())
|
globals.SugarLogger.Debugf("Begin API :%s params: %v ip: %s", c.Request.URL, c.Params, c.ClientIP())
|
||||||
if err = c.Bind(&user); err != nil {
|
if token, b = checkToken(c); !b {
|
||||||
c.JSON(http.StatusOK, &CallBack{
|
|
||||||
Code: model.ErrCodeNormal,
|
|
||||||
Desc: err.Error(),
|
|
||||||
})
|
|
||||||
globals.SugarLogger.Debugf("End API :%s error:%v:", c.Request.URL, err)
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if !callFunc(c, func() (retVal interface{}, errCode string, err error) {
|
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 retVal, "", err
|
||||||
}) {
|
}) {
|
||||||
return
|
return
|
||||||
@@ -142,22 +138,14 @@ func GetTokenInfo(c *gin.Context) {
|
|||||||
//登出,删token POST
|
//登出,删token POST
|
||||||
func Logout(c *gin.Context) {
|
func Logout(c *gin.Context) {
|
||||||
var (
|
var (
|
||||||
err error
|
token string
|
||||||
user = &struct {
|
b bool
|
||||||
Token string `json:"token" form:"token" binding:"required"`
|
|
||||||
}{}
|
|
||||||
)
|
)
|
||||||
globals.SugarLogger.Debugf("Begin API :%s params: %v ip: %s", c.Request.URL, c.Params, c.ClientIP())
|
if token, b = checkToken(c); !b {
|
||||||
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
|
return
|
||||||
}
|
}
|
||||||
if !callFunc(c, func() (retVal interface{}, errCode string, err error) {
|
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 retVal, "", err
|
||||||
}) {
|
}) {
|
||||||
return
|
return
|
||||||
@@ -182,6 +170,9 @@ func UpdateUser(c *gin.Context) {
|
|||||||
globals.SugarLogger.Debugf("End API :%s error:%v:", c.Request.URL, err)
|
globals.SugarLogger.Debugf("End API :%s error:%v:", c.Request.URL, err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
if _, b := checkToken(c); !b {
|
||||||
|
return
|
||||||
|
}
|
||||||
if !callFunc(c, func() (retVal interface{}, errCode string, err error) {
|
if !callFunc(c, func() (retVal interface{}, errCode string, err error) {
|
||||||
err = services.UpdateUser(c, user.Payload)
|
err = services.UpdateUser(c, user.Payload)
|
||||||
return retVal, "", err
|
return retVal, "", err
|
||||||
|
|||||||
23
dao/app_dao.go
Normal file
23
dao/app_dao.go
Normal file
@@ -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
|
||||||
|
}
|
||||||
@@ -30,6 +30,20 @@ func GetUsers(db *sqlx.DB, userID, name, mobile string) (users []*model.User, er
|
|||||||
return users, err
|
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) {
|
func GetUserForLogin(db *sqlx.DB, name, password string) (user *model.User, err error) {
|
||||||
var users []*model.User
|
var users []*model.User
|
||||||
sql := `
|
sql := `
|
||||||
|
|||||||
@@ -41,3 +41,43 @@ type ModelIDCULD struct {
|
|||||||
LastOperator string `json:"last_operator" db:"last_operator"`
|
LastOperator string `json:"last_operator" db:"last_operator"`
|
||||||
DeletedAt *time.Time `json:"deleted_at" db:"deleted_at"`
|
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"` //状态
|
||||||
|
}
|
||||||
|
|||||||
@@ -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"`
|
|
||||||
}
|
|
||||||
@@ -13,6 +13,9 @@ func Init(r *gin.Engine) {
|
|||||||
user.GET("/getTokenInfo", controllers.GetTokenInfo)
|
user.GET("/getTokenInfo", controllers.GetTokenInfo)
|
||||||
user.GET("/logout", controllers.Logout)
|
user.GET("/logout", controllers.Logout)
|
||||||
user.GET("/updateUser", controllers.UpdateUser)
|
user.GET("/updateUser", controllers.UpdateUser)
|
||||||
|
//app
|
||||||
|
app := v2.Group("/app")
|
||||||
|
app.GET("/getApps", controllers.GetApps)
|
||||||
|
|
||||||
//v1是不需要token的
|
//v1是不需要token的
|
||||||
v1 := r.Group("v1")
|
v1 := r.Group("v1")
|
||||||
|
|||||||
19
services/app.go
Normal file
19
services/app.go
Normal file
@@ -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)
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user