Yeicor / traefikgothauth

Multi-provider authentication plugin for Traefik, thanks to Goth
Apache License 2.0
2 stars 0 forks source link

"interface conversion: string is not map[string]string: missing method" exception for "Providers[0].Custom" map #15

Closed gebinic closed 2 months ago

gebinic commented 2 months ago

I'm using traefikgothauth v0.4.8 in my traefik v3.0.4.

My docker compose service config:

myService:
    image: myImage
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.myService.rule=Host(`host.mydomain.com`)"
      - "traefik.http.routers.myService.tls=true"
      - "traefik.http.routers.myService.entryPoints=websecure"
      - "traefik.http.routers.myService.middlewares=test-auth"
      - "traefik.http.middlewares.test-auth.plugin.traefikgothauth.Providers[0].Name=openid-connect"
      - "traefik.http.middlewares.test-auth.plugin.traefikgothauth.Providers[0].ClientKey=myClient"
      - "traefik.http.middlewares.test-auth.plugin.traefikgothauth.Providers[0].Secret=mySecret"
      - "traefik.http.middlewares.test-auth.plugin.traefikgothauth.Providers[0].RedirectURI=https://host.mydomain.com/redirect"
      - "traefik.http.middlewares.test-auth.plugin.traefikgothauth.Providers[0].LogoutURI=https://host.mydomain.com/logout"
      - "traefik.http.middlewares.test-auth.plugin.traefikgothauth.Providers[0].Scopes[0]=openid"
      - "traefik.http.middlewares.test-auth.plugin.traefikgothauth.Providers[0].Custom.openIDAutoDiscoveryURL=https://id.mydomain.com/auth/realms/master/.well-known/openid-configuration"

Exception:

[traefik-oidc] [DEBUG] 2024-08-07 12:42:46 +0200 | Completing authentication provider=openid-connect 
2024-08-07T12:42:46+02:00 ERR fmt/print.go:305 > plugins-storage/sources/gop-2871255082/src/github.com/Yeicor/traefikgothauth/vendor/github.com/gorilla/mux/mux.go:431:11: panic: github.com/gorilla/mux.Vars(...) module=github.com/Yeicor/traefikgothauth plugin=plugin-traefikgothauth runtime=
2024-08-07T12:42:46+02:00 ERR fmt/print.go:305 > plugins-storage/sources/gop-2871255082/src/github.com/Yeicor/traefikgothauth/vendor/github.com/markbates/goth/gothic/gothic.go:266:10: panic: github.com/markbates/goth/gothic.getProviderName(...) module=github.com/Yeicor/traefikgothauth plugin=plugin-traefikgothauth runtime=
2024-08-07T12:42:46+02:00 ERR fmt/print.go:305 > plugins-storage/sources/gop-2871255082/src/github.com/Yeicor/traefikgothauth/gothic.go:14:23: panic: github.com/Yeicor/traefikgothauth.func(...) module=github.com/Yeicor/traefikgothauth plugin=plugin-traefikgothauth runtime=
2024-08-07T12:42:46+02:00 ERR fmt/print.go:305 > plugins-storage/sources/gop-2871255082/src/github.com/Yeicor/traefikgothauth/http.go:16:5: panic: github.com/Yeicor/traefikgothauth.ServeHTTP(...) module=github.com/Yeicor/traefikgothauth plugin=plugin-traefikgothauth runtime=
172.19.0.1 - - [07/Aug/2024:10:42:46 +0000] "GET / HTTP/2.0" 0 0 "-" "-" 1 "myService@docker" "-" 1ms
2024-08-07T12:42:46+02:00 ERR github.com/traefik/traefik/v3/pkg/middlewares/recovery/recovery.go:42 > Recovered from panic in HTTP handler [172.19.0.1:50598 - /]: plugins-storage/sources/gop-2871255082/src/github.com/Yeicor/traefikgothauth/vendor/github.com/gorilla/mux/mux.go:432:10: interface conversion: string is not map[string]string: missing method  middlewareName=traefik-internal-recovery middlewareType=Recovery
2024-08-07T12:42:46+02:00 ERR github.com/traefik/traefik/v3/pkg/middlewares/recovery/recovery.go:46 > Stack: goroutine 155 [running]:
github.com/traefik/traefik/v3/pkg/middlewares/recovery.recoverFunc({0x674aaf0, 0xc005ca4a90}, 0xc006633560)
        github.com/traefik/traefik/v3/pkg/middlewares/recovery/recovery.go:45 +0x1ed
