router.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package router
  2. import (
  3. "net/http"
  4. "os"
  5. "github.com/go-chi/chi"
  6. "github.com/gorilla/sessions"
  7. "github.com/porter-dev/porter/server/api"
  8. "github.com/porter-dev/porter/server/requestlog"
  9. mw "github.com/porter-dev/porter/server/router/middleware"
  10. )
  11. // New creates a new Chi router instance
  12. func New(
  13. a *api.App,
  14. store sessions.Store,
  15. cookieName string,
  16. staticFilePath string,
  17. ) *chi.Mux {
  18. l := a.Logger()
  19. r := chi.NewRouter()
  20. auth := mw.NewAuth(store, cookieName)
  21. r.Route("/api", func(r chi.Router) {
  22. r.Use(mw.ContentTypeJSON)
  23. // /api/users routes
  24. r.Method("GET", "/users/{id}", auth.DoesUserIDMatch(requestlog.NewHandler(a.HandleReadUser, l), mw.URLParam))
  25. r.Method("GET", "/users/{id}/contexts", auth.DoesUserIDMatch(requestlog.NewHandler(a.HandleReadUserContexts, l), mw.URLParam))
  26. r.Method("POST", "/users", requestlog.NewHandler(a.HandleCreateUser, l))
  27. r.Method("PUT", "/users/{id}", auth.DoesUserIDMatch(requestlog.NewHandler(a.HandleUpdateUser, l), mw.URLParam))
  28. r.Method("DELETE", "/users/{id}", auth.DoesUserIDMatch(requestlog.NewHandler(a.HandleDeleteUser, l), mw.URLParam))
  29. r.Method("POST", "/login", requestlog.NewHandler(a.HandleLoginUser, l))
  30. r.Method("GET", "/auth/check", auth.BasicAuthenticate(requestlog.NewHandler(a.HandleAuthCheck, l)))
  31. r.Method("POST", "/logout", auth.BasicAuthenticate(requestlog.NewHandler(a.HandleLogoutUser, l)))
  32. // /api/releases routes
  33. r.Method("GET", "/releases", auth.BasicAuthenticate(requestlog.NewHandler(a.HandleListReleases, l)))
  34. r.Method("GET", "/releases/{name}/history", auth.BasicAuthenticate(requestlog.NewHandler(a.HandleListReleaseHistory, l)))
  35. r.Method("POST", "/releases/{name}/upgrade", auth.BasicAuthenticate(requestlog.NewHandler(a.HandleUpgradeRelease, l)))
  36. r.Method("GET", "/releases/{name}/{revision}", auth.BasicAuthenticate(requestlog.NewHandler(a.HandleGetRelease, l)))
  37. r.Method("POST", "/releases/{name}/rollback", auth.BasicAuthenticate(requestlog.NewHandler(a.HandleRollbackRelease, l)))
  38. // /api/k8s routes
  39. r.Method("GET", "/k8s/namespaces", auth.BasicAuthenticate(requestlog.NewHandler(a.HandleListNamespaces, l)))
  40. })
  41. fs := http.FileServer(http.Dir(staticFilePath))
  42. r.Get("/*", func(w http.ResponseWriter, r *http.Request) {
  43. if _, err := os.Stat(staticFilePath + r.RequestURI); os.IsNotExist(err) {
  44. http.StripPrefix(r.RequestURI, fs).ServeHTTP(w, r)
  45. } else {
  46. fs.ServeHTTP(w, r)
  47. }
  48. })
  49. return r
  50. }