router.go 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  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, "Unauthorized access to this resource")
  24. }
  25. }
  26. // martini router
  27. func route(m *martini.ClassicMartini) {
  28. // jwt handler
  29. // handler := New(Config{
  30. // ValidationKeyGetter: func(token *jwt.Token) (interface{}, error) {
  31. // return []byte(SignedString), nil
  32. // },
  33. // SigningMethod: jwt.SigningMethodHS256,
  34. // })
  35. m.Group("/application/v1", func(r martini.Router) {
  36. // find a device by key
  37. r.Get("/device/info", GetDeviceInfoByKey)
  38. // find a device by identifier
  39. r.Get("/devices/:identifier/info", ApplicationAuthOnDeviceIdentifer, GetDeviceInfoByIdentifier)
  40. // get devie current status
  41. r.Get("/devices/:identifier/status/current",
  42. ApplicationAuthOnDeviceIdentifer, CheckDeviceOnline, CheckProductConfig,
  43. GetDeviceCurrentStatus)
  44. // get devie latest status
  45. r.Get("/devices/:identifier/status/latest",
  46. ApplicationAuthOnDeviceIdentifer, CheckDeviceOnline, CheckProductConfig,
  47. GetDeviceLatestStatus)
  48. // set device status
  49. r.Put("/devices/:identifier/status",
  50. ApplicationAuthOnDeviceIdentifer, CheckDeviceOnline, CheckProductConfig,
  51. SetDeviceStatus)
  52. // send a command to device
  53. r.Post("/devices/:identifier/commands",
  54. ApplicationAuthOnDeviceIdentifer, CheckDeviceOnline, CheckProductConfig,
  55. SendCommandToDevice)
  56. // and a rule to device
  57. r.Post("/devices/:identifier/rules",
  58. ApplicationAuthOnDeviceIdentifer, CheckDeviceIdentifier,
  59. AddRule)
  60. }, ValidateTokenMiddleware)
  61. m.Post("/application/auth", AppAuth)
  62. // // user login
  63. // m.Post("/api/v1/login", binding.Bind(models.LoginRequest{}),
  64. // UserLogin)
  65. // // user register
  66. // m.Post("/api/v1/reg", binding.Bind(models.Reqrequest{}),
  67. // UserRegister)
  68. // // user api group
  69. // // jwt check and pass UserToken
  70. // m.Group("/api/v1/user", func(r martini.Router) {
  71. // // user modify password api
  72. // r.Post("/modifypass", ModifyPassword)
  73. // // user add a product
  74. // r.Post("/product", binding.Bind(models.Product{}), SaveProduct)
  75. // // delete a product
  76. // r.Delete("/product", binding.Bind(models.Product{}), DeleteProduct)
  77. // // get products
  78. // r.Get("/product", GetProducts)
  79. // }, handler.Serve)
  80. }