func NewRouter() http.Handler { conrd, err := consistentrd.New(app.Config.Cluster.LocalNode, app.Config.Cluster.Nodes) if err != nil { panic(err) } r := cji.NewRouter() r.Use(middleware.EnvInit) r.Use(middleware.RequestID) r.Use(middleware.RealIP) r.Use(RequestLogger) r.Use(heartbeat.Route("/ping")) r.Mount("/debug", middleware.NoCache, Profiler()) r.Get("/", trackRoute("root"), func(w http.ResponseWriter, r *http.Request) { w.WriteHeader(200) w.Write([]byte(".")) }) r.Get("/fetch", trackRoute("bucketV0GetItem"), BucketV0FetchItem) // Deprecated: for Pressilla v2 apps r.Get("/info", trackRoute("imageInfo"), GetImageInfo) r.Get("/:bucket", conrd.RouteWithParams("url"), trackRoute("bucketV1GetItem"), BucketGetIndex) r.Post("/:bucket", BucketImageUpload) r.Get("/:bucket/fetch", conrd.RouteWithParams("url"), trackRoute("bucketV1GetItem"), BucketFetchItem) // DEPRECATED r.Get("/:bucket//fetch", conrd.RouteWithParams("url"), trackRoute("bucketV1GetItem"), BucketFetchItem) r.Get("/:bucket/add", trackRoute("bucketAddItems"), BucketAddItems) r.Get("/:bucket/:key", conrd.Route(), BucketGetItem) r.Delete("/:bucket/:key", conrd.Route(), BucketDeleteItem) return r }
func (srv *Server) NewRouter() http.Handler { cf := srv.Config conrd, err := consistentrd.New(cf.Cluster.LocalNode, cf.Cluster.Nodes) if err != nil { panic(err) } r := chi.NewRouter() r.Use(ParentContext(srv.Ctx)) r.Use(middleware.RequestID) r.Use(middleware.RealIP) r.Use(middleware.Logger) r.Use(middleware.Recoverer) r.Use(middleware.ThrottleBacklog(cf.Limits.MaxRequests, cf.Limits.BacklogSize, cf.Limits.BacklogTimeout)) r.Use(middleware.CloseNotify) r.Use(middleware.Timeout(cf.Limits.RequestTimeout)) r.Use(httpcoala.Route("HEAD", "GET")) r.Use(heartbeat.Route("/ping")) r.Use(heartbeat.Route("/favicon.ico")) if cf.Airbrake.ApiKey != "" { r.Use(AirbrakeRecoverer(cf.Airbrake.ApiKey)) } if srv.Config.Profiler { r.Mount("/debug", middleware.NoCache, Profiler()) } r.Get("/", trackRoute("root"), func(w http.ResponseWriter, r *http.Request) { w.WriteHeader(200) w.Write([]byte(".")) }) r.Get("/info", trackRoute("imageInfo"), GetImageInfo) r.Route("/:bucket", func(r chi.Router) { r.Post("/", BucketImageUpload) r.Group(func(r chi.Router) { cors := cors.New(cors.Options{ AllowedOrigins: []string{"*"}, AllowedMethods: []string{"GET", "OPTIONS"}, AllowedHeaders: []string{"Accept", "Authorization", "Content-Type", "X-CSRF-Token"}, ExposedHeaders: []string{"Link"}, AllowCredentials: true, MaxAge: 300, // Maximum value not ignored by any of major browsers }) r.Use(cors.Handler) r.Get("/", conrd.RouteWithParams("url"), trackRoute("bucketV1GetItem"), BucketGetIndex) r.Get("/fetch", conrd.RouteWithParams("url"), trackRoute("bucketV1GetItem"), BucketFetchItem) }) // TODO: review r.Get("/add", trackRoute("bucketAddItems"), BucketAddItems) r.Get("/:key", conrd.Route(), BucketGetItem) r.Delete("/:key", conrd.Route(), BucketDeleteItem) }) // DEPRECATED r.Get("/fetch", trackRoute("bucketV0GetItem"), BucketV0FetchItem) // for Pressilla v2 apps r.Get("/:bucket//fetch", conrd.RouteWithParams("url"), trackRoute("bucketV1GetItem"), BucketFetchItem) // -- return r }