| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- package main
- import (
- "fmt"
- "net/http"
- jwt "github.com/dgrijalva/jwt-go"
- "github.com/dgrijalva/jwt-go/request"
- "github.com/go-martini/martini"
- )
- func ValidateTokenMiddleware(w http.ResponseWriter, r *http.Request, c martini.Context) {
- token, err := request.ParseFromRequest(r, request.AuthorizationHeaderExtractor,
- func(token *jwt.Token) (interface{}, error) {
- return []byte(SignedString), nil
- })
- if err == nil {
- if token.Valid {
- c.Next()
- } else {
- w.WriteHeader(http.StatusUnauthorized)
- fmt.Fprint(w, "Token is not valid")
- }
- } else {
- w.WriteHeader(http.StatusUnauthorized)
- fmt.Fprint(w, fmt.Sprintf("Unauthorized access to this resource:%s", err.Error()))
- }
- }
- // martini router
- func route(m *martini.ClassicMartini) {
- m.Group("/application/v1", func(r martini.Router) {
- // find a device by key
- r.Get("/device/info", ApplicationAuthOnDeviceIdentifer, GetDeviceInfoByKey)
- // find a device by identifier
- r.Get("/devices/:identifier/info", ApplicationAuthOnDeviceIdentifer, GetDeviceInfoByIdentifier)
- // get devie current status
- r.Get("/devices/:identifier/status/current",
- ApplicationAuthOnDeviceIdentifer, CheckDeviceOnline, CheckProductConfig,
- GetDeviceCurrentStatus)
- // get device status by specific fields
- r.Get("/devices/:identifier/status/fields",
- ApplicationAuthOnDeviceIdentifer, CheckDeviceOnline, CheckProductConfig,
- GetDeviceStatusByFields)
- // get devie latest status
- r.Get("/devices/:identifier/status/latest",
- ApplicationAuthOnDeviceIdentifer, CheckDeviceOnline, CheckProductConfig,
- GetDeviceLatestStatus)
- // set device status
- r.Put("/devices/:identifier/status",
- ApplicationAuthOnDeviceIdentifer, CheckDeviceOnline, CheckProductConfig,
- SetDeviceStatus)
- r.Post("/devices/:identifier/ota", ApplicationAuthOnDeviceIdentifer, CheckDeviceOnline, DeviceUpgrade)
- // send a command to device
- r.Post("/devices/:identifier/commands",
- ApplicationAuthOnDeviceIdentifer, CheckDeviceOnline, CheckProductConfig,
- SendCommandToDevice)
- // and a rule to device
- r.Post("/devices/:identifier/rules",
- ApplicationAuthOnDeviceIdentifer, CheckDeviceIdentifier,
- AddRule)
- r.Get("/devices/check_net_config", ApplicationAuthOnDeviceIdentifer, CheckDeviceNetConfig)
- r.Get("/devices/online", CheckDeviceIsOnline)
- r.Post("/scene_task", SubmitSceneTask)
- r.Post("/task_lifecycle", SubmitTaskLifecycle)
- r.Post("/submit_scene", ApplicationAuthOnDeviceIdentifer, SubmitSceneAction)
- // 设备指令查询
- r.Get("/device_commands", ApplicationAuthOnDeviceIdentifer, GetDeviceCommands)
- // 设备状态查询
- r.Get("/device_status_list", ApplicationAuthOnDeviceIdentifer, GetDeviceStatusList)
- // 场景执行历史查询
- r.Get("/scene_his", ApplicationAuthOnDeviceIdentifer, GetSceneHis)
- r.Get("/scene_his/:scene_id", ApplicationAuthOnDeviceIdentifer, GetSceneHisBySceneId)
- })
- m.Group("/application/v2", func(r martini.Router) {
- // send a command to device
- r.Post("/devices/:identifier/commands",
- ApplicationAuthOnDeviceIdentifer, CheckDeviceOnline, CheckProductConfig,
- SendCommandToDeviceV2)
- })
- m.Post("/application/auth", AppAuth)
- }
|