package initialize import ( "net/http" "git.schreifuchs.ch/schreifuchs/ng-blog/backend/internal/auth" "git.schreifuchs.ch/schreifuchs/ng-blog/backend/internal/config" "git.schreifuchs.ch/schreifuchs/ng-blog/backend/internal/model" "git.schreifuchs.ch/schreifuchs/ng-blog/backend/internal/posts" "git.schreifuchs.ch/schreifuchs/ng-blog/backend/pkg/cors" "github.com/gorilla/mux" ) // CreateMux creates and configures a mux router with authentication and post-related routes. func CreateMux(cfg *config.Config) (r *mux.Router) { db := model.Init() blg := posts.New(db) auth := auth.New(&cfg.Auth, db) r = mux.NewRouter() r.Use(cors.HandlerForOrigin("*")) // auth r.HandleFunc("/login", auth.Login).Methods("POST") r.HandleFunc("/signup", auth.Signup).Methods("POST") r.Handle("/logout", auth.Authenticated(auth.Logout)).Methods("DELETE") // Posts r.Handle("/posts", auth.Authenticated(blg.SavePost, model.RoleUser, model.RoleAdmin)).Methods("POST") r.Handle("/posts", auth.Authenticated(blg.SavePost, model.RoleUser, model.RoleAdmin)).Methods("PUT") r.Handle("/posts/{postID}", auth.Authenticated(blg.DeletePost, model.RoleUser, model.RoleAdmin)).Methods("DELETE") r.Handle("/posts", http.HandlerFunc(blg.GetAllPosts)).Methods("GET") r.Methods("OPTIONS").HandlerFunc(func(w http.ResponseWriter, r *http.Request) { // The CORS middleware should set up the headers for you w.WriteHeader(http.StatusNoContent) }) return }