From 889c6b5fa27bcfed4ada80e510ac9ba733b9a627 Mon Sep 17 00:00:00 2001 From: "Jens L." Date: Thu, 14 May 2026 16:09:40 +0200 Subject: [PATCH] web: migrate brand assets to npm pkg (#22361) * web: migrate brand assets to npm pkg Signed-off-by: Jens Langhammer * move assets to separate script and re-use with storybook Signed-off-by: Jens Langhammer * fix testing icon Signed-off-by: Jens Langhammer --------- Signed-off-by: Jens Langhammer --- authentik/stages/email/utils.py | 8 ++-- web/.storybook/main.js | 9 ++-- web/icons/brand.png | Bin 12150 -> 0 bytes web/icons/brand.svg | 1 - web/icons/icon.png | Bin 6103 -> 0 bytes web/icons/icon.svg | 1 - web/icons/icon_left_brand.png | Bin 17084 -> 0 bytes web/icons/icon_left_brand.svg | 1 - web/icons/icon_pride_lgbt.png | Bin 5623 -> 0 bytes web/icons/icon_pride_trans.png | Bin 7420 -> 0 bytes web/icons/icon_top_brand.png | Bin 7717 -> 0 bytes web/icons/icon_top_brand.svg | 1 - web/package-lock.json | 7 +++ web/package.json | 1 + web/scripts/build-assets.mjs | 75 ++++++++++++++++++++++++++++++++ web/scripts/build-web.mjs | 42 ++---------------- 16 files changed, 96 insertions(+), 50 deletions(-) delete mode 100644 web/icons/brand.png delete mode 100644 web/icons/brand.svg delete mode 100644 web/icons/icon.png delete mode 100644 web/icons/icon.svg delete mode 100644 web/icons/icon_left_brand.png delete mode 100644 web/icons/icon_left_brand.svg delete mode 100644 web/icons/icon_pride_lgbt.png delete mode 100644 web/icons/icon_pride_trans.png delete mode 100644 web/icons/icon_top_brand.png delete mode 100644 web/icons/icon_top_brand.svg create mode 100644 web/scripts/build-assets.mjs diff --git a/authentik/stages/email/utils.py b/authentik/stages/email/utils.py index cc69d142a2..98dba7d35a 100644 --- a/authentik/stages/email/utils.py +++ b/authentik/stages/email/utils.py @@ -4,6 +4,7 @@ from email.mime.image import MIMEImage from functools import lru_cache from pathlib import Path +from django.conf import settings from django.core.mail import EmailMultiAlternatives from django.core.mail.message import sanitize_address from django.template.exceptions import TemplateDoesNotExist @@ -14,9 +15,10 @@ from django.utils import translation @lru_cache def logo_data() -> MIMEImage: """Get logo as MIME Image for emails""" - path = Path("web/icons/icon_left_brand.png") - if not path.exists(): - path = Path("web/dist/assets/icons/icon_left_brand.png") + path = Path("web/dist/assets/icons/icon_left_brand.png") + # When running tests, assets might not exist, so fallback to a different icon + if settings.TEST: + path = Path("web/authentik/sources/saml.png") with open(path, "rb") as _logo_file: logo = MIMEImage(_logo_file.read()) logo.add_header("Content-ID", "") diff --git a/web/.storybook/main.js b/web/.storybook/main.js index b7789ecc8b..1421011be0 100644 --- a/web/.storybook/main.js +++ b/web/.storybook/main.js @@ -3,6 +3,8 @@ * @import { StorybookConfig } from "@storybook/web-components-vite"; */ +import { copyAssets } from "../scripts/build-assets.mjs"; + /** * @param {TemplateStringsArray} strings * @param {...any} values @@ -10,15 +12,14 @@ */ const html = (strings, ...values) => String.raw({ raw: strings }, ...values); +await copyAssets(); + /** * @satisfies {StorybookConfig} */ const config = { stories: ["../src/**/*.mdx", "../src/**/*.stories.@(js|jsx|ts|tsx)"], - staticDirs: [ - { from: "../icons", to: "/static/dist/assets/icons" }, - { from: "../authentik", to: "/static/authentik" }, - ], + staticDirs: [{ from: "../dist/assets", to: "/static/dist/assets" }], addons: [ // --- "@storybook/addon-links", diff --git a/web/icons/brand.png b/web/icons/brand.png deleted file mode 100644 index e323066d6c9fb2617403295f2652cad835ba0237..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12150 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 L-MZv8hc5m \ No newline at end of file diff --git a/web/icons/icon.png b/web/icons/icon.png deleted file mode 100644 index 8165cae90b9f93df0f103971f651a6cde7966e9f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6103 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 Upci1Ahw+Yf&R>=tI&tRT0j>l`8vp \ No newline at end of file diff --git a/web/icons/icon_left_brand.png b/web/icons/icon_left_brand.png deleted file mode 100644 index b9bd833a327d6cfe3f28b0f134e5982699b2cb13..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17084 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 cWo;ea^#TJ-(P{AaC0KOMT>6K2>Sn \ No newline at end of file diff --git a/web/icons/icon_pride_lgbt.png b/web/icons/icon_pride_lgbt.png deleted file mode 100644 index 256316c4ee62bbbcbb25f5f003cb3cc99ac816a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5623 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 diff --git a/web/icons/icon_pride_trans.png b/web/icons/icon_pride_trans.png deleted file mode 100644 index 4e038173452c17d9a83680b77bbecd003c427c47..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7420 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 diff --git a/web/icons/icon_top_brand.png b/web/icons/icon_top_brand.png deleted file mode 100644 index 3e55ae3399b9428dc12a36646f2e58a2614170d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7717 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%0Dm#Ey5< z+3tmD-X|yNx1R)=hWWtCv{UbAVKG{F9NZ)6)=#86uAA8!Q{jl@Y!?cqUaNM-5zF-yni9TLkgN1JzB{nYDd9qsW_p-my* zU&1fwZ8U?=oW$R)3sIJJYcH#s3F(jJVKsLL*hpHlZFa>T!eAZsnYkRY#pY8yfp6-o zU9Z$nsZ2M1xVUXgna=V673am1-<&i9c*b2R%#nw`TJu+bqXb>Yb(>7gVk0`rxAsLy p1skXCI{pv&m-Fv5AV;YR4#{abe>wyFiMwC{#@@xQ%;xv={|j7a-9rEX diff --git a/web/icons/icon_top_brand.svg b/web/icons/icon_top_brand.svg deleted file mode 100644 index 4376998381..0000000000 --- a/web/icons/icon_top_brand.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/web/package-lock.json b/web/package-lock.json index c7a17db70a..af0305a748 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -24,6 +24,7 @@ "@formatjs/intl-listformat": "^8.3.5", "@fortawesome/fontawesome-free": "^7.2.0", "@goauthentik/api": "0.0.0", + "@goauthentik/brand-assets": "^2.0.0", "@goauthentik/core": "^1.0.0", "@goauthentik/esbuild-plugin-live-reload": "^2.0.1", "@goauthentik/eslint-config": "^1.3.0", @@ -1551,6 +1552,12 @@ "resolved": "packages/client-ts", "link": true }, + "node_modules/@goauthentik/brand-assets": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@goauthentik/brand-assets/-/brand-assets-2.0.0.tgz", + "integrity": "sha512-yRJrV+KuGrz7MNcRzAkZa4e7LuciuFZBVSyPFRd/EndxgiqcFuFHyn+6tEurKNmianBNURhe2qm5ytoLFgEWFQ==", + "license": "UNLICENSED" + }, "node_modules/@goauthentik/core": { "resolved": "packages/core", "link": true diff --git a/web/package.json b/web/package.json index c5e8fcb6fa..ad105115cc 100644 --- a/web/package.json +++ b/web/package.json @@ -99,6 +99,7 @@ "@formatjs/intl-listformat": "^8.3.5", "@fortawesome/fontawesome-free": "^7.2.0", "@goauthentik/api": "0.0.0", + "@goauthentik/brand-assets": "^2.0.0", "@goauthentik/core": "^1.0.0", "@goauthentik/esbuild-plugin-live-reload": "^2.0.1", "@goauthentik/eslint-config": "^1.3.0", diff --git a/web/scripts/build-assets.mjs b/web/scripts/build-assets.mjs new file mode 100644 index 0000000000..024046c67f --- /dev/null +++ b/web/scripts/build-assets.mjs @@ -0,0 +1,75 @@ +import "@goauthentik/core/environment/load/node"; + +import * as fs from "node:fs/promises"; +import { createRequire } from "node:module"; +import * as path from "node:path"; + +import { ConsoleLogger } from "#logger/node"; +import { DistDirectory, EntryPoint, PackageRoot } from "#paths/node"; + +const require = createRequire(import.meta.url); +const logger = ConsoleLogger.child({ name: "Assets" }); + +/** + * @typedef {[from: string, to: string]} SourceDestinationPair + */ + +/** + * @type {SourceDestinationPair[]} + */ +const assets = [ + [ + path.join(path.dirname(EntryPoint.StandaloneLoading.in), "startup"), + path.dirname(EntryPoint.StandaloneLoading.out), + ], + [path.resolve(PackageRoot, "src", "assets", "images"), "./assets/images"], + [require.resolve("@goauthentik/brand-assets/brand.png"), "./assets/icons/brand.png"], + [require.resolve("@goauthentik/brand-assets/brand.svg"), "./assets/icons/brand.svg"], + [require.resolve("@goauthentik/brand-assets/icon.png"), "./assets/icons/icon.png"], + [require.resolve("@goauthentik/brand-assets/icon.svg"), "./assets/icons/icon.svg"], + [ + require.resolve("@goauthentik/brand-assets/icon_left_brand.png"), + "./assets/icons/icon_left_brand.png", + ], + [ + require.resolve("@goauthentik/brand-assets/icon_left_brand.svg"), + "./assets/icons/icon_left_brand.svg", + ], + [ + require.resolve("@goauthentik/brand-assets/icon_pride_lgbt.png"), + "./assets/icons/icon_pride_lgbt.png", + ], + [ + require.resolve("@goauthentik/brand-assets/icon_pride_trans.png"), + "./assets/icons/icon_pride_trans.png", + ], + [ + require.resolve("@goauthentik/brand-assets/icon_top_brand.png"), + "./assets/icons/icon_top_brand.png", + ], + [ + require.resolve("@goauthentik/brand-assets/icon_top_brand.svg"), + "./assets/icons/icon_top_brand.svg", + ], +]; + +export async function copyAssets() { + /** + * @param {SourceDestinationPair} pair + */ + const copy = ([from, to]) => { + const resolvedDestination = path.resolve(DistDirectory, to); + + logger.debug(`📋 Copying assets from ${from} to ${to}`); + + return fs + .cp(from, resolvedDestination, { + recursive: true, + }) + .catch((error) => { + logger.error(`Failed to copy assets from ${from} to ${to}: ${error}`); + }); + }; + + return await Promise.all(assets.map(copy)); +} diff --git a/web/scripts/build-web.mjs b/web/scripts/build-web.mjs index b43e4b40ba..117c3735db 100644 --- a/web/scripts/build-web.mjs +++ b/web/scripts/build-web.mjs @@ -7,6 +7,8 @@ import "@goauthentik/core/environment/load/node"; import * as fs from "node:fs/promises"; import * as path from "node:path"; +import { copyAssets } from "./build-assets.mjs"; + /** * @file ESBuild script for building the authentik web UI. * @@ -35,22 +37,6 @@ const publicBundledDefinitions = Object.fromEntries( ); logger.info(publicBundledDefinitions, "Bundle definitions"); -/** - * @typedef {[from: string, to: string]} SourceDestinationPair - */ - -/** - * @type {SourceDestinationPair[]} - */ -const assets = [ - [ - path.join(path.dirname(EntryPoint.StandaloneLoading.in), "startup"), - path.dirname(EntryPoint.StandaloneLoading.out), - ], - [path.resolve(PackageRoot, "src", "assets", "images"), "./assets/images"], - [path.resolve(PackageRoot, "icons"), "./assets/icons"], -]; - const entryPointNames = Object.keys(EntryPoint); const entryPoints = Object.values(EntryPoint); const entryPointsDescription = entryPointNames.join("\n\t"); @@ -68,29 +54,7 @@ const BASE_ESBUILD_PLUGINS = [ */ const errors = []; - /** - * @param {SourceDestinationPair} pair - */ - const copy = ([from, to]) => { - const resolvedDestination = path.resolve(DistDirectory, to); - - logger.debug(`📋 Copying assets from ${from} to ${to}`); - - return fs - .cp(from, resolvedDestination, { - recursive: true, - }) - .catch((error) => { - errors.push({ - text: `Failed to copy assets from ${from} to ${to}: ${error}`, - location: { - file: from, - }, - }); - }); - }; - - await Promise.all(assets.map(copy)); + await copyAssets(); return { errors }; });