0
Fork 0
mirror of https://github.com/logto-io/logto.git synced 2025-02-17 22:04:19 -05:00

refactor(core): use name attribute as the default connector name (#4984)

use name attribute as the default connector name
This commit is contained in:
simeng-li 2023-11-29 12:59:00 +08:00 committed by GitHub
parent 4be339d4bf
commit 5105830e2f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 32 additions and 18 deletions

View file

@ -146,7 +146,8 @@ describe('getFullSignInExperience()', () => {
wellConfiguredSsoConnector,
]);
const fullSignInExperience = await getFullSignInExperience();
const fullSignInExperience = await getFullSignInExperience('en');
const connectorFactory = ssoConnectorFactories[wellConfiguredSsoConnector.providerName];
expect(fullSignInExperience).toStrictEqual({
...mockSignInExperience,
@ -159,9 +160,9 @@ describe('getFullSignInExperience()', () => {
ssoConnectors: [
{
id: wellConfiguredSsoConnector.id,
connectorName: wellConfiguredSsoConnector.providerName,
logo: ssoConnectorFactories[wellConfiguredSsoConnector.providerName].logo,
darkLogo: ssoConnectorFactories[wellConfiguredSsoConnector.providerName].logoDark,
connectorName: connectorFactory.name.en,
logo: connectorFactory.logo,
darkLogo: connectorFactory.logoDark,
},
],
isDevelopmentTenant: false,
@ -178,14 +179,16 @@ describe('get sso connectors', () => {
wellConfiguredSsoConnector,
]);
const { ssoConnectors } = await getFullSignInExperience();
const { ssoConnectors } = await getFullSignInExperience('jp');
const connectorFactory = ssoConnectorFactories[wellConfiguredSsoConnector.providerName];
expect(ssoConnectors).toEqual([
{
id: wellConfiguredSsoConnector.id,
connectorName: wellConfiguredSsoConnector.providerName,
logo: ssoConnectorFactories[wellConfiguredSsoConnector.providerName].logo,
darkLogo: ssoConnectorFactories[wellConfiguredSsoConnector.providerName].logoDark,
connectorName: connectorFactory.name.en,
logo: connectorFactory.logo,
darkLogo: connectorFactory.logoDark,
},
]);
});
@ -205,14 +208,16 @@ describe('get sso connectors', () => {
},
]);
const { ssoConnectors } = await getFullSignInExperience();
const connectorFactory = ssoConnectorFactories[wellConfiguredSsoConnector.providerName];
const { ssoConnectors } = await getFullSignInExperience('en');
expect(ssoConnectors).toEqual([
{
id: wellConfiguredSsoConnector.id,
connectorName: displayName,
logo: ssoConnectorFactories[wellConfiguredSsoConnector.providerName].logo,
darkLogo: ssoConnectorFactories[wellConfiguredSsoConnector.providerName].logoDark,
logo: connectorFactory.logo,
darkLogo: connectorFactory.logoDark,
},
]);
});

View file

@ -11,6 +11,7 @@ import { ssoConnectorFactories } from '#src/sso/index.js';
import type Queries from '#src/tenants/Queries.js';
import assertThat from '#src/utils/assert-that.js';
import { getTenantSubscriptionPlan } from '#src/utils/subscription/index.js';
import { isKeyOfI18nPhrases } from '#src/utils/translation.js';
import { type CloudConnectionLibrary } from '../cloud-connection.js';
@ -63,7 +64,7 @@ export const createSignInExperienceLibrary = (
});
};
const getActiveSsoConnectors = async (): Promise<SsoConnectorMetadata[]> => {
const getActiveSsoConnectors = async (locale: string): Promise<SsoConnectorMetadata[]> => {
// TODO: @simeng-li Remove the dev feature check once SSO is fully released
if (!EnvSet.values.isDevFeaturesEnabled) {
return [];
@ -73,13 +74,17 @@ export const createSignInExperienceLibrary = (
return ssoConnectors.map(({ providerName, id, branding }): SsoConnectorMetadata => {
const factory = ssoConnectorFactories[providerName];
const { name, logo, logoDark } = factory;
// eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- empty string is not a valid locale
const providerNameInLocale = (isKeyOfI18nPhrases(locale, name) && name[locale]) || name.en;
return {
id,
// Use the provider name as the connector name if the branding displayName is not provided
connectorName: branding.displayName ?? providerName,
logo: branding.logo ?? factory.logo,
darkLogo: branding.darkLogo ?? factory.logoDark,
connectorName: branding.displayName ?? providerNameInLocale,
logo: branding.logo ?? logo,
darkLogo: branding.darkLogo ?? logoDark,
};
});
};
@ -105,12 +110,12 @@ export const createSignInExperienceLibrary = (
return plan.id === developmentTenantPlanId;
};
const getFullSignInExperience = async (): Promise<FullSignInExperience> => {
const getFullSignInExperience = async (locale: string): Promise<FullSignInExperience> => {
const [signInExperience, logtoConnectors, ssoConnectors, isDevelopmentTenant] =
await Promise.all([
findDefaultSignInExperience(),
getLogtoConnectors(),
getActiveSsoConnectors(),
getActiveSsoConnectors(locale),
getIsDevelopmentTenant(),
]);

View file

@ -44,7 +44,7 @@ export default function wellKnownRoutes<T extends AnonymousRouter>(
'/.well-known/sign-in-exp',
koaGuard({ response: guardFullSignInExperience, status: 200 }),
async (ctx, next) => {
ctx.body = await getFullSignInExperience();
ctx.body = await getFullSignInExperience(ctx.locale);
return next();
}

View file

@ -1,3 +1,4 @@
import { type I18nPhrases } from '@logto/connector-kit';
import type { Translation } from '@logto/schemas';
/**
@ -23,3 +24,6 @@ export const isStrictlyPartial = (
return typeof fullValue === typeof value;
});
};
export const isKeyOfI18nPhrases = (key: string, phrases: I18nPhrases): key is keyof I18nPhrases =>
key in phrases;