func (app *Application) ServeHTTP(h Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { con := app.KVStore.Connection() defer con.Close() res := muxer.NewResponse(w) request, err := NewRequest(req, con) if err != nil { app.Logger.Error(err) res.BadRequest() return } if app.SecretKey != "" && !request.IsAuthorized(app.SecretKey) { res.Unauthorized() return } h(res, request, app) }) }
func (a *Application) InitRouter() *negroni.Negroni { router := mux.NewRouter() router.NotFoundHandler = NotFoundHandler() methods := map[string]Handler{ "redirect": RedirectHandler, "display": ImageHandler, "get": GetHandler, } for name, handler := range methods { handlerFunc := a.ServeHTTP(handler) router.Handle(fmt.Sprintf("/%s", name), handlerFunc) router.Handle(fmt.Sprintf("/%s/{sig}/{op}/x{h:[\\d]+}/{path:[\\w\\-/.]+}", name), handlerFunc) router.Handle(fmt.Sprintf("/%s/{sig}/{op}/{w:[\\d]+}x/{path:[\\w\\-/.]+}", name), handlerFunc) router.Handle(fmt.Sprintf("/%s/{sig}/{op}/{w:[\\d]+}x{h:[\\d]+}/{path:[\\w\\-/.]+}", name), handlerFunc) router.Handle(fmt.Sprintf("/%s/{op}/x{h:[\\d]+}/{path:[\\w\\-/.]+}", name), handlerFunc) router.Handle(fmt.Sprintf("/%s/{op}/{w:[\\d]+}x/{path:[\\w\\-/.]+}", name), handlerFunc) router.Handle(fmt.Sprintf("/%s/{op}/{w:[\\d]+}x{h:[\\d]+}/{path:[\\w\\-/.]+}", name), handlerFunc) } router.Handle("/upload", http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { res := muxer.NewResponse(w) UploadHandler(res, req, a) })) if a.EnableDelete { router.Handle("/{path:[\\w\\-/.]+}", http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { res := muxer.NewResponse(w) mreq := muxer.NewRequest(req) DeleteHandler(res, mreq, a) })).Methods("DELETE") } allowedOrigins, err := a.Jq.ArrayOfStrings("allowed_origins") allowedMethods, err := a.Jq.ArrayOfStrings("allowed_methods") s := stats.New() router.HandleFunc("/stats", func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") stats := s.Data() b, _ := json.Marshal(stats) w.Write(b) }) debug, err := a.Jq.Bool("debug") if err != nil { debug = false } n := negroni.New(&middleware.Recovery{ Raven: a.Raven, Logger: a.Logger, PrintStack: debug, StackAll: false, StackSize: 1024 * 8, }, &middleware.Logger{a.Logger}) n.Use(cors.New(cors.Options{ AllowedOrigins: allowedOrigins, AllowedMethods: allowedMethods, })) n.Use(negronilogrus.NewMiddleware()) n.UseHandler(router) return n }