panic({0x5501540?, 0xc006176fd8?})
        runtime/panic.go:770 +0x132
github.com/traefik/yaegi/interp.runCfg.func1()
        github.com/traefik/yaegi@v0.16.1/interp/run.go:226 +0x1ae
panic({0x5501540?, 0xc006176fd8?})
        runtime/panic.go:770 +0x132
github.com/traefik/yaegi/interp.runCfg.func1()
        github.com/traefik/yaegi@v0.16.1/interp/run.go:226 +0x1ae
panic({0x5501540?, 0xc006176fd8?})
        runtime/panic.go:770 +0x132
github.com/traefik/yaegi/interp.runCfg.func1()
        github.com/traefik/yaegi@v0.16.1/interp/run.go:226 +0x1ae
panic({0x5501540?, 0xc006176fd8?})
        runtime/panic.go:770 +0x132
github.com/traefik/yaegi/interp.runCfg.func1()
        github.com/traefik/yaegi@v0.16.1/interp/run.go:226 +0x1ae
panic({0x5501540?, 0xc006176fd8?})
        runtime/panic.go:770 +0x132
github.com/traefik/yaegi/interp.typeAssert.func4(0xc005eeba20)
        github.com/traefik/yaegi@v0.16.1/interp/run.go:516 +0x5a5
github.com/traefik/yaegi/interp.runCfg(0xc003100780, 0xc005eeba20, 0x4d0f18?, 0x5688ee0?)
        github.com/traefik/yaegi@v0.16.1/interp/run.go:234 +0x285
github.com/traefik/yaegi/interp.call.func9(0xc005eeb970)
        github.com/traefik/yaegi@v0.16.1/interp/run.go:1401 +0x7c9
github.com/traefik/yaegi/interp.runCfg(0xc002fe4640, 0xc005eeb970, 0xc0023587f8?, 0x5688ee0?)
        github.com/traefik/yaegi@v0.16.1/interp/run.go:234 +0x285
github.com/traefik/yaegi/interp.genFunctionWrapper.func1.1({0xc006176ed0, 0x1, 0x1?})
        github.com/traefik/yaegi@v0.16.1/interp/run.go:1042 +0x7a5
reflect.Value.call({0xc003666190?, 0xc0039084c0?, 0x7f4703d7bf18?}, {0x582c7e4, 0x4}, {0xc006176eb8, 0x1, 0x7f46bcb12358?})
        reflect/value.go:596 +0xca6
reflect.Value.Call({0xc003666190?, 0xc0039084c0?, 0x45bb69?}, {0xc006176eb8?, 0x57a49e0?, 0x41ce01?})
        reflect/value.go:380 +0xb9
github.com/traefik/yaegi/interp.call.func9.2({0xc006176eb8?, 0xc0039084c0?, 0x8?})
        github.com/traefik/yaegi@v0.16.1/interp/run.go:1310 +0x36
github.com/traefik/yaegi/interp.call.func9(0xc005eeb8c0)
        github.com/traefik/yaegi@v0.16.1/interp/run.go:1330 +0xce5
github.com/traefik/yaegi/interp.runCfg(0xc0039a1900, 0xc005eeb8c0, 0xc0023597e0?, 0x5688ee0?)
        github.com/traefik/yaegi@v0.16.1/interp/run.go:234 +0x285
github.com/traefik/yaegi/interp.getFunc.func1.1({0xc006656660, 0x2, 0x4?})
        github.com/traefik/yaegi@v0.16.1/interp/run.go:1919 +0x592
reflect.Value.call({0xc003645500?, 0xc005b4ff70?, 0xc005eeb600?}, {0x582c7e4, 0x4}, {0xc006656630, 0x2, 0x7f46bcd0b8c8?})
        reflect/value.go:596 +0xca6
reflect.Value.Call({0xc003645500?, 0xc005b4ff70?, 0x45bb69?}, {0xc006656630?, 0x57a49e0?, 0x1?})
        reflect/value.go:380 +0xb9
github.com/traefik/yaegi/interp.call.func9.2({0xc006656630?, 0xc005b4ff70?, 0x18?})
        github.com/traefik/yaegi@v0.16.1/interp/run.go:1310 +0x36
github.com/traefik/yaegi/interp.call.func9(0xc005eeb3f0)
        github.com/traefik/yaegi@v0.16.1/interp/run.go:1330 +0xce5
