generated from SAP/repository-template
-
Notifications
You must be signed in to change notification settings - Fork 13
/
transport.go
41 lines (32 loc) · 1.23 KB
/
transport.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package btpcli
import (
"net/http"
)
// injectBTPCLITransport wraps the transport of the given client with the btpcliTransport
func injectBTPCLITransport(client *http.Client) *http.Client {
parentTransport := http.DefaultTransport
if client.Transport != nil {
parentTransport = client.Transport
}
client.Transport = &btpcliTransport{transport: parentTransport}
return client
}
// btpcliTransport implements the http.RoundTripper interface. Its purpose is to copy headers from parent responses (in case of redirects)
// to the actual request.
type btpcliTransport struct {
transport http.RoundTripper
}
// copyResponseHeaderToRequestHeader copies a header from the parent response (source) to the request (target).
func (bt *btpcliTransport) copyResponseHeaderToRequestHeader(req *http.Request, source string, target string) {
if req.Response == nil {
return
}
if value := req.Response.Header.Get(source); len(value) > 0 {
req.Header.Set(target, value)
}
}
func (bt *btpcliTransport) RoundTrip(req *http.Request) (*http.Response, error) {
bt.copyResponseHeaderToRequestHeader(req, HeaderCLISubdomain, HeaderCLISubdomain)
bt.copyResponseHeaderToRequestHeader(req, HeaderIDToken, HeaderIDToken)
return bt.transport.RoundTrip(req)
}