router.go 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  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", 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 devie latest status
  38. r.Get("/devices/:identifier/status/latest",
  39. ApplicationAuthOnDeviceIdentifer, CheckDeviceOnline, CheckProductConfig,
  40. GetDeviceLatestStatus)
  41. // set device status
  42. r.Put("/devices/:identifier/status",
  43. ApplicationAuthOnDeviceIdentifer, CheckDeviceOnline, CheckProductConfig,
  44. SetDeviceStatus)
  45. r.Post("/devices/:identifier/ota", ApplicationAuthOnDeviceIdentifer, CheckDeviceOnline, DeviceUpgrade)
  46. // send a command to device
  47. r.Post("/devices/:identifier/commands",
  48. ApplicationAuthOnDeviceIdentifer, CheckDeviceOnline, CheckProductConfig,
  49. SendCommandToDevice)
  50. // and a rule to device
  51. r.Post("/devices/:identifier/rules",
  52. ApplicationAuthOnDeviceIdentifer, CheckDeviceIdentifier,
  53. AddRule)
  54. r.Get("/devices/check_net_config", CheckDeviceNetConfig)
  55. r.Get("/devices/online", CheckDeviceIsOnline)
  56. r.Post("/scene_task", SubmitSceneTask)
  57. r.Post("/task_lifecycle", SubmitTaskLifecycle)
  58. })
  59. m.Group("/application/v2", func(r martini.Router) {
  60. // send a command to device
  61. r.Post("/devices/:identifier/commands",
  62. ApplicationAuthOnDeviceIdentifer, CheckDeviceOnline, CheckProductConfig,
  63. SendCommandToDeviceV2)
  64. })
  65. m.Post("/application/auth", AppAuth)
  66. }