mirror of
https://github.com/coder/coder.git
synced 2025-07-08 11:39:50 +00:00
Merge remote-tracking branch 'origin/main' into jjs/presets-api
This commit is contained in:
@ -788,6 +788,7 @@ func New(options *Options) *API {
|
||||
httpmw.AttachRequestID,
|
||||
httpmw.ExtractRealIP(api.RealIPConfig),
|
||||
httpmw.Logger(api.Logger),
|
||||
singleSlashMW,
|
||||
rolestore.CustomRoleMW,
|
||||
prometheusMW,
|
||||
// Build-Version is helpful for debugging.
|
||||
@ -1732,3 +1733,31 @@ func ReadExperiments(log slog.Logger, raw []string) codersdk.Experiments {
|
||||
}
|
||||
return exps
|
||||
}
|
||||
|
||||
var multipleSlashesRe = regexp.MustCompile(`/+`)
|
||||
|
||||
func singleSlashMW(next http.Handler) http.Handler {
|
||||
fn := func(w http.ResponseWriter, r *http.Request) {
|
||||
var path string
|
||||
rctx := chi.RouteContext(r.Context())
|
||||
if rctx != nil && rctx.RoutePath != "" {
|
||||
path = rctx.RoutePath
|
||||
} else {
|
||||
path = r.URL.Path
|
||||
}
|
||||
|
||||
// Normalize multiple slashes to a single slash
|
||||
newPath := multipleSlashesRe.ReplaceAllString(path, "/")
|
||||
|
||||
// Apply the cleaned path
|
||||
// The approach is consistent with: https://github.com/go-chi/chi/blob/e846b8304c769c4f1a51c9de06bebfaa4576bd88/middleware/strip.go#L24-L28
|
||||
if rctx != nil {
|
||||
rctx.RoutePath = newPath
|
||||
} else {
|
||||
r.URL.Path = newPath
|
||||
}
|
||||
|
||||
next.ServeHTTP(w, r)
|
||||
}
|
||||
return http.HandlerFunc(fn)
|
||||
}
|
||||
|
Reference in New Issue
Block a user