router.go 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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. // send a command to device
  46. r.Post("/devices/:identifier/commands",
  47. ApplicationAuthOnDeviceIdentifer, CheckDeviceOnline, CheckProductConfig,
  48. SendCommandToDevice)
  49. // and a rule to device
  50. r.Post("/devices/:identifier/rules",
  51. ApplicationAuthOnDeviceIdentifer, CheckDeviceIdentifier,
  52. AddRule)
  53. }, ValidateTokenMiddleware)
  54. m.Post("/application/auth", AppAuth)
  55. // // user login
  56. // m.Post("/api/v1/login", binding.Bind(models.LoginRequest{}),
  57. // UserLogin)
  58. // // user register
  59. // m.Post("/api/v1/reg", binding.Bind(models.Reqrequest{}),
  60. // UserRegister)
  61. // // user api group
  62. // // jwt check and pass UserToken
  63. // m.Group("/api/v1/user", func(r martini.Router) {
  64. // // user modify password api
  65. // r.Post("/modifypass", ModifyPassword)
  66. // // user add a product
  67. // r.Post("/product", binding.Bind(models.Product{}), SaveProduct)
  68. // // delete a product
  69. // r.Delete("/product", binding.Bind(models.Product{}), DeleteProduct)
  70. // // get products
  71. // r.Get("/product", GetProducts)
  72. // }, handler.Serve)
  73. }