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:
parent
4be339d4bf
commit
5105830e2f
4 changed files with 32 additions and 18 deletions
|
@ -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,
|
||||
},
|
||||
]);
|
||||
});
|
||||
|
|
|
@ -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(),
|
||||
]);
|
||||
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Add table
Reference in a new issue