package main import ( "gosimplenpm/config" "gosimplenpm/handler" "gosimplenpm/middlewares" "log" "net/http" "github.com/gorilla/mux" ) type application struct { logger *log.Logger conf config.Config } func (app *application) Routes() *mux.Router { // Need to use UseEncodedPath as shown here https://github.com/gorilla/mux/blob/master/mux.go#L269 m := mux.NewRouter().StrictSlash(true).UseEncodedPath() m.Use(middlewares.LogMiddleware) // main handler m.HandleFunc("/{name}", middlewares.AuthMiddleware(app.conf)(handler.Get)).Methods("GET") m.HandleFunc("/{name}", middlewares.AuthMiddleware(app.conf)(handler.Publish)).Methods("PUT") // tar handlers m.HandleFunc("/{name}/-/{tar}", handler.Tar).Methods("GET") // tag handlers m.HandleFunc("/-/package/{name}/dist-tags/{tag}", handler.DistTagDelete).Methods("DELETE") m.HandleFunc("/-/package/{name}/dist-tags/{tag}", handler.DistTagPut).Methods("PUT") m.HandleFunc("/-/package/{name}/dist-tags", handler.DistTagGet).Methods("GET") m.NotFoundHandler = http.HandlerFunc(handler.NotFound) return m }