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,
 | |
| 		},
 | |
| 	}
 | |
| }
 | 
