From cb707715e4648719a5ab083f0623620079b20f2a Mon Sep 17 00:00:00 2001
From: liuxiaolong <736321739@qq.com>
Date: 星期四, 20 六月 2019 16:23:42 +0800
Subject: [PATCH] task rules set complete
---
controllers/user.go | 40 ++++++
middlewares/auth/auth.go | 45 +++++++
controllers/cameraTask.go | 79 ++++++++++--
controllers/cameraTimerule.go | 2
controllers/cameraTaskArgs.go | 9
main.go | 1
controllers/task.go | 20 +++
controllers/sdk.go | 4
middlewares/auth/jwt.go | 107 +++++++++++++++++
router/router.go | 23 ++-
10 files changed, 297 insertions(+), 33 deletions(-)
diff --git a/controllers/cameraTask.go b/controllers/cameraTask.go
index 7417413..4066ceb 100644
--- a/controllers/cameraTask.go
+++ b/controllers/cameraTask.go
@@ -2,10 +2,10 @@
import (
"basic.com/dbapi.git"
- "webserver/extend/code"
- "webserver/extend/util"
"fmt"
"github.com/gin-gonic/gin"
+ "webserver/extend/code"
+ "webserver/extend/util"
"webserver/models"
)
@@ -173,37 +173,88 @@
}
}
-type TransAndAlarmLevelVo struct {
+type DataTransVo struct {
CameraIds []string `json:"camera_ids"`
TaskId string `json:"task_id"`
IsDataTrans int `json:"is_data_trans"`
- GroupLevels []GroupAlarmLevelVo `json:"group_levels"`
}
type GroupAlarmLevelVo struct {
GroupId string `json:"group_id"`
AlarmLevel int `json:"alarm_level"`
}
-// @Summary 淇濆瓨浠诲姟鏄惁涓嬩紶鏁版嵁浠ュ強缁勬姤璀︾瓑绾�
-// @Description 淇濆瓨浠诲姟鏄惁涓嬩紶鏁版嵁浠ュ強缁勬姤璀︾瓑绾�
+// @Summary 淇濆瓨浠诲姟鏄惁涓嬩紶鏁版嵁
+// @Description 淇濆瓨浠诲姟鏄惁涓嬩紶鏁版嵁
// @Accept json
// @Produce json
// @Tags CameraTask
-// @Param TransAndAlarmLevel body controllers.TransAndAlarmLevelVo true "璇锋眰鍙傛暟缁撴瀯"
+// @Param TransAndAlarmLevel body controllers.DataTransVo true "璇锋眰鍙傛暟缁撴瀯"
// @Success 200 {string} json "{"code":200, success:true, msg:"", data:""}"
// @Failure 500 {string} json "{"code":500, success:false, msg:"", data:""}"
-// @Router /data/api-v/cameraTask/saveTransAndAlarmLevel [post]
-func (controller CameraTaskController) SaveTransAndAlarmLevel(c *gin.Context) {
- var vo TransAndAlarmLevelVo
- if err := c.BindJSON(&vo);err!=nil {
+// @Router /data/api-v/cameraTask/saveIsDataTrans [post]
+func (controller CameraTaskController) SaveIsDataTrans(c *gin.Context) {
+ var transVo DataTransVo
+ if err := c.BindJSON(&transVo);err!=nil {
util.ResponseFormat(c,code.RequestParamError,"鍙傛暟鏈夎")
return
}
- fmt.Println("SaveTransAndAlarmLevel.vo:",vo)
var api dbapi.CameraTaskApi
- paramBody := util.Struct2Map(vo)
+ paramBody := util.Struct2Map(transVo)
- flag ,data := api.SaveTransAndAlarmLevel(paramBody)
+ flag ,data := api.SaveIsDataTrans(paramBody)
+ if flag {
+ util.ResponseFormat(c,code.Success,data)
+ } else {
+ util.ResponseFormat(c,code.ComError,data)
+ }
+}
+
+// @Summary 淇濆瓨瑙勫垯缁勬姤璀︾瓑绾�
+// @Description 淇濆瓨瑙勫垯缁勬姤璀︾瓑绾�
+// @Produce json
+// @Tags CameraTask
+// @Param GroupLevel body controllers.GroupAlarmLevelVo true "alarmLevel"
+// @Success 200 {string} json "{"code":200, success:true, msg:"", data:""}"
+// @Failure 500 {string} json "{"code":500, success:false, msg:"", data:""}"
+// @Router /data/api-v/cameraTask/saveAlarmLevelByGroup [post]
+func (controller CameraTaskController) SaveAlarmLevelByGroup(c *gin.Context) {
+ var groupLevelVo GroupAlarmLevelVo
+ if err := c.BindJSON(&groupLevelVo);err !=nil {
+ util.ResponseFormat(c,code.RequestParamError,"鍙傛暟鏈夎")
+ return
+ }
+
+ var api dbapi.CameraTaskApi
+ flag,data := api.SaveAlarmLevelByGroup(groupLevelVo.GroupId,groupLevelVo.AlarmLevel)
+ if flag {
+ util.ResponseFormat(c,code.Success,data)
+ } else {
+ util.ResponseFormat(c,code.ComError,data)
+ }
+}
+
+type CameraTaskStatusVo struct {
+ CameraId string `json:"cameraId"`
+ TaskId string `json:"taskId"`
+ Status int `json:"status"`
+}
+
+// @Summary 鏇存柊浠诲姟鐘舵��
+// @Description 鏇存柊浠诲姟鐘舵��
+// @Produce json
+// @Tags CameraTask
+// @Param CameraTaskStatus body controllers.CameraTaskStatusVo true "鍙傛暟缁撴瀯浣�"
+// @Success 200 {string} json "{"code":200, success:true, msg:"", data:""}"
+// @Failure 500 {string} json "{"code":500, success:false, msg:"", data:""}"
+// @Router /data/api-v/cameraTask/updateCameraTaskStatus [post]
+func (controller CameraTaskController) UpdateCameraTaskStatus(c *gin.Context) {
+ var paramVo CameraTaskStatusVo
+ if err := c.BindJSON(¶mVo);err !=nil {
+ util.ResponseFormat(c,code.RequestParamError,"鍙傛暟鏈夎")
+ return
+ }
+ var api dbapi.CameraTaskApi
+ flag, data := api.UpdateCameraTaskStatus(paramVo.CameraId, paramVo.TaskId, paramVo.Status)
if flag {
util.ResponseFormat(c,code.Success,data)
} else {
diff --git a/controllers/cameraTaskArgs.go b/controllers/cameraTaskArgs.go
index 5ccf893..8d6f33f 100644
--- a/controllers/cameraTaskArgs.go
+++ b/controllers/cameraTaskArgs.go
@@ -48,15 +48,16 @@
// @Param cameraIds body controllers.MultiCamera true "鎽勫儚鏈篿ds"
// @Success 200 {string} json "{"code":200, success:true, msg:"", data:""}"
// @Failure 500 {string} json "{"code":500, success:false, msg:"",data:""}"
-// @Router /data/api-v/cameraTaskArgs/getLinkRulesByCameraIds [get]
+// @Router /data/api-v/cameraTaskArgs/getLinkRulesByCameraIds [post]
func (controller CameraTaskArgsController) GetLinkRulesByCameraIds(c *gin.Context) {
- var cameraIds MultiCamera
- if err := c.BindJSON(&cameraIds);err !=nil {
+ var cameraIdsVo MultiCamera
+ if err := c.BindJSON(&cameraIdsVo);err !=nil {
util.ResponseFormat(c,code.RequestParamError,"鍙傛暟鏈夎")
return
}
var api dbapi.CameraTaskArgsApi
- flag,data := api.GetLinkRulesByCameraIds()
+ paramBody := util.Struct2Map(cameraIdsVo)
+ flag,data := api.GetLinkRulesByCameraIds(paramBody)
if flag {
util.ResponseFormat(c,code.Success,data)
} else {
diff --git a/controllers/cameraTimerule.go b/controllers/cameraTimerule.go
index 7450959..a4a249e 100644
--- a/controllers/cameraTimerule.go
+++ b/controllers/cameraTimerule.go
@@ -51,7 +51,7 @@
paramBody["id"] = vo.Id
paramBody["name"] = vo.Name
paramBody["time_rule"] = vo.TimeRule
- fmt.Println("paramBody: ", paramBody)
+
var api dbapi.CameraApi
flag, data := api.SaveCameraTimerule(paramBody)
if flag {
diff --git a/controllers/sdk.go b/controllers/sdk.go
index cbd1ebb..820278d 100644
--- a/controllers/sdk.go
+++ b/controllers/sdk.go
@@ -20,8 +20,8 @@
CreateTime string `json:"create_time"`
CreateBy string `json:"create_by"`
UpdateTime string `json:"update_time"`
- Enabled int `json:"enabled"`//鏄惁鍚敤
- DelFlag int `json:"del_flag"`//閫昏緫鍒犻櫎
+ Enable bool `json:"enable"`//鏄惁鍚敤
+ DelFlag bool `json:"del_flag"`//閫昏緫鍒犻櫎
}
//绠楁硶鍙傛暟瀹氫箟
diff --git a/controllers/task.go b/controllers/task.go
index 07420dc..b76c7b5 100644
--- a/controllers/task.go
+++ b/controllers/task.go
@@ -2,11 +2,12 @@
import (
"basic.com/dbapi.git"
+ "encoding/json"
"time"
+ "github.com/gin-gonic/gin"
"webserver/extend/code"
"webserver/extend/util"
- "github.com/gin-gonic/gin"
)
type TaskController struct{}
@@ -22,6 +23,11 @@
DelFlag bool `json:"del_flag"`
}
+type TaskSdkVo struct {
+ Task TaskVo `json:"task"`
+ Sdks []SdkVo `json:"sdks"`
+}
+
// @Summary 鏌ユ壘鎵�鏈変换鍔★紝鍖呭惈浠诲姟淇℃伅鍜屽搴旂殑绠楁硶淇℃伅
// @Description 鏌ユ壘鎵�鏈変换鍔�
// @Produce json
@@ -34,7 +40,17 @@
var taskApi dbapi.TaskApi
taskInfos := taskApi.FindAll()
- util.ResponseFormat(c, code.Success, taskInfos)
+ var tasks []TaskSdkVo
+ dataBytes, err := json.Marshal(taskInfos)
+ if err !=nil {
+ util.ResponseFormat(c,code.ComError,[]TaskSdkVo{})
+ } else {
+ if err := json.Unmarshal(dataBytes, &tasks);err !=nil {
+ util.ResponseFormat(c,code.ComError,[]TaskSdkVo{})
+ } else {
+ util.ResponseFormat(c,code.Success,tasks)
+ }
+ }
}
// @Summary 娣诲姞浠诲姟
diff --git a/controllers/user.go b/controllers/user.go
index e212688..a406775 100644
--- a/controllers/user.go
+++ b/controllers/user.go
@@ -1,9 +1,47 @@
package controllers
import (
+ "basic.com/dbapi.git"
"github.com/gin-gonic/gin"
+ "webserver/extend/code"
+ "webserver/extend/util"
+ "webserver/middlewares/auth"
)
-func Login(c *gin.Context) {
+type UserController struct {
+}
+
+type UserVo struct {
+ UserName string `json:"username"`
+ Password string `json:"password"`
+}
+
+// @Summary 鐢ㄦ埛鐧诲綍
+// @Description 鐢ㄦ埛鐧诲綍
+// @Accept json
+// @Produce json
+// @Tags 鐢ㄦ埛
+// @Param user body UserVo true "鐢ㄦ埛淇℃伅"
+// @Success 200 {string} json "{"code":200, success:true, msg:"", data:""}"
+// @Failure 500 {string} json "{"code":500, success:false, msg:"", data:""}"
+// @Router /data/api-v/user/login [post]
+func (controller UserController) Login(c *gin.Context) {
+ var userVo UserVo
+ if err := c.BindJSON(&userVo);err !=nil {
+ util.ResponseFormat(c,code.RequestParamError,"鍙傛暟鏈夎")
+ return
+ }
+ var api dbapi.UserApi
+ flag, userInfo := api.Login(userVo.UserName, userVo.Password)
+ if flag {
+ authDriver := auth.GenerateAuthDriver()
+ tokenStr := (*authDriver).Login(c.Request, c.Writer, util.Struct2Map(userInfo))
+ util.ResponseFormat(c,code.Success,map[string]interface{}{
+ "userInfo":userInfo,
+ "token":tokenStr,
+ })
+ } else {
+ util.ResponseFormat(c,code.SigninInfoError,"鐢ㄦ埛鍚嶆垨瀵嗙爜閿欒")
+ }
}
\ No newline at end of file
diff --git a/main.go b/main.go
index 0f66a94..14eb75e 100644
--- a/main.go
+++ b/main.go
@@ -20,6 +20,7 @@
config.Init(*envirment)
models.Init()
r := router.NewRouter()
+
r.Run("0.0.0.0:8000")
defer models.CloseDB()
diff --git a/middlewares/auth/auth.go b/middlewares/auth/auth.go
index 8832b06..449ae51 100644
--- a/middlewares/auth/auth.go
+++ b/middlewares/auth/auth.go
@@ -1 +1,46 @@
package auth
+
+import (
+ "github.com/gin-gonic/gin"
+ "net/http"
+ "strings"
+ "webserver/extend/code"
+ "webserver/extend/util"
+)
+
+const (
+ TokenKey = "abc123456789"
+)
+
+type Auth interface {
+ Check(c *gin.Context)bool
+ User(c *gin.Context)interface{}
+ Login(http *http.Request,w http.ResponseWriter,user map[string]interface{})interface{}
+ Logout(http *http.Request,w http.ResponseWriter) bool
+}
+
+func GenerateAuthDriver() *Auth {
+ var authDriver Auth
+ authDriver = NewJwtAuthDriver()
+ return &authDriver
+}
+
+func AuthHandler() gin.HandlerFunc {
+ return func(c *gin.Context) {
+ urlPath := c.Request.URL.Path
+ if strings.Contains(urlPath,"/data/api-v") && !strings.Contains(urlPath,"login"){
+ jwtDriver :=NewJwtAuthDriver()
+ if !jwtDriver.Check(c) {
+ util.ResponseFormat(c,code.TokenNotFound,"灏氭湭鐧诲綍锛岃鐧诲綍")
+ c.Abort()
+ }
+ c.Next()
+ } else {
+ c.Next()
+ }
+ }
+}
+
+func GetCurUser(c *gin.Context)map[string]interface{}{
+ return (*GenerateAuthDriver()).User(c).(map[string]interface{})
+}
\ No newline at end of file
diff --git a/middlewares/auth/jwt.go b/middlewares/auth/jwt.go
index 8832b06..c7074e2 100644
--- a/middlewares/auth/jwt.go
+++ b/middlewares/auth/jwt.go
@@ -1 +1,108 @@
package auth
+
+import (
+ "encoding/json"
+ "errors"
+ jwtLib "github.com/dgrijalva/jwt-go"
+ "github.com/dgrijalva/jwt-go/request"
+ "github.com/gin-gonic/gin"
+ "net/http"
+ "strings"
+ "time"
+)
+
+type jwtAuthManager struct {
+ secret string
+ expire time.Duration
+ alg string
+}
+
+func NewJwtAuthDriver() *jwtAuthManager{
+ return &jwtAuthManager{
+ secret:TokenKey,
+ expire:time.Hour*8,
+ alg:"HS256",
+ }
+}
+
+func (jwtAuth *jwtAuthManager) Check(c *gin.Context) bool {
+ token := c.Request.Header.Get("Authorization")
+ b := "Bearer "
+ if !strings.Contains(token, b) {
+ return false
+ }
+ t := strings.Split(token, b)
+ if len(t) < 2 {
+ return false
+ }
+ var keyFunc = func(token *jwtLib.Token) (interface{},error) {
+ b := []byte(jwtAuth.secret)
+ return b,nil
+ }
+ authJwtToken, err:= request.ParseFromRequest(c.Request,request.OAuth2Extractor,keyFunc)
+ if err !=nil {
+ return false
+ }
+
+ c.Set("User",map[string]interface{}{
+ "token":authJwtToken,
+ })
+
+ return authJwtToken.Valid
+}
+
+func (jwtAuth *jwtAuthManager) User(c *gin.Context) interface{}{
+ var jwtToken *jwtLib.Token
+ if jwtUser, exist := c.Get("User");!exist{
+ tokenStr :=strings.Replace(c.Request.Header.Get("Authorization"),"Bearer ","",-1)
+ if tokenStr == ""{
+ return map[interface{}]interface{}{}
+ }
+ var err error
+ jwtToken,err = jwtLib.Parse(tokenStr, func(token *jwtLib.Token) (interface{}, error) {
+ b :=[]byte(jwtAuth.secret)
+ return b,nil
+ })
+ if err !=nil {
+ panic(err)
+ }
+ } else {
+ jwtToken = jwtUser.(map[string]interface{})["token"].(*jwtLib.Token)
+ }
+ if claims,ok :=jwtToken.Claims.(jwtLib.MapClaims);ok && jwtToken.Valid{
+ var user map[string]interface{}
+ if err := json.Unmarshal([]byte(claims["user"].(string)), &user); err != nil {
+ panic(err)
+ }
+ c.Set("User", map[string]interface{}{
+ "token": jwtToken,
+ "user": user,
+ })
+ return user
+ } else {
+ panic(errors.New("decode jwt user claims fail"))
+ }
+}
+
+func (jwtAuth *jwtAuthManager) Login(http *http.Request, w http.ResponseWriter, user map[string]interface{}) interface{} {
+
+ token := jwtLib.New(jwtLib.GetSigningMethod(jwtAuth.alg))
+
+ userStr, err := json.Marshal(user)
+ token.Claims = jwtLib.MapClaims{
+ "user": string(userStr),
+ "exp": time.Now().Add(jwtAuth.expire).Unix(),
+ }
+
+ tokenString, err := token.SignedString([]byte(jwtAuth.secret))
+ if err != nil {
+ return nil
+ }
+
+ return tokenString
+}
+
+func (jwtAuth *jwtAuthManager) Logout(http *http.Request, w http.ResponseWriter) bool {
+
+ return true
+}
diff --git a/router/router.go b/router/router.go
index b29bb37..cabb1e3 100644
--- a/router/router.go
+++ b/router/router.go
@@ -1,17 +1,19 @@
package router
import (
- "webserver/controllers"
"github.com/gin-gonic/gin"
"github.com/swaggo/gin-swagger"
"github.com/swaggo/gin-swagger/swaggerFiles"
"github.com/szuecs/gin-glog"
"time"
+ "webserver/controllers"
)
func NewRouter() *gin.Engine {
r := gin.Default()
r.Use(ginglog.Logger(3 * time.Second))
+
+ //r.Use(auth.AuthHandler())//auth杩囨护鍣�
r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
@@ -29,11 +31,13 @@
cameraTaskController :=new(controllers.CameraTaskController)
cameraTaskArgsController :=new(controllers.CameraTaskArgsController)
dicController :=new(controllers.DictionaryController)
+ userController :=new(controllers.UserController)
urlPrefix := "/data/api-v" // wp 娣诲姞 璺緞 鍓嶇紑
-
- r.POST("/signup", controllers.Signup)
- r.POST("/signin", controllers.Login)
+ userApi :=r.Group(urlPrefix+"/user")
+ {
+ userApi.POST("/login",userController.Login)
+ }
//鍖哄煙绠$悊
area := r.Group(urlPrefix + "/area")
@@ -56,8 +60,7 @@
camera.POST("/alltask", cameraTaskController.FindTasksByCameraIds)
camera.GET("/task/:cameraId", cameraTaskController.CameraTaskAll)
- camera.GET("/delTask/:cid", cameraController.CameraDelTask)
- camera.DELETE("/task/del/:cid/:tid", cameraController.CameraDelTask)
+ camera.GET("/delTask/:cameraId/:taskId", cameraController.CameraDelTask)
camera.POST("/saveTask", cameraController.CameraTaskSave)
camera.GET("/getRulesByCameraAndTask",cameraTaskArgsController.FindByCameraAndTask)
}
@@ -65,13 +68,15 @@
cameraTaskArgsApi :=r.Group(urlPrefix + "/cameraTaskArgs")
{
cameraTaskArgsApi.GET("/deleteByGroup",cameraTaskArgsController.DeleteByGroup)
- cameraTaskArgsApi.GET("/getLinkRulesByCameraIds",cameraTaskArgsController.GetLinkRulesByCameraIds)
- cameraTaskArgsApi.POST("saveLinkRulesByGroup",cameraTaskArgsController.SaveLinkRulesByGroup)
+ cameraTaskArgsApi.POST("/getLinkRulesByCameraIds",cameraTaskArgsController.GetLinkRulesByCameraIds)
+ cameraTaskArgsApi.POST("/saveLinkRulesByGroup",cameraTaskArgsController.SaveLinkRulesByGroup)
}
cameraTaskApi := r.Group(urlPrefix + "/cameraTask")
{
- cameraTaskApi.POST("/saveTransAndAlarmLevel",cameraTaskController.SaveTransAndAlarmLevel)
+ cameraTaskApi.POST("/saveIsDataTrans",cameraTaskController.SaveIsDataTrans)
+ cameraTaskApi.POST("/saveAlarmLevelByGroup",cameraTaskController.SaveAlarmLevelByGroup)
+ cameraTaskApi.POST("/updateCameraTaskStatus",cameraTaskController.UpdateCameraTaskStatus)
}
polygon := r.Group(urlPrefix+"/polygon")
--
Gitblit v1.8.0