35 lines
		
	
	
		
			673 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			35 lines
		
	
	
		
			673 B
		
	
	
	
		
			Go
		
	
	
	
	
	
package web
 | 
						|
 | 
						|
import (
 | 
						|
	"net/http"
 | 
						|
	"net/url"
 | 
						|
 | 
						|
	log "github.com/sirupsen/logrus"
 | 
						|
)
 | 
						|
 | 
						|
type hostInterceptor struct {
 | 
						|
	inner  http.RoundTripper
 | 
						|
	host   string
 | 
						|
	scheme string
 | 
						|
}
 | 
						|
 | 
						|
func (t hostInterceptor) RoundTrip(r *http.Request) (*http.Response, error) {
 | 
						|
	r.Host = t.host
 | 
						|
	r.Header.Set("X-Forwarded-Proto", t.scheme)
 | 
						|
	return t.inner.RoundTrip(r)
 | 
						|
}
 | 
						|
 | 
						|
func NewHostInterceptor(inner *http.Client, host string) *http.Client {
 | 
						|
	aku, err := url.Parse(host)
 | 
						|
	if err != nil {
 | 
						|
		log.WithField("host", host).WithError(err).Warn("failed to parse host")
 | 
						|
	}
 | 
						|
	return &http.Client{
 | 
						|
		Transport: hostInterceptor{
 | 
						|
			inner:  inner.Transport,
 | 
						|
			host:   aku.Host,
 | 
						|
			scheme: aku.Scheme,
 | 
						|
		},
 | 
						|
	}
 | 
						|
}
 |