package api import ( "net/http" "git.leonardobishop.net/stash/api/handlers" "git.leonardobishop.net/stash/api/middleware" "git.leonardobishop.net/stash/internal/config" "git.leonardobishop.net/stash/pkg/entries" "git.leonardobishop.net/stash/pkg/html" ) type ApiServices struct { EntiresService entries.Service HtmlService html.Service Config *config.Config } func NewServer(api ApiServices) *http.ServeMux { mux := http.NewServeMux() cors := middleware.PermissiveCors() auth := middleware.MustAuthenticate(api.Config.Token) mux.HandleFunc("POST /record", cors(auth(handlers.RecordEntry(api.EntiresService)))) mux.HandleFunc("PUT /record", cors(auth(handlers.UpdateEntry(api.EntiresService)))) mux.HandleFunc("DELETE /record", cors(auth(handlers.DeleteEntry(api.EntiresService)))) mux.HandleFunc("GET /entry", cors(auth(handlers.GetEntryURLs(api.EntiresService)))) mux.HandleFunc("POST /entry", cors(auth(handlers.GetEntry(api.EntiresService)))) mux.HandleFunc("GET /html", handlers.GetEntriesHtml(api.EntiresService, api.HtmlService)) mux.HandleFunc("GET /", handlers.Pong()) return mux }