router.go 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. package main
  2. import (
  3. "fmt"
  4. "net/http"
  5. jwt "github.com/dgrijalva/jwt-go"
  6. "github.com/dgrijalva/jwt-go/request"
  7. "github.com/go-martini/martini"
  8. )
  9. func ValidateTokenMiddleware(w http.ResponseWriter, r *http.Request, c martini.Context) {
  10. token, err := request.ParseFromRequest(r, request.AuthorizationHeaderExtractor,
  11. func(token *jwt.Token) (interface{}, error) {
  12. return []byte(SignedString), nil
  13. })
  14. if err == nil {
  15. if token.Valid {
  16. c.Next()
  17. } else {
  18. w.WriteHeader(http.StatusUnauthorized)
  19. fmt.Fprint(w, "Token is not valid")
  20. }
  21. } else {
  22. w.WriteHeader(http.StatusUnauthorized)
  23. fmt.Fprint(w, fmt.Sprintf("Unauthorized access to this resource:%s", err.Error()))
  24. }
  25. }
  26. // martini router
  27. func route(m *martini.ClassicMartini) {
  28. m.Group("/application/v1", func(r martini.Router) {
  29. // find a device by key
  30. r.Get("/device/info", ApplicationAuthOnDeviceIdentifer, GetDeviceInfoByKey)
  31. // find a device by identifier
  32. r.Get("/devices/:identifier/info", ApplicationAuthOnDeviceIdentifer, GetDeviceInfoByIdentifier)
  33. // get devie current status
  34. r.Get("/devices/:identifier/status/current",
  35. ApplicationAuthOnDeviceIdentifer, CheckDeviceOnline, CheckProductConfig,
  36. GetDeviceCurrentStatus)
  37. // get device status by specific fields
  38. r.Get("/devices/:identifier/status/fields",
  39. ApplicationAuthOnDeviceIdentifer, CheckDeviceOnline, CheckProductConfig,
  40. GetDeviceStatusByFields)
  41. // get devie latest status
  42. r.Get("/devices/:identifier/status/latest",
  43. ApplicationAuthOnDeviceIdentifer, CheckDeviceOnline, CheckProductConfig,
  44. GetDeviceLatestStatus)
  45. // set device status
  46. r.Put("/devices/:identifier/status",
  47. ApplicationAuthOnDeviceIdentifer, CheckDeviceOnline, CheckProductConfig,
  48. SetDeviceStatus)
  49. r.Post("/devices/:identifier/ota", ApplicationAuthOnDeviceIdentifer, CheckDeviceOnline, DeviceUpgrade)
  50. // send a command to device
  51. r.Post("/devices/:identifier/commands",
  52. ApplicationAuthOnDeviceIdentifer, CheckDeviceOnline, CheckProductConfig,
  53. SendCommandToDevice)
  54. // and a rule to device
  55. r.Post("/devices/:identifier/rules",
  56. ApplicationAuthOnDeviceIdentifer, CheckDeviceIdentifier,
  57. AddRule)
  58. r.Get("/devices/check_net_config", ApplicationAuthOnDeviceIdentifer, CheckDeviceNetConfig)
  59. r.Get("/devices/online", CheckDeviceIsOnline)
  60. r.Post("/scene_task", SubmitSceneTask)
  61. r.Post("/task_lifecycle", SubmitTaskLifecycle)
  62. r.Post("/submit_scene", SubmitSceneAction)
  63. // 设备指令查询
  64. r.Get("/device_commands", ApplicationAuth, GetDeviceCommands)
  65. // 设备状态查询
  66. r.Get("/device_status_list", ApplicationAuth, GetDeviceStatusList)
  67. // 场景执行历史查询
  68. r.Get("/scene_his", ApplicationAuth, GetSceneHis)
  69. r.Get("/scene_his/:scene_id", ApplicationAuth, GetSceneHisBySceneId)
  70. })
  71. m.Group("/application/v2", func(r martini.Router) {
  72. // send a command to device
  73. r.Post("/devices/:identifier/commands",
  74. ApplicationAuthOnDeviceIdentifer, CheckDeviceOnline, CheckProductConfig,
  75. SendCommandToDeviceV2)
  76. })
  77. m.Post("/application/auth", AppAuth)
  78. }