github.com/traefik/yaegi/interp.runCfg(0xc003a137c0, 0xc005eeb3f0, 0xc0065b09b8?, 0x5688ee0?)
        github.com/traefik/yaegi@v0.16.1/interp/run.go:234 +0x285
github.com/traefik/yaegi/interp.genFunctionWrapper.func1.1({0xc006656180, 0x2, 0x4?})
        github.com/traefik/yaegi@v0.16.1/interp/run.go:1042 +0x7a5
github.com/traefik/yaegi/stdlib._net_http_Handler.ServeHTTP(...)
        github.com/traefik/yaegi@v0.16.1/stdlib/go1_22_net_http.go:296
github.com/traefik/traefik/v3/pkg/server/middleware.(*traceablePlugin).ServeHTTP(0x675e248?, {0x674a970?, 0xc005eb78c0?}, 0xc006639f80?)
        github.com/traefik/traefik/v3/pkg/server/middleware/plugins.go:55 +0x26
github.com/traefik/traefik/v3/pkg/middlewares/observability.(*middlewareTracing).ServeHTTP(0xc00604fe40, {0x674a970, 0xc005eb78c0}, 0xc0066338c0)
        github.com/traefik/traefik/v3/pkg/middlewares/observability/middleware.go:69 +0x438
github.com/traefik/traefik/v3/pkg/middlewares/accesslog.(*FieldHandler).ServeHTTP(0xc00604fe80, {0x674a970, 0xc005eb78c0}, 0xc0066338c0)
        github.com/traefik/traefik/v3/pkg/middlewares/accesslog/field_middleware.go:41 +0xf7
github.com/traefik/traefik/v3/pkg/middlewares/accesslog.InitServiceFields({0x674a970, 0xc005eb78c0}, 0xc0066338c0, {0x66f7000, 0xc00604fe80}, 0xc006614f40)
        github.com/traefik/traefik/v3/pkg/middlewares/accesslog/field_middleware.go:77 +0x132
github.com/traefik/traefik/v3/pkg/middlewares/accesslog.(*FieldHandler).ServeHTTP(0xc00604fec0, {0x674a970, 0xc005eb78c0}, 0xc0066338c0)
        github.com/traefik/traefik/v3/pkg/middlewares/accesslog/field_middleware.go:39 +0xd9
github.com/traefik/traefik/v3/pkg/middlewares/accesslog.(*Handler).ServeHTTP(0xc001d764e0, {0x674a970, 0xc005eb78c0}, 0xc006633680, {0x66f7000, 0xc00604fec0})
        github.com/traefik/traefik/v3/pkg/middlewares/accesslog/logger.go:241 +0xf18
github.com/traefik/traefik/v3/pkg/server/middleware.(*ObservabilityMgr).BuildEPChain.WrapHandler.func2.1({0x674a970?, 0xc005eb78c0?}, 0xc0066560f0?)
        github.com/traefik/traefik/v3/pkg/middlewares/accesslog/logger.go:73 +0x35
net/http.HandlerFunc.ServeHTTP(0xc006638ba0?, {0x674a970?, 0xc005eb78c0?}, 0xc006633560?)
        net/http/server.go:2166 +0x29
github.com/traefik/traefik/v3/pkg/middlewares/capture.Wrap.func1({0x674aaf0, 0xc005ca4a90}, 0xc006633560)
        github.com/traefik/traefik/v3/pkg/middlewares/capture/capture.go:48 +0x68
net/http.HandlerFunc.ServeHTTP(0xc00617eb60?, {0x674aaf0?, 0xc005ca4a90?}, 0x408e46?)
        net/http/server.go:2166 +0x29
github.com/traefik/traefik/v3/pkg/muxer/http.(*Muxer).ServeHTTP(0xc0068006e0, {0x674aaf0, 0xc005ca4a90}, 0xc006633560)
        github.com/traefik/traefik/v3/pkg/muxer/http/mux.go:55 +0xa6
github.com/traefik/traefik/v3/pkg/middlewares/recovery.(*recovery).ServeHTTP(0xc0067e90a0?, {0x674aaf0?, 0xc005ca4a90?}, 0xc005e6c8f8?)
        github.com/traefik/traefik/v3/pkg/middlewares/recovery/recovery.go:31 +0x6b
