Files
helm-charts/traefik-forward-auth/templates/configmap.yaml
T
shaandClaude Opus 5 cf2aebf298 feat(traefik-forward-auth): serve several domains and portals from one instance
A session cookie scoped to one registrable domain is never sent to a host under
another, so an app on a second domain could not be protected by this instance at
all. It failed with a 500 naming the cause: "return URL host does not match any
configured cookie domain".

`domains` is now a list of {domain, authHost}, matching the upstream
`server.domains` schema. The chart previously emitted `server.hostname` and
`cookies.domain`, which are not in 4.14.1's documented options — a deprecated
form that still worked. The single-domain values remain as shorthand and fold
into one entry, so an existing release renders the same protection it did before.

`portals` is a list too. A portal is one OAuth2 client, chosen by the middleware
address, so two portals means two Pocket ID applications — which is how access
can be separated per domain rather than merely shared across them. Each portal
gets its own Middleware and its own mounted secret, under
/var/run/secrets/traefik-forward-auth/<portal>/.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-18 00:10:40 +03:00

35 lines
1.0 KiB
YAML

{{- $portals := include "tfa.portals" . | fromYamlArray -}}
{{- $domains := include "tfa.domains" . | fromYamlArray -}}
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Release.Name }}-config
labels:
{{- include "tfa.labels" . | nindent 4 }}
data:
config.yaml: |
server:
# One entry per domain served. `domain` scopes the session cookie and
# `authHost` is where this service is reachable for that domain.
domains:
{{- range $domains }}
- domain: {{ .domain | quote }}
authHost: {{ .authHost | quote }}
{{- end }}
tokens:
sessionLifetime: {{ .Values.tokens.sessionLifetime }}
portals:
{{- range $portals }}
- name: {{ .name | quote }}
providers:
- pocketID:
endpoint: {{ .endpoint | quote }}
clientID: {{ .clientID | quote }}
clientSecretFile: "{{ include "tfa.secretDir" $ }}/{{ .name }}/client-secret"
{{- end }}
{{- with .Values.extraConfig }}
{{ . | nindent 4 }}
{{- end }}