Skip to content

Commit 04a4881

Browse files
authored
Merge pull request #121 from deploymenttheory/dev
Update headers package and authentication handler***
2 parents 5d89bba + 8eb8d28 commit 04a4881

File tree

4 files changed

+53
-37
lines changed

4 files changed

+53
-37
lines changed

authenticationhandler/auth_oauth.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import (
1717
"time"
1818

1919
"github.com/deploymenttheory/go-api-http-client/apiintegrations/apihandler"
20-
"github.com/deploymenttheory/go-api-http-client/headers"
20+
"github.com/deploymenttheory/go-api-http-client/headers/redact"
2121
"go.uber.org/zap"
2222
)
2323

@@ -90,7 +90,7 @@ func (h *AuthTokenHandler) ObtainOAuthToken(apiHandler apihandler.APIHandler, ht
9090
expirationTime := time.Now().Add(expiresIn)
9191

9292
// Modified log call using the helper function
93-
redactedAccessToken := headers.RedactSensitiveHeaderData(h.HideSensitiveData, "AccessToken", oauthResp.AccessToken)
93+
redactedAccessToken := redact.RedactSensitiveHeaderData(h.HideSensitiveData, "AccessToken", oauthResp.AccessToken)
9494
h.Logger.Info("OAuth token obtained successfully", zap.String("AccessToken", redactedAccessToken), zap.Duration("ExpiresIn", expiresIn), zap.Time("ExpirationTime", expirationTime))
9595

9696
h.Token = oauthResp.AccessToken

headers/headers.go

+25-29
Original file line numberDiff line numberDiff line change
@@ -7,31 +7,43 @@ import (
77
"strings"
88

99
"github.com/deploymenttheory/go-api-http-client/apiintegrations/apihandler"
10+
"github.com/deploymenttheory/go-api-http-client/authenticationhandler"
11+
"github.com/deploymenttheory/go-api-http-client/headers/redact"
12+
1013
"github.com/deploymenttheory/go-api-http-client/logger"
1114
"go.uber.org/zap"
1215
)
1316

1417
// HeaderHandler is responsible for managing and setting headers on HTTP requests.
1518
type HeaderHandler struct {
16-
req *http.Request // The http.Request for which headers are being managed
17-
log logger.Logger // The logger to use for logging headers
18-
apiHandler apihandler.APIHandler // The APIHandler to use for retrieving standard headers
19-
token string // The token to use for setting the Authorization header
19+
req *http.Request // The http.Request for which headers are being managed
20+
log logger.Logger // The logger to use for logging headers
21+
apiHandler apihandler.APIHandler // The APIHandler to use for retrieving standard headers
22+
token string // The token to use for setting the Authorization header
23+
authTokenHandler *authenticationhandler.AuthTokenHandler
2024
}
2125

2226
// NewHeaderHandler creates a new instance of HeaderHandler for a given http.Request, logger, and APIHandler.
23-
func NewHeaderHandler(req *http.Request, log logger.Logger, apiHandler apihandler.APIHandler, token string) *HeaderHandler {
27+
func NewHeaderHandler(req *http.Request, log logger.Logger, apiHandler apihandler.APIHandler, authTokenHandler *authenticationhandler.AuthTokenHandler) *HeaderHandler {
2428
return &HeaderHandler{
25-
req: req,
26-
log: log,
27-
apiHandler: apiHandler,
28-
token: token,
29+
req: req,
30+
log: log,
31+
apiHandler: apiHandler,
32+
authTokenHandler: authTokenHandler,
2933
}
3034
}
3135

3236
// SetAuthorization sets the Authorization header for the request.
33-
func (h *HeaderHandler) SetAuthorization(token string) {
34-
// Ensure the token is prefixed with "Bearer " only once
37+
// func (h *HeaderHandler) SetAuthorization(token string) {
38+
// // Ensure the token is prefixed with "Bearer " only once
39+
// if !strings.HasPrefix(token, "Bearer ") {
40+
// token = "Bearer " + token
41+
// }
42+
// h.req.Header.Set("Authorization", token)
43+
// }
44+
45+
func (h *HeaderHandler) SetAuthorization() {
46+
token := h.authTokenHandler.Token
3547
if !strings.HasPrefix(token, "Bearer ") {
3648
token = "Bearer " + token
3749
}
@@ -103,7 +115,7 @@ func (h *HeaderHandler) SetRequestHeaders(endpoint string) {
103115
for header, value := range standardHeaders {
104116
if header == "Authorization" {
105117
// Set the Authorization header using the token
106-
h.SetAuthorization(h.token) // Ensure the token is correctly prefixed with "Bearer "
118+
h.SetAuthorization() // Ensure the token is correctly prefixed with "Bearer "
107119
} else if value != "" {
108120
h.req.Header.Set(header, value)
109121
}
@@ -121,7 +133,7 @@ func (h *HeaderHandler) LogHeaders(hideSensitiveData bool) {
121133
// Redact sensitive values
122134
if len(values) > 0 {
123135
// Use the first value for simplicity; adjust if multiple values per header are expected
124-
redactedValue := RedactSensitiveHeaderData(hideSensitiveData, name, values[0])
136+
redactedValue := redact.RedactSensitiveHeaderData(hideSensitiveData, name, values[0])
125137
redactedHeaders.Set(name, redactedValue)
126138
}
127139
}
@@ -157,19 +169,3 @@ func CheckDeprecationHeader(resp *http.Response, log logger.Logger) {
157169
)
158170
}
159171
}
160-
161-
// RedactSensitiveHeaderData redacts sensitive data based on the hideSensitiveData flag.
162-
func RedactSensitiveHeaderData(hideSensitiveData bool, key, value string) string {
163-
if hideSensitiveData {
164-
// Define sensitive data keys that should be redacted.
165-
sensitiveKeys := map[string]bool{
166-
"AccessToken": true,
167-
"Authorization": true,
168-
}
169-
170-
if _, found := sensitiveKeys[key]; found {
171-
return "REDACTED"
172-
}
173-
}
174-
return value
175-
}

headers/redact/redact.go

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
// headers/redact/redact.go
2+
package redact
3+
4+
// RedactSensitiveHeaderData redacts sensitive data based on the hideSensitiveData flag.
5+
func RedactSensitiveHeaderData(hideSensitiveData bool, key, value string) string {
6+
if hideSensitiveData {
7+
// Define sensitive data keys that should be redacted.
8+
sensitiveKeys := map[string]bool{
9+
"AccessToken": true,
10+
"Authorization": true,
11+
}
12+
13+
if _, found := sensitiveKeys[key]; found {
14+
return "REDACTED"
15+
}
16+
}
17+
return value
18+
}

httpclient/httpclient_request.go

+8-6
Original file line numberDiff line numberDiff line change
@@ -164,8 +164,9 @@ func (c *Client) executeRequestWithRetries(method, endpoint string, body, out in
164164
}
165165

166166
// Set request headers
167-
log.Debug("Setting Authorization header with token", zap.String("Token", c.Token))
168-
headerHandler := headers.NewHeaderHandler(req, log, c.APIHandler, c.Token)
167+
//log.Debug("Setting Authorization header with token", zap.String("Token", c.Token))
168+
//headerHandler := headers.NewHeaderHandler(req, log, c.APIHandler, c.Token)
169+
headerHandler := headers.NewHeaderHandler(req, c.Logger, c.APIHandler, c.AuthTokenHandler)
169170
headerHandler.SetRequestHeaders(endpoint)
170171
headerHandler.LogHeaders(c.clientConfig.ClientOptions.HideSensitiveData)
171172

@@ -333,8 +334,9 @@ func (c *Client) executeRequest(method, endpoint string, body, out interface{})
333334
}
334335

335336
// Set request headers
336-
log.Debug("Setting Authorization header with token", zap.String("Token", c.Token))
337-
headerHandler := headers.NewHeaderHandler(req, log, c.APIHandler, c.Token)
337+
//log.Debug("Setting Authorization header with token", zap.String("Token", c.Token))
338+
//headerHandler := headers.NewHeaderHandler(req, log, c.APIHandler, c.Token)
339+
headerHandler := headers.NewHeaderHandler(req, c.Logger, c.APIHandler, c.AuthTokenHandler)
338340
headerHandler.SetRequestHeaders(endpoint)
339341
headerHandler.LogHeaders(c.clientConfig.ClientOptions.HideSensitiveData)
340342

@@ -535,8 +537,8 @@ func (c *Client) DoMultipartRequest(method, endpoint string, fields map[string]s
535537
}
536538

537539
// Initialize HeaderManager
538-
log.Debug("Setting Authorization header with token", zap.String("Token", c.Token))
539-
headerHandler := headers.NewHeaderHandler(req, log, c.APIHandler, c.Token)
540+
//log.Debug("Setting Authorization header with token", zap.String("Token", c.Token))
541+
headerHandler := headers.NewHeaderHandler(req, c.Logger, c.APIHandler, c.AuthTokenHandler)
540542

541543
// Use HeaderManager to set headers
542544
headerHandler.SetContentType(contentType)

0 commit comments

Comments
 (0)