package http import ( "net/http" assets "tomatentum.net/outfit-voting-abi26" "tomatentum.net/outfit-voting-abi26/internal/auth" "tomatentum.net/outfit-voting-abi26/internal/http/vote" ) var mux *http.ServeMux = http.NewServeMux() func Start(imprintURL string) error { mux.HandleFunc("/api/auth/logout", auth.LogoutEndpoint) mux.HandleFunc("GET /api/vote/locked", vote.VoteLockedEndpoint) mux.HandleFunc("GET /api/result/locked", vote.ResultLockedEndpoint) mux.Handle("PATCH /api/vote/locked", auth.AuthMiddleware(vote.SetVoteLockedEndpoint)) mux.Handle("PATCH /api/result/locked", auth.AuthMiddleware(vote.SetResultLockedEndpoint)) mux.Handle("GET /api/vote", vote.VoteLockMiddleware(vote.GetVoteOptionsEndpoint)) mux.Handle("GET /api/result", vote.ResultLockMiddleware(vote.GetVoteResultEndpoint)) mux.Handle("GET /api/result/{id}", vote.ResultLockMiddleware(vote.GetVoteResultSingleEndoint)) mux.Handle("PATCH /api/vote/{id}/override", auth.AuthMiddleware(vote.SetVoteEndpoint)) mux.Handle("PATCH /api/vote/{id}/inc", vote.VoteLockMiddleware(vote.IncVoteEndpoint)) mux.Handle("DELETE /api/vote/{id}", auth.AuthMiddleware(vote.DelVoteEntryEndpoint)) mux.Handle("DELETE /api/vote/bulk", auth.AuthMiddleware(vote.BulkDelVoteEntryEndpoint)) mux.Handle("POST /api/vote", auth.AuthMiddleware(vote.AddVoteEntryEndpoint)) mux.Handle("POST /api/vote/bulk", auth.AuthMiddleware(vote.BulkVoteEntryEndpoint)) mux.HandleFunc("/impressum", func(w http.ResponseWriter, r *http.Request) { http.Redirect(w, r, imprintURL, http.StatusFound) }) mux.Handle("/", assets.HttpServer()) mux.Handle("/admin", auth.AuthMiddleware(assets.ServeIndex)) mux.HandleFunc("/result", assets.ServeIndex) mux.HandleFunc("/account", func(w http.ResponseWriter, r *http.Request) { http.Redirect(w, r, auth.IssuerBaseURL(), http.StatusFound) }) auth.CallbackHandler(mux) return http.ListenAndServe(":4000", corsMiddleware(mux)) } func corsMiddleware(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Access-Control-Allow-Origin", "*") w.Header().Set("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, PATCH") w.Header().Set("Access-Control-Allow-Headers", "Content-Type, Authorization") if r.Method == "OPTIONS" { w.WriteHeader(http.StatusOK) return } next.ServeHTTP(w, r) }) }