mirror of
https://github.com/lukaszraczylo/traefikoidc.git
synced 2026-10-12 04:04:26 +00:00
fix(catalog): analyzer-valid testData and explicit New() error return
The plugin catalog analyzer failed v1.0.28 with "invalid handler type: <nil>" (#151). Two defects combined. The analyzer feeds .traefik.yml testData to New() verbatim. The header values used quadruple braces on a false premise: no configuration path collapses them. Template validation rejected them, so New() failed. The testData now carries plain, valid templates. New() also returned failures through a multi-value tail call (return NewWithContext(...)). Yaegi v0.16.1 zeroes both results of that statement on the error path. The analyzer therefore saw (nil, nil) and reported the opaque handler-type message instead of the real validation error. New() now splits the return explicitly. Construction failures surface as real error messages under yaegi and in Traefik logs. The regression tests pin both fixes. README and CONFIGURATION.md now give correct escaping guidance: plain double braces everywhere; file provider users escape with a raw string. Quadruple braces do not work anywhere. Fixes #151.
This commit is contained in:
+13
-6
@@ -431,13 +431,13 @@ minimalHeaders: true # Only forwards X-Forwarded-User
|
||||
```yaml
|
||||
headers:
|
||||
- name: "X-User-Email"
|
||||
value: "{{{{.Claims.email}}}}"
|
||||
value: "{{.Claims.email}}"
|
||||
- name: "X-User-ID"
|
||||
value: "{{{{.Claims.sub}}}}"
|
||||
value: "{{.Claims.sub}}"
|
||||
- name: "Authorization"
|
||||
value: "Bearer {{{{.AccessToken}}}}"
|
||||
value: "Bearer {{.AccessToken}}"
|
||||
- name: "X-User-Roles"
|
||||
value: "{{{{range $i, $e := .Claims.roles}}}}{{{{if $i}}}},{{{{end}}}}{{{{$e}}}}{{{{end}}}}"
|
||||
value: "{{range $i, $e := .Claims.roles}}{{if $i}},{{end}}{{$e}}{{end}}"
|
||||
```
|
||||
|
||||
**Template Variables:**
|
||||
@@ -446,7 +446,14 @@ headers:
|
||||
- `{{.IdToken}}` / `{{.IDToken}}` - Raw ID token (both spellings work)
|
||||
- `{{.RefreshToken}}` - Raw refresh token
|
||||
|
||||
**Important:** Use double curly braces (`{{{{` and `}}}}`) to escape templates in YAML.
|
||||
**Important — file provider only:** Traefik's file provider runs every dynamic
|
||||
configuration file through Go templating before the plugin sees it, so plain
|
||||
`{{ }}` fails there with `can't evaluate field AccessToken in type bool`.
|
||||
Escape with a raw string: ``value: "{{`{{.Claims.email}}`}}"``. All other
|
||||
providers (Kubernetes CRD, Docker labels, Consul, ...) pass the value through
|
||||
untouched — use the plain form shown above. Do not use quadruple braces
|
||||
(`{{{{ }}}}`); no configuration path collapses them, and template validation
|
||||
rejects them (issues #149, #151).
|
||||
|
||||
**Validation and the claims whitelist.** Header templates are parsed and
|
||||
validated when the middleware loads; an invalid or disallowed template stops the
|
||||
@@ -473,7 +480,7 @@ allowedClaims:
|
||||
- cost_center
|
||||
headers:
|
||||
- name: "X-Employee-Id"
|
||||
value: "{{{{.Claims.employee_id}}}}"
|
||||
value: "{{.Claims.employee_id}}"
|
||||
```
|
||||
|
||||
Listed names apply to both direct access (`{{.Claims.employee_id}}`) and
|
||||
|
||||
Reference in New Issue
Block a user