github.com/kyleu/dbaudit@v0.0.2-0.20240321155047-ff2f2c940496/app/controller/cutil/router.go (about) 1 // Package cutil - Content managed by Project Forge, see [projectforge.md] for details. 2 package cutil 3 4 import ( 5 "net/http" 6 "net/url" 7 "slices" 8 9 "github.com/CAFxX/httpcompression" 10 "github.com/gorilla/mux" 11 "github.com/prometheus/client_golang/prometheus/promhttp" 12 13 "github.com/kyleu/dbaudit/app/lib/telemetry/httpmetrics" 14 "github.com/kyleu/dbaudit/app/util" 15 ) 16 17 var AppRoutesList = map[string][]string{} 18 19 func WireRouter(r *mux.Router, notFound http.HandlerFunc, logger util.Logger) (http.Handler, error) { 20 p := httpmetrics.NewMetrics(util.AppKey, logger) 21 r.Handle(p.MetricsPath, promhttp.Handler()).Methods(http.MethodGet) 22 23 r.PathPrefix("/").HandlerFunc(notFound) 24 25 var ret http.Handler = r 26 includeCompression := util.GetEnvBool("compression_enabled", false) 27 if includeCompression { 28 compress, _ := httpcompression.DefaultAdapter() 29 ret = compress(ret) 30 } 31 return p.WrapHandler(r), nil 32 } 33 34 func AddRoute(method string, path string) { 35 curr := AppRoutesList[method] 36 if !slices.Contains(curr, path) { 37 curr = append(curr, path) 38 slices.Sort(curr) 39 AppRoutesList[method] = curr 40 } 41 } 42 43 func URLAddQuery(u *url.URL, k string, v string) { 44 q := u.Query() 45 q.Set(k, v) 46 u.RawQuery = q.Encode() 47 }