package rootmux import ( "net/http" "forge.grandlyon.com/web-et-numerique/llle_project/backoffice-server/internal/auth" "forge.grandlyon.com/web-et-numerique/llle_project/backoffice-server/internal/common" "forge.grandlyon.com/web-et-numerique/llle_project/backoffice-server/internal/monthlyNews" "github.com/gorilla/mux" "github.com/nicolaspernoud/vestibule/pkg/middlewares" ) type RootMux struct { Router *mux.Router Manager *auth.Manager } func CreateRootMux(staticDir string) RootMux { r := mux.NewRouter() m := auth.NewManager() r.HandleFunc("/OAuth2Login", m.HandleOAuth2Login) r.Handle("/OAuth2Callback", m.HandleOAuth2Callback()) r.HandleFunc("/Logout", m.HandleLogout) r.Handle("/api/common/WhoAmI", auth.ValidateAuthMiddleware(auth.WhoAmI(), []string{"*"}, false)) // Serve static files falling back to serving index.html fs := http.StripPrefix("/public/", middlewares.NoCache(http.FileServer(&common.FallBackWrapper{Assets: http.Dir(staticDir)}))) r.PathPrefix("/public/").Handler(fs) http.Handle("/", r) apiAdmin := r.PathPrefix("/api/admin").Subrouter() apiAdmin.Use(auth.AdminAuthMiddleware) apiAdmin.HandleFunc("/monthlyNews", monthlyNews.AddMonthlyNews).Methods(http.MethodPost) apiAdmin.HandleFunc("/monthlyNews/{year}/{month}", monthlyNews.DeleteMonthlyNews).Methods(http.MethodDelete) apiAdmin.HandleFunc("/monthlyNews/{year}/{month}", monthlyNews.GetSingleMonthlyNews).Methods(http.MethodGet) apiAdmin.HandleFunc("/monthlyNews", monthlyNews.GetAllMonthlyNews).Methods(http.MethodGet) return RootMux{r, &m} }