package server import ( "fmt" "log" "net/http" "tomatentum.net/svg-templater/internal/routes" "tomatentum.net/svg-templater/pkg/auth" "tomatentum.net/svg-templater/pkg/svg" ) var mux http.ServeMux func PrepareHTTP() { mux = *http.NewServeMux() registerAuthorizedFunc("/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "You are authorized!") }) registerAuthorizedFunc("/svg/", func(w http.ResponseWriter, r *http.Request) { switch r.Method { case "POST": routes.CreateSVG(w, r) return case "GET": routes.Get(w, r) return } http.Error(w, "Method not allowed", http.StatusMethodNotAllowed) }) registerAuthorizedFunc("/svg/{id}", func(w http.ResponseWriter, r *http.Request) { switch r.Method { case "GET", "POST": routes.DownloadSVG(w, r) return case "PATCH": routes.RenameSvg(w, r) return case "DELETE": routes.DeleteSvg(w, r) return } http.Error(w, "Method not allowed", http.StatusMethodNotAllowed) }) registerAuthorizedFunc("/font/", func(w http.ResponseWriter, r *http.Request) { switch r.Method { case "GET": routes.GetFonts(w, r) case "POST": routes.AddFont(w, r) } }) mux.Handle("/public/", http.StripPrefix("/public/", http.FileServer(svg.Storage.GetPublicDir()))) } func Start() { log.Println("Starting http server on :3000") handler := corsMiddleware(&mux) if err := http.ListenAndServe(":3000", handler); err != nil { panic(err) } } func registerAuthorized(path string, handler http.Handler) { mux.HandleFunc(path, auth.AuthMiddleware(handler)) log.Println("Registered authorized handler for", path) } func registerAuthorizedFunc(path string, f func(w http.ResponseWriter, r *http.Request)) { registerAuthorized(path, http.HandlerFunc(f)) }