github.com/traefik/traefik/v3/pkg/middlewares/snicheck.SNICheck.ServeHTTP({{0x66feb00?, 0xc00681fe50?}, 0xc00683e9c0?}, {0x674aaf0, 0xc005ca4a90}, 0xc006633560)
        github.com/traefik/traefik/v3/pkg/middlewares/snicheck/snicheck.go:49 +0x163
github.com/traefik/traefik/v3/pkg/middlewares.(*HTTPHandlerSwitcher).ServeHTTP(0x414e25?, {0x674aaf0, 0xc005ca4a90}, 0xc006633560)
        github.com/traefik/traefik/v3/pkg/middlewares/handler_switcher.go:23 +0x91
github.com/traefik/traefik/v3/pkg/middlewares/requestdecorator.(*RequestDecorator).ServeHTTP(0xc001dce308, {0x674aaf0, 0xc005ca4a90}, 0xc00686a7e0, 0xc005e6cad8)
        github.com/traefik/traefik/v3/pkg/middlewares/requestdecorator/request_decorator.go:47 +0x2ee
github.com/traefik/traefik/v3/pkg/server.createHTTPServer.WrapHandler.func6.1({0x674aaf0?, 0xc005ca4a90?}, 0xc00683f0b0?)
        github.com/traefik/traefik/v3/pkg/middlewares/requestdecorator/request_decorator.go:89 +0x65
net/http.HandlerFunc.ServeHTTP(0xc001d65540?, {0x674aaf0?, 0xc005ca4a90?}, 0x9?)
        net/http/server.go:2166 +0x29
github.com/traefik/traefik/v3/pkg/middlewares/forwardedheaders.(*XForwarded).ServeHTTP(0xc001d65540, {0x674aaf0, 0xc005ca4a90}, 0xc00686a7e0)
        github.com/traefik/traefik/v3/pkg/middlewares/forwardedheaders/forwarded_header.go:192 +0xb0
github.com/traefik/traefik/v3/pkg/server.createHTTPServer.denyFragment.func7({0x674aaf0, 0xc005ca4a90}, 0xc00686a7e0)
        github.com/traefik/traefik/v3/pkg/server/server_entrypoint_tcp.go:729 +0xf6
net/http.HandlerFunc.ServeHTTP(0x0?, {0x674aaf0?, 0xc005ca4a90?}, 0x41a5a5?)
        net/http/server.go:2166 +0x29
github.com/traefik/traefik/v3/pkg/server.createHTTPServer.AllowQuerySemicolons.func9({0x674aaf0, 0xc005ca4a90}, 0xc00686a7e0)
        net/http/server.go:3159 +0x1cf
net/http.HandlerFunc.ServeHTTP(0x54a57c0?, {0x674aaf0?, 0xc005ca4a90?}, 0xc?)
        net/http/server.go:2166 +0x29
github.com/traefik/traefik/v3/pkg/server.createHTTPServer.DisableAutoDetection.func10({0x674aaf0, 0xc005ca4a90}, 0xc00686a7e0)
        github.com/traefik/traefik/v3/pkg/middlewares/contenttype/content_type.go:56 +0xc5
net/http.HandlerFunc.ServeHTTP(0xc000c06520?, {0x674aaf0?, 0xc005ca4a90?}, 0xc0067fc840?)
        net/http/server.go:2166 +0x29
net/http.serverHandler.ServeHTTP({0x0?}, {0x674aaf0?, 0xc005ca4a90?}, 0x0?)
        net/http/server.go:3137 +0x8e
net/http.initALPNRequest.ServeHTTP({{0x675e248?, 0xc0065cb980?}, 0xc0065f2008?, {0xc001b5a690?}}, {0x674aaf0, 0xc005ca4a90}, 0xc00686a7e0)
        net/http/server.go:3745 +0x231
golang.org/x/net/http2.(*serverConn).runHandler(0xc000c067d0?, 0x783ba5?, 0xc0067f2f00?, 0x0?)
        golang.org/x/net@v0.26.0/http2/server.go:2414 +0x113
created by golang.org/x/net/http2.(*serverConn).scheduleHandler in goroutine 143
        golang.org/x/net@v0.26.0/http2/server.go:2348 +0x21d
 middlewareName=traefik-internal-recovery middlewareType=Recovery
Yeicor commented 2 months ago

This was a (yaegi-related?) bug that I worked around in master (but master does not work for other reasons). I will probably patch it this weekend. Thanks for sharing it.

Yeicor commented 2 months ago

The bug was even weirder than expected, but it should be fixed in v0.4.9 (reopen the issue if you still have the same problem).