From 21f0018c54dfbc1dbc4e4ca2fe535b9fded6b2f6 Mon Sep 17 00:00:00 2001 From: Alastair Drong Date: Sun, 26 Jul 2026 11:45:20 -0700 Subject: [PATCH] =?UTF-8?q?Brand=20the=20Authelia=20login=20portal=20with?= =?UTF-8?q?=20the=20SUS=20=F0=9F=A4=A8=20logo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replaces Authelia's default person icon on the login card with the SUS 🤨 (Noto Emoji, Apache-2.0, bundled at charts/sus/assets/logo.png) via a server asset override (server.asset_path). Configurable under auth.authelia.branding (enabled, theme, logoPngBase64 to supply your own logo). The rest of the portal, including the "Sign in" text, is left as Authelia ships it. New templates/authelia/assets-configmap.yaml carries the logo (binaryData via .Files.Get); the deployment subPath-mounts it into the asset tree and rolls on change via a checksum annotation. Gated by branding.enabled (default true), so it's off when auth is off. Verified live on k3d: Authelia boots with asset_path and serves the bundled 🤨 at /static/media/logo.png (data-logooverride="true"). Co-Authored-By: Claude Opus 4.8 --- charts/sus/assets/README.md | 6 ++++++ charts/sus/assets/logo.png | Bin 0 -> 34735 bytes .../templates/authelia/assets-configmap.yaml | 14 ++++++++++++++ charts/sus/templates/authelia/configmap.yaml | 6 +++++- charts/sus/templates/authelia/deployment.yaml | 16 ++++++++++++++++ charts/sus/values.yaml | 10 ++++++++++ 6 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 charts/sus/assets/README.md create mode 100644 charts/sus/assets/logo.png create mode 100644 charts/sus/templates/authelia/assets-configmap.yaml diff --git a/charts/sus/assets/README.md b/charts/sus/assets/README.md new file mode 100644 index 0000000..e584399 --- /dev/null +++ b/charts/sus/assets/README.md @@ -0,0 +1,6 @@ +# Bundled portal assets + +- `logo.png` — "face with raised eyebrow" (U+1F928), from the + [Noto Emoji](https://github.com/googlefonts/noto-emoji) project, licensed + Apache-2.0. Used as the default Authelia login-portal logo. Operators can + override it via `auth.authelia.branding.logoPngBase64`. diff --git a/charts/sus/assets/logo.png b/charts/sus/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..4d62396efc378166b05fd3f1e026a87af77f4182 GIT binary patch literal 34735 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 JtaD0e0su*(qc#8l literal 0 HcmV?d00001 diff --git a/charts/sus/templates/authelia/assets-configmap.yaml b/charts/sus/templates/authelia/assets-configmap.yaml new file mode 100644 index 0000000..f9dee43 --- /dev/null +++ b/charts/sus/templates/authelia/assets-configmap.yaml @@ -0,0 +1,14 @@ +{{- if and .Values.auth.enabled .Values.auth.authelia.branding.enabled }} +# Authelia server-asset override mounted at server.asset_path (/config/assets): +# logo.png -> the login-portal logo (replaces Authelia's default icon) +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ include "sus.authelia.fullname" . }}-assets + namespace: {{ .Values.namespaces.platform }} + labels: + {{- include "sus.labels" . | nindent 4 }} + app.kubernetes.io/component: authelia +binaryData: + logo.png: {{ .Values.auth.authelia.branding.logoPngBase64 | default (.Files.Get "assets/logo.png" | b64enc) }} +{{- end }} diff --git a/charts/sus/templates/authelia/configmap.yaml b/charts/sus/templates/authelia/configmap.yaml index 71e015e..d5cbaf4 100644 --- a/charts/sus/templates/authelia/configmap.yaml +++ b/charts/sus/templates/authelia/configmap.yaml @@ -12,9 +12,13 @@ metadata: app.kubernetes.io/component: authelia data: configuration.yml: | - theme: light + theme: {{ .Values.auth.authelia.branding.theme | default "light" }} server: address: 'tcp://:9091' + {{- if .Values.auth.authelia.branding.enabled }} + # Override the portal logo/favicon and text (see the -assets ConfigMap). + asset_path: /config/assets + {{- end }} log: level: info totp: diff --git a/charts/sus/templates/authelia/deployment.yaml b/charts/sus/templates/authelia/deployment.yaml index 828f66e..0be6d73 100644 --- a/charts/sus/templates/authelia/deployment.yaml +++ b/charts/sus/templates/authelia/deployment.yaml @@ -27,6 +27,9 @@ spec: # used — rotate/roll that yourself.) checksum/authelia-config: {{ include (print $.Template.BasePath "/authelia/configmap.yaml") . | sha256sum }} checksum/authelia-secret: {{ include (print $.Template.BasePath "/authelia/secret.yaml") . | sha256sum }} + {{- if .Values.auth.authelia.branding.enabled }} + checksum/authelia-assets: {{ include (print $.Template.BasePath "/authelia/assets-configmap.yaml") . | sha256sum }} + {{- end }} spec: containers: - name: authelia @@ -76,10 +79,23 @@ spec: readOnly: true - name: data mountPath: /data + {{- if .Values.auth.authelia.branding.enabled }} + # subPath mount places the logo into the asset tree + # (server.asset_path = /config/assets) without shadowing the rest of it. + - name: assets + mountPath: /config/assets/logo.png + subPath: logo.png + readOnly: true + {{- end }} volumes: - name: config configMap: name: {{ include "sus.authelia.fullname" . }} + {{- if .Values.auth.authelia.branding.enabled }} + - name: assets + configMap: + name: {{ include "sus.authelia.fullname" . }}-assets + {{- end }} - name: users secret: secretName: {{ $secretName }} diff --git a/charts/sus/values.yaml b/charts/sus/values.yaml index bb567b1..90841c6 100644 --- a/charts/sus/values.yaml +++ b/charts/sus/values.yaml @@ -111,6 +111,16 @@ auth: # Pinned minor tag — Authelia's config schema is version-sensitive. tag: "4.38" pullPolicy: IfNotPresent + # -- Login-portal branding. Replaces Authelia's default icon with the SUS 🤨 + # logo by default; the rest of the portal (including the "Sign in" text) is + # left as Authelia ships it. + branding: + enabled: true + # Portal color scheme: light | dark | grey | auto. + theme: light + # -- Override the bundled 🤨 logo with your own PNG (base64-encoded, e.g. + # `base64 -i logo.png`). Empty = use the bundled SUS logo. + logoPngBase64: "" # Memory limit must accommodate argon2id password verification, which is # memory-hard by design (default parameters use 64MiB per concurrent login) # on top of Authelia's baseline — too low a limit OOM-kills the container