mirror of
https://github.com/lukaszraczylo/traefikoidc.git
synced 2026-10-18 04:47:28 +00:00
review fixes apr 2026 (#130)
* Multiple fixes - refresh coordinator dedup + memory pressure wire - middleware sse consolidation + timer leak + claim cache - universal cache sync backfill + isDebug gate - lazy background task race - memory monitor stw cached + refresh() api * fix(auth): suppress OIDC redirects on non-navigation requests - [x] Add isNonNavigationRequest using Sec-Fetch-Mode and Accept headers - [x] Add comprehensive TestIsNonNavigationRequest - [x] Update ServeHTTP to 401 non-navigation and AJAX requests Fixes #129 * feat(config): add custom CA and insecure skip verify for OIDC TLS - [x] Add CACertPath, CACertPEM, InsecureSkipVerify to Config - [x] Implement loadCACertPool for CA bundle loading - [x] Update HTTPClientConfig with RootCAs and InsecureSkipVerify - [x] Apply CA pool and skip verify to pooled HTTP clients - [x] Enhance configKey to distinguish TLS configs - [x] Add comprehensive ca_cert_test.go Fixes #125 * feat(oidc): add custom CA certificate support for private OIDC providers - [x] Add caCertPath, caCertPEM, insecureSkipVerify config options - [x] Update traefik.yml with new OIDC client config fields - [x] Add configuration schema descriptions for new options - [x] Update README table and add Custom CA Certificates section * Fix the documentation. * test(redis): add oversized argument rejection test - [x] Add TestRedisConn_RejectOversizedArgumentBytes - [x] Import strings package * Dependencies cleanup
This commit is contained in:
@@ -113,12 +113,26 @@ func NewWithContext(ctx context.Context, config *Config, next http.Handler, name
|
||||
}
|
||||
}
|
||||
// Setup HTTP client
|
||||
caPool, err := config.loadCACertPool()
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to load CA certificates: %w", err)
|
||||
}
|
||||
if config.InsecureSkipVerify {
|
||||
logger.Errorf("SECURITY WARNING: InsecureSkipVerify is enabled for the OIDC provider. TLS certificate verification is DISABLED. Do not use in production.")
|
||||
}
|
||||
var httpClient *http.Client
|
||||
if config.HTTPClient != nil {
|
||||
httpClient = config.HTTPClient
|
||||
} else {
|
||||
httpClient = CreateDefaultHTTPClient()
|
||||
defaultCfg := DefaultHTTPClientConfig()
|
||||
defaultCfg.RootCAs = caPool
|
||||
defaultCfg.InsecureSkipVerify = config.InsecureSkipVerify
|
||||
httpClient = CreatePooledHTTPClient(defaultCfg)
|
||||
}
|
||||
tokenCfg := TokenHTTPClientConfig()
|
||||
tokenCfg.RootCAs = caPool
|
||||
tokenCfg.InsecureSkipVerify = config.InsecureSkipVerify
|
||||
tokenHTTPClient := CreatePooledHTTPClient(tokenCfg)
|
||||
goroutineWG := &sync.WaitGroup{}
|
||||
cacheManager := GetGlobalCacheManagerWithConfig(goroutineWG, config)
|
||||
|
||||
@@ -199,7 +213,7 @@ func NewWithContext(ctx context.Context, config *Config, next http.Handler, name
|
||||
limiter: rate.NewLimiter(rate.Every(time.Second), config.RateLimit),
|
||||
tokenCache: cacheManager.GetSharedTokenCache(),
|
||||
httpClient: httpClient,
|
||||
tokenHTTPClient: CreateTokenHTTPClient(),
|
||||
tokenHTTPClient: tokenHTTPClient,
|
||||
excludedURLs: createStringMap(config.ExcludedURLs),
|
||||
allowedUserDomains: createStringMap(config.AllowedUserDomains),
|
||||
allowedUsers: createCaseInsensitiveStringMap(config.AllowedUsers),
|
||||
@@ -293,13 +307,12 @@ func NewWithContext(ctx context.Context, config *Config, next http.Handler, name
|
||||
|
||||
startReplayCacheCleanup(pluginCtx, logger)
|
||||
|
||||
// Start memory monitoring for leak detection and performance insights
|
||||
// Start memory monitoring for leak detection and performance insights.
|
||||
// The interval is clamped to MinMemoryMonitorInterval (30s) inside
|
||||
// StartMonitoring; tests that need deterministic sampling should call
|
||||
// MemoryMonitor.Refresh() directly instead of waiting on a fast ticker.
|
||||
memoryMonitor := GetGlobalMemoryMonitor()
|
||||
monitorInterval := 60 * time.Second
|
||||
if isTestMode() {
|
||||
monitorInterval = 100 * time.Millisecond // Fast interval for tests
|
||||
}
|
||||
memoryMonitor.StartMonitoring(pluginCtx, monitorInterval)
|
||||
memoryMonitor.StartMonitoring(pluginCtx, DefaultMemoryMonitorInterval)
|
||||
logger.Debug("Started global memory monitoring")
|
||||
|
||||
logger.Debugf("TraefikOidc.New: Final t.scopes initialized to: %v", t.scopes)
|
||||
|
||||
Reference in New Issue
Block a user