Skip to content

Commit 00c9bf7

Browse files
committed
refactor: Rename and document the HTTP transport chain
1 parent 08fb1c9 commit 00c9bf7

File tree

2 files changed

+12
-7
lines changed

2 files changed

+12
-7
lines changed

internal/config/client.go

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -97,15 +97,19 @@ type UAMetadata struct {
9797
}
9898

9999
func (c *Config) NewClient(ctx context.Context) (any, error) {
100-
// Network Logging transport is before Digest transport so it can log the first Digest requests with 401 Unauthorized.
101-
// Terraform logging transport is after Digest transport so the Unauthorized request bodies are not logged.
100+
// Transport chain (outermost to innermost):
101+
// userAgentTransport -> tfLoggingTransport -> digestTransport -> networkLoggingTransport -> baseTransport
102+
//
103+
// This ordering ensures:
104+
// 1. networkLoggingTransport logs ALL requests including digest auth 401 challenges
105+
// 2. tfLoggingTransport only logs final authenticated requests (not sensitive auth details)
106+
// 3. userAgentTransport modifies User-Agent before tfLoggingTransport logs it
102107
networkLoggingTransport := NewTransportWithNetworkLogging(baseTransport, logging.IsDebugOrHigher())
103108
digestTransport := digest.NewTransportWithHTTPRoundTripper(cast.ToString(c.PublicKey), cast.ToString(c.PrivateKey), networkLoggingTransport)
104109
// Don't change logging.NewTransport to NewSubsystemLoggingHTTPTransport until all resources are in TPF.
105110
tfLoggingTransport := logging.NewTransport("Atlas", digestTransport)
106-
// Add tf-src header to User-Agent, see wrapper_provider_server.go
107-
// Must be before tfLoggingTransport otherwise the "final" userAgent will not be logged
108-
userAgentTransport := TFSrcUserAgentAdder{
111+
// Add UserAgentExtra fields to the User-Agent header, see wrapper_provider_server.go
112+
userAgentTransport := UserAgentTransport{
109113
Transport: tfLoggingTransport,
110114
}
111115
client := &http.Client{Transport: &userAgentTransport}

internal/config/transport.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,11 +98,12 @@ func AddUserAgentExtra(ctx context.Context, extra UserAgentExtra) context.Contex
9898
return context.WithValue(ctx, UserAgentExtraKey, newExtra)
9999
}
100100

101-
type TFSrcUserAgentAdder struct {
101+
// UserAgentTransport wraps an http.RoundTripper to add User-Agent header with additional metadata.
102+
type UserAgentTransport struct {
102103
Transport http.RoundTripper
103104
}
104105

105-
func (t *TFSrcUserAgentAdder) RoundTrip(req *http.Request) (*http.Response, error) {
106+
func (t *UserAgentTransport) RoundTrip(req *http.Request) (*http.Response, error) {
106107
extra := ReadUserAgentExtra(req.Context())
107108
if extra != nil {
108109
userAgent := req.Header.Get(UserAgentHeader)

0 commit comments

Comments
 (0)