12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- 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", 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 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)
- // 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)
- }, ValidateTokenMiddleware)
- m.Post("/application/auth", AppAuth)
- // // user login
- // m.Post("/api/v1/login", binding.Bind(models.LoginRequest{}),
- // UserLogin)
- // // user register
- // m.Post("/api/v1/reg", binding.Bind(models.Reqrequest{}),
- // UserRegister)
- // // user api group
- // // jwt check and pass UserToken
- // m.Group("/api/v1/user", func(r martini.Router) {
- // // user modify password api
- // r.Post("/modifypass", ModifyPassword)
- // // user add a product
- // r.Post("/product", binding.Bind(models.Product{}), SaveProduct)
- // // delete a product
- // r.Delete("/product", binding.Bind(models.Product{}), DeleteProduct)
- // // get products
- // r.Get("/product", GetProducts)
- // }, handler.Serve)
- }
|