Skip to content

Commit a65cfbe

Browse files
committed
Client API integration source tracking header: preserv prev User-Agen header value
1 parent 59dc80d commit a65cfbe

2 files changed

Lines changed: 7 additions & 5 deletions

File tree

service/runtime/handler.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,7 @@ func (h *Handler) proxy(rw http.ResponseWriter, inReq *http.Request, ll logger.L
255255

256256
sign := signerCfg.SignBuilder.GetDefaultPrivateKey()
257257

258-
httpClient := signer.NewHTTPClient(h.requestSigner, sign, ll)
258+
httpClient := signer.NewHTTPClient(h.requestSigner, sign, ll, inReq)
259259

260260
resp, err := httpClient.Do(outReq)
261261
if err != nil {

service/signer/http.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,20 +31,21 @@ var _ http.RoundTripper = (*RoundTripper)(nil)
3131
var ErrSigning = errors.New("signing proxy: unable to sign request")
3232

3333
// NewHTTPClient will create a new http.Client and add the signing transport to it.
34-
func NewHTTPClient(signer request.Signer, signingKey request.RequestSigner, log logger.Logger) *http.Client {
34+
func NewHTTPClient(signer request.Signer, signingKey request.RequestSigner, log logger.Logger, inReq *http.Request) *http.Client {
3535
return &http.Client{
36-
Transport: NewTransport(http.DefaultTransport, signer, signingKey, log),
36+
Transport: NewTransport(http.DefaultTransport, signer, signingKey, log, inReq),
3737
}
3838
}
3939

4040
// NewTransport will create a new http.RoundTripper that can be used in http.Client to sign requests transparently.
4141
// Underlying http.RoundTripper cannot be nil, if unsure, you can use http.DefaultTransport.
42-
func NewTransport(inner http.RoundTripper, signer request.Signer, signingKey request.RequestSigner, log logger.Logger) *RoundTripper {
42+
func NewTransport(inner http.RoundTripper, signer request.Signer, signingKey request.RequestSigner, log logger.Logger, inReq *http.Request) *RoundTripper {
4343
return &RoundTripper{
4444
inner: inner,
4545
signer: signer,
4646
signingKey: signingKey,
4747
log: log,
48+
inReq: inReq,
4849
}
4950
}
5051

@@ -54,6 +55,7 @@ type RoundTripper struct {
5455
signer request.Signer
5556
signingKey request.RequestSigner
5657
log logger.Logger
58+
inReq *http.Request
5759
}
5860

5961
// RoundTrip does the actual signing and sending.
@@ -63,7 +65,7 @@ func (r RoundTripper) RoundTrip(req *http.Request) (*http.Response, error) {
6365
r.log.LogF("signing error: %v", err)
6466
return nil, ErrSigning
6567
}
66-
origUserAgent := req.Header.Get("User-Agent")
68+
origUserAgent := r.inReq.Header.Get("User-Agent")
6769
if origUserAgent != "" {
6870
req.Header.Set("User-Agent-Orig", origUserAgent)
6971
}

0 commit comments

Comments
 (0)