diff --git a/packages/backend-core/src/configs/configs.ts b/packages/backend-core/src/configs/configs.ts index 701b5bb329..49ace84d52 100644 --- a/packages/backend-core/src/configs/configs.ts +++ b/packages/backend-core/src/configs/configs.ts @@ -5,6 +5,7 @@ import { GoogleInnerConfig, OIDCConfig, OIDCInnerConfig, + OIDCLogosConfig, SCIMConfig, SCIMInnerConfig, SettingsConfig, @@ -191,6 +192,10 @@ export function getDefaultGoogleConfig(): GoogleInnerConfig | undefined { // OIDC +export async function getOIDCLogosDoc(): Promise { + return getConfig(ConfigType.OIDC_LOGOS) +} + async function getOIDCConfigDoc(): Promise { return getConfig(ConfigType.OIDC) } diff --git a/packages/bbui/src/Form/Core/Picker.svelte b/packages/bbui/src/Form/Core/Picker.svelte index bd575600b1..aada17b318 100644 --- a/packages/bbui/src/Form/Core/Picker.svelte +++ b/packages/bbui/src/Form/Core/Picker.svelte @@ -99,9 +99,15 @@ bind:this={button} > {#if fieldIcon} - - - + {#if !useOptionIconImage} + + + + {:else} + + icon + + {/if} {/if} {#if fieldColour} @@ -311,4 +317,8 @@ max-width: 170px; font-size: 12px; } + + .option-extra.icon.field-icon { + display: flex; + } diff --git a/packages/builder/src/pages/builder/auth/_components/OIDCButton.svelte b/packages/builder/src/pages/builder/auth/_components/OIDCButton.svelte index 1fa392610b..f5dcbe7466 100644 --- a/packages/builder/src/pages/builder/auth/_components/OIDCButton.svelte +++ b/packages/builder/src/pages/builder/auth/_components/OIDCButton.svelte @@ -29,14 +29,13 @@ } }) - $: src = !$oidc.logo - ? OidcLogo - : preDefinedIcons[$oidc.logo] || `/global/logos_oidc/${$oidc.logo}` + $: oidcLogoImageURL = preDefinedIcons[$oidc.logo] ?? $oidc.logo + $: logoSrc = oidcLogoImageURL ?? OidcLogo {#if show} { const url = `/api/global/auth/${$auth.tenantId}/oidc/configs/${$oidc.uuid}` if (samePage) { diff --git a/packages/types/src/documents/global/config.ts b/packages/types/src/documents/global/config.ts index bebb4ae14f..3fd352aada 100644 --- a/packages/types/src/documents/global/config.ts +++ b/packages/types/src/documents/global/config.ts @@ -79,6 +79,12 @@ export interface OIDCConfigs { configs: OIDCInnerConfig[] } +export interface OIDCLogosInnerConfig { + [key: string]: string +} + +export interface OIDCLogosConfig extends Config {} + export interface OIDCInnerConfig { configUrl: string clientID: string diff --git a/packages/worker/src/api/controllers/global/configs.ts b/packages/worker/src/api/controllers/global/configs.ts index 0f22d4aae0..b061d110f5 100644 --- a/packages/worker/src/api/controllers/global/configs.ts +++ b/packages/worker/src/api/controllers/global/configs.ts @@ -28,6 +28,7 @@ import { SSOConfig, SSOConfigType, UserCtx, + OIDCLogosConfig, } from "@budibase/types" import * as pro from "@budibase/pro" @@ -280,13 +281,39 @@ export async function save(ctx: UserCtx) { } } +function enrichOIDCLogos(oidcLogos: OIDCLogosConfig) { + if (!oidcLogos) { + return + } + oidcLogos.config = Object.keys(oidcLogos.config || {}).reduce( + (acc: any, key: string) => { + if (!key.endsWith("Etag")) { + const etag = oidcLogos.config[`${key}Etag`] + const objectStoreUrl = objectStore.getGlobalFileUrl( + oidcLogos.type, + key, + etag + ) + acc[key] = objectStoreUrl + } else { + acc[key] = oidcLogos.config[key] + } + return acc + }, + {} + ) +} + export async function find(ctx: UserCtx) { try { // Find the config with the most granular scope based on context const type = ctx.params.type - const scopedConfig = await configs.getConfig(type) + let scopedConfig = await configs.getConfig(type) if (scopedConfig) { + if (type === ConfigType.OIDC_LOGOS) { + enrichOIDCLogos(scopedConfig) + } ctx.body = scopedConfig } else { // don't throw an error, there simply is nothing to return @@ -300,16 +327,21 @@ export async function find(ctx: UserCtx) { export async function publicOidc(ctx: Ctx) { try { // Find the config with the most granular scope based on context - const config = await configs.getOIDCConfig() + const oidcConfig = await configs.getOIDCConfig() + const oidcCustomLogos = await configs.getOIDCLogosDoc() - if (!config) { + if (oidcCustomLogos) { + enrichOIDCLogos(oidcCustomLogos) + } + + if (!oidcConfig) { ctx.body = [] } else { ctx.body = [ { - logo: config.logo, - name: config.name, - uuid: config.uuid, + logo: oidcCustomLogos?.config[oidcConfig.logo] ?? oidcConfig.logo, + name: oidcConfig.name, + uuid: oidcConfig.uuid, }, ] }