31 lines
721 B
Go
31 lines
721 B
Go
package middleware
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"forge.cadoles.com/Cadoles/go-proxy"
|
|
"forge.cadoles.com/Cadoles/go-proxy/wildcard"
|
|
)
|
|
|
|
func FilterHosts(allowedHostPatterns ...string) proxy.Middleware {
|
|
return func(h http.Handler) http.Handler {
|
|
fn := func(w http.ResponseWriter, r *http.Request) {
|
|
if matches := wildcard.MatchAny(r.Host, allowedHostPatterns...); !matches {
|
|
http.Error(w, http.StatusText(http.StatusForbidden), http.StatusForbidden)
|
|
|
|
return
|
|
}
|
|
|
|
h.ServeHTTP(w, r)
|
|
}
|
|
|
|
return http.HandlerFunc(fn)
|
|
}
|
|
}
|
|
|
|
func WithAllowedHosts(allowedHostPatterns ...string) proxy.OptionFunc {
|
|
return func(o *proxy.Options) {
|
|
o.Middlewares = append(o.Middlewares, FilterHosts(allowedHostPatterns...))
|
|
}
|
|
}
|