From 10f657630cdd17ccfb68adfb270b677a74e20801 Mon Sep 17 00:00:00 2001 From: alexandreh2ag Date: Thu, 5 Jan 2023 08:44:02 +0100 Subject: [PATCH] #3 : add workaround with traefik bug parsing with nested []string in config struct --- middleware.go | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/middleware.go b/middleware.go index 7aabc7c..9f39354 100644 --- a/middleware.go +++ b/middleware.go @@ -51,6 +51,11 @@ func New(ctx context.Context, next http.Handler, config *Config, name string) (h return nil, errors.New("sourceRange is empty, IPWhiteLister not created") } + // workaround to bug in traefik/paerser who format []string{"A", "B"} to string("24║A║B") or string("║A║B") + // see: https://github.com/traefik/traefik/issues/9638 + config.IPWhiteList.SourceRange = stringToSliceHook(config.IPWhiteList.SourceRange) + config.BasicAuth.Users = stringToSliceHook(config.BasicAuth.Users) + checker, err := NewChecker(config.IPWhiteList.SourceRange) if err != nil { return nil, fmt.Errorf("cannot parse CIDR whitelist %s: %w", config.IPWhiteList.SourceRange, err) @@ -129,3 +134,14 @@ func basicUserParser(user string) (string, string, error) { } return split[0], split[1], nil } + +func stringToSliceHook(data []string) []string { + if strings.Contains(data[0], "║") { + values := strings.Split(data[0], "║") + if len(values) >= 2 && values[0] == "" && values[1] == "24" { + return values[2:] + } + return values + } + return data +}