Added additional headers to config
This commit is contained in:
11
config.go
11
config.go
@@ -19,11 +19,12 @@ type Config struct {
|
|||||||
} `yaml:"ssl"`
|
} `yaml:"ssl"`
|
||||||
} `yaml:"server"`
|
} `yaml:"server"`
|
||||||
Hosts []struct {
|
Hosts []struct {
|
||||||
Port int `yaml:"port"`
|
Port int `yaml:"port"`
|
||||||
Remotes []string `yaml:"remotes"`
|
Remotes []string `yaml:"remotes"`
|
||||||
Domains []string `yaml:"domains"`
|
Domains []string `yaml:"domains"`
|
||||||
Secure bool `yaml:"secure"`
|
Secure bool `yaml:"secure"`
|
||||||
Rewrite map[string]string `yaml:"rewrite"`
|
Rewrite map[string]string `yaml:"rewrite"`
|
||||||
|
AdditionalHeaders map[string]string `yaml:"extraHeaders"`
|
||||||
} `yaml:"hosts"`
|
} `yaml:"hosts"`
|
||||||
RateLimit struct {
|
RateLimit struct {
|
||||||
Enabled bool `yaml:"enabled"`
|
Enabled bool `yaml:"enabled"`
|
||||||
|
|||||||
32
router.go
32
router.go
@@ -24,18 +24,19 @@ type Router struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type Host struct {
|
type Host struct {
|
||||||
Port int
|
Port int
|
||||||
Remotes []string
|
Remotes []string
|
||||||
Secure bool
|
Secure bool
|
||||||
Current *atomic.Uint32
|
Current *atomic.Uint32
|
||||||
Rewrites map[string]*Host
|
Rewrites map[string]*Host
|
||||||
|
AdditionalHeaders map[string]string
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(config *Config, client *http.Client) Router {
|
func New(config *Config, client *http.Client) Router {
|
||||||
m := make(map[string]Host)
|
m := make(map[string]Host)
|
||||||
for _, host := range config.Hosts {
|
for _, host := range config.Hosts {
|
||||||
for _, domain := range host.Domains {
|
for _, domain := range host.Domains {
|
||||||
curr := Host{host.Port, host.Remotes, host.Secure, &atomic.Uint32{}, make(map[string]*Host)}
|
curr := Host{host.Port, host.Remotes, host.Secure, &atomic.Uint32{}, make(map[string]*Host), host.AdditionalHeaders}
|
||||||
m[domain] = curr
|
m[domain] = curr
|
||||||
|
|
||||||
for subUrl, rewriteHost := range host.Rewrite {
|
for subUrl, rewriteHost := range host.Rewrite {
|
||||||
@@ -98,17 +99,6 @@ func (router *Router) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for subUrl, rewriteHost := range host.Rewrites {
|
for subUrl, rewriteHost := range host.Rewrites {
|
||||||
// parts := strings.Split(subUrl, "/")
|
|
||||||
// requestParts := strings.Split(r.URL.Path, "/")
|
|
||||||
//
|
|
||||||
// for i, part := range parts {
|
|
||||||
// if !strings.EqualFold(part, requestParts[i]) {
|
|
||||||
// break
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// slicedPath := "/" + strings.Join(requestParts[len(parts):], "/")
|
|
||||||
|
|
||||||
if !strings.HasPrefix(r.URL.Path, subUrl) {
|
if !strings.HasPrefix(r.URL.Path, subUrl) {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
@@ -122,7 +112,7 @@ func (router *Router) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
|||||||
Str("requested_path", r.URL.Path).
|
Str("requested_path", r.URL.Path).
|
||||||
Str("new_path", slicedPath).
|
Str("new_path", slicedPath).
|
||||||
Msg("Rewriting matched url path to different remote")
|
Msg("Rewriting matched url path to different remote")
|
||||||
|
|
||||||
r.URL.Path = slicedPath
|
r.URL.Path = slicedPath
|
||||||
host = *rewriteHost
|
host = *rewriteHost
|
||||||
break
|
break
|
||||||
@@ -212,7 +202,11 @@ func (router *Router) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
|||||||
|
|
||||||
removeHopByHopHeaders(res.Header)
|
removeHopByHopHeaders(res.Header)
|
||||||
|
|
||||||
copyHeader(w.Header(), res.Header)
|
resultHeader := w.Header()
|
||||||
|
copyHeader(resultHeader, res.Header)
|
||||||
|
for name, val := range host.AdditionalHeaders {
|
||||||
|
resultHeader.Add(name, val)
|
||||||
|
}
|
||||||
|
|
||||||
w.WriteHeader(res.StatusCode)
|
w.WriteHeader(res.StatusCode)
|
||||||
err = router.copyResponse(w, res.Body)
|
err = router.copyResponse(w, res.Body)
|
||||||
|
|||||||
Reference in New Issue
Block a user