Skip to content

Commit 6818db3

Browse files
committed
Refactor cookie handling configuration and environment variable handling
1 parent 20d3720 commit 6818db3

File tree

5 files changed

+46
-9
lines changed

5 files changed

+46
-9
lines changed

README.md

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,8 +108,12 @@ Example configuration file (clientconfig.json):
108108
"LogExportPath": "/your/log/path/folder",
109109
"HideSensitiveData": true // redacts sensitive data from logs
110110
},
111-
"Cookie": {
112-
"EnableCookieJar": true // enable cookie jar support
111+
"Cookies": {
112+
"EnableCookieJar": true, // enable cookie jar support
113+
"CustomCookies": { // set custom cookies as an alternative to cookie jar
114+
"sessionId": "abc123",
115+
"authToken": "xyz789"
116+
}
113117
},
114118
"Retry": {
115119
"MaxRetryAttempts": 5, // set number of retry attempts

cookiejar/cookiejar.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,17 @@ func SetupCookieJar(client *http.Client, enableCookieJar bool, log logger.Logger
3131
return nil
3232
}
3333

34+
// SetSpecificCookies sets specific cookies provided in the configuration on the HTTP request.
35+
func SetSpecificCookies(req *http.Request, cookies map[string]string) {
36+
for name, value := range cookies {
37+
cookie := &http.Cookie{
38+
Name: name,
39+
Value: value,
40+
}
41+
req.AddCookie(cookie)
42+
}
43+
}
44+
3445
// GetCookies is a middleware that extracts cookies from incoming requests and serializes them.
3546
func GetCookies(next http.Handler, log logger.Logger) http.Handler {
3647
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {

httpclient/client.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ type EnvironmentConfig struct {
6060
// ClientOptions holds optional configuration options for the HTTP Client.
6161
type ClientOptions struct {
6262
Logging LoggingConfig // Configuration related to logging
63-
Cookie CookieConfig // Cookie handling settings
63+
Cookies CookieConfig // Cookie handling settings
6464
Retry RetryConfig // Retry behavior configuration
6565
Concurrency ConcurrencyConfig // Concurrency configuration
6666
Timeout TimeoutConfig // Custom timeout settings
@@ -79,7 +79,7 @@ type LoggingConfig struct {
7979
// CookieConfig holds configuration related to cookie handling.
8080
type CookieConfig struct {
8181
EnableCookieJar bool // Enable or disable cookie jar
82-
SpecificCookies map[string]string `json:"SpecificCookies,omitempty"` // Key-value pairs for specific cookies
82+
CustomCookies map[string]string `json:"CustomCookies,omitempty"` // Key-value pairs for setting specific cookies
8383
}
8484

8585
// RetryConfig holds configuration related to retry behavior.
@@ -156,7 +156,7 @@ func BuildClient(config ClientConfig) (*Client, error) {
156156
}
157157

158158
// Conditionally setup cookie jar
159-
if err := cookiejar.SetupCookieJar(httpClient, config.ClientOptions.Cookie.EnableCookieJar, log); err != nil {
159+
if err := cookiejar.SetupCookieJar(httpClient, config.ClientOptions.Cookies.EnableCookieJar, log); err != nil {
160160
log.Error("Error setting up cookie jar", zap.Error(err))
161161
return nil, err
162162
}
@@ -200,7 +200,7 @@ func BuildClient(config ClientConfig) (*Client, error) {
200200
zap.String("Log Encoding Format", config.ClientOptions.Logging.LogOutputFormat),
201201
zap.String("Log Separator", config.ClientOptions.Logging.LogConsoleSeparator),
202202
zap.Bool("Hide Sensitive Data In Logs", config.ClientOptions.Logging.HideSensitiveData),
203-
zap.Bool("Cookie Jar Enabled", config.ClientOptions.Cookie.EnableCookieJar),
203+
zap.Bool("Cookie Jar Enabled", config.ClientOptions.Cookies.EnableCookieJar),
204204
zap.Int("Max Retry Attempts", config.ClientOptions.Retry.MaxRetryAttempts),
205205
zap.Bool("Enable Dynamic Rate Limiting", config.ClientOptions.Retry.EnableDynamicRateLimiting),
206206
zap.Int("Max Concurrent Requests", config.ClientOptions.Concurrency.MaxConcurrentRequests),

httpclient/client_configuration.go

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -137,8 +137,15 @@ func LoadConfigFromEnv(config *ClientConfig) (*ClientConfig, error) {
137137
log.Printf("HideSensitiveData env value found and set to: %t", config.ClientOptions.Logging.HideSensitiveData)
138138

139139
// Cookies
140-
config.ClientOptions.Cookie.EnableCookieJar = parseBool(getEnvOrDefault("ENABLE_COOKIE_JAR", strconv.FormatBool(config.ClientOptions.Cookie.EnableCookieJar)))
141-
log.Printf("EnableCookieJar env value found and set to: %t", config.ClientOptions.Cookie.EnableCookieJar)
140+
config.ClientOptions.Cookies.EnableCookieJar = parseBool(getEnvOrDefault("ENABLE_COOKIE_JAR", strconv.FormatBool(config.ClientOptions.Cookies.EnableCookieJar)))
141+
log.Printf("EnableCookieJar env value found and set to: %t", config.ClientOptions.Cookies.EnableCookieJar)
142+
143+
// Load specific cookies from environment variable
144+
cookieStr := getEnvOrDefault("CUSTOM_COOKIES", "")
145+
if cookieStr != "" {
146+
config.ClientOptions.Cookies.CustomCookies = parseCookiesFromString(cookieStr)
147+
log.Printf("CustomCookies env value found and set")
148+
}
142149

143150
// Retry
144151
config.ClientOptions.Retry.MaxRetryAttempts = parseInt(getEnvOrDefault("MAX_RETRY_ATTEMPTS", strconv.Itoa(config.ClientOptions.Retry.MaxRetryAttempts)), DefaultMaxRetryAttempts)
@@ -343,3 +350,18 @@ func setLoggerDefaultValues(config *ClientConfig) {
343350
// Log completion of setting default values
344351
log.Println("Default values set for logger configuration")
345352
}
353+
354+
// parseCookiesFromString parses a semi-colon separated string of key=value pairs into a map.
355+
func parseCookiesFromString(cookieStr string) map[string]string {
356+
cookies := make(map[string]string)
357+
pairs := strings.Split(cookieStr, ";")
358+
for _, pair := range pairs {
359+
kv := strings.SplitN(pair, "=", 2)
360+
if len(kv) == 2 {
361+
key := strings.TrimSpace(kv[0])
362+
value := strings.TrimSpace(kv[1])
363+
cookies[key] = value
364+
}
365+
}
366+
return cookies
367+
}

httpclient/client_configuration_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ func TestLoadConfigFromFile(t *testing.T) {
5656
assert.True(t, config.ClientOptions.Retry.EnableDynamicRateLimiting)
5757
assert.Equal(t, 5, config.ClientOptions.Retry.MaxRetryAttempts)
5858
assert.Equal(t, 3, config.ClientOptions.Concurrency.MaxConcurrentRequests)
59-
assert.True(t, config.ClientOptions.Cookie.EnableCookieJar)
59+
assert.True(t, config.ClientOptions.Cookies.EnableCookieJar)
6060
assert.True(t, config.ClientOptions.Redirect.FollowRedirects)
6161
assert.Equal(t, 5, config.ClientOptions.Redirect.MaxRedirects)
6262
}

0 commit comments

Comments
 (0)