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) }