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,
|
wellConfiguredSsoConnector,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
const fullSignInExperience = await getFullSignInExperience();
|
const fullSignInExperience = await getFullSignInExperience('en');
|
||||||
|
const connectorFactory = ssoConnectorFactories[wellConfiguredSsoConnector.providerName];
|
||||||
|
|
||||||
expect(fullSignInExperience).toStrictEqual({
|
expect(fullSignInExperience).toStrictEqual({
|
||||||
...mockSignInExperience,
|
...mockSignInExperience,
|
||||||
|
@ -159,9 +160,9 @@ describe('getFullSignInExperience()', () => {
|
||||||
ssoConnectors: [
|
ssoConnectors: [
|
||||||
{
|
{
|
||||||
id: wellConfiguredSsoConnector.id,
|
id: wellConfiguredSsoConnector.id,
|
||||||
connectorName: wellConfiguredSsoConnector.providerName,
|
connectorName: connectorFactory.name.en,
|
||||||
logo: ssoConnectorFactories[wellConfiguredSsoConnector.providerName].logo,
|
logo: connectorFactory.logo,
|
||||||
darkLogo: ssoConnectorFactories[wellConfiguredSsoConnector.providerName].logoDark,
|
darkLogo: connectorFactory.logoDark,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
isDevelopmentTenant: false,
|
isDevelopmentTenant: false,
|
||||||
|
@ -178,14 +179,16 @@ describe('get sso connectors', () => {
|
||||||
wellConfiguredSsoConnector,
|
wellConfiguredSsoConnector,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
const { ssoConnectors } = await getFullSignInExperience();
|
const { ssoConnectors } = await getFullSignInExperience('jp');
|
||||||
|
|
||||||
|
const connectorFactory = ssoConnectorFactories[wellConfiguredSsoConnector.providerName];
|
||||||
|
|
||||||
expect(ssoConnectors).toEqual([
|
expect(ssoConnectors).toEqual([
|
||||||
{
|
{
|
||||||
id: wellConfiguredSsoConnector.id,
|
id: wellConfiguredSsoConnector.id,
|
||||||
connectorName: wellConfiguredSsoConnector.providerName,
|
connectorName: connectorFactory.name.en,
|
||||||
logo: ssoConnectorFactories[wellConfiguredSsoConnector.providerName].logo,
|
logo: connectorFactory.logo,
|
||||||
darkLogo: ssoConnectorFactories[wellConfiguredSsoConnector.providerName].logoDark,
|
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([
|
expect(ssoConnectors).toEqual([
|
||||||
{
|
{
|
||||||
id: wellConfiguredSsoConnector.id,
|
id: wellConfiguredSsoConnector.id,
|
||||||
connectorName: displayName,
|
connectorName: displayName,
|
||||||
logo: ssoConnectorFactories[wellConfiguredSsoConnector.providerName].logo,
|
logo: connectorFactory.logo,
|
||||||
darkLogo: ssoConnectorFactories[wellConfiguredSsoConnector.providerName].logoDark,
|
darkLogo: connectorFactory.logoDark,
|
||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
|
|
|
@ -11,6 +11,7 @@ import { ssoConnectorFactories } from '#src/sso/index.js';
|
||||||
import type Queries from '#src/tenants/Queries.js';
|
import type Queries from '#src/tenants/Queries.js';
|
||||||
import assertThat from '#src/utils/assert-that.js';
|
import assertThat from '#src/utils/assert-that.js';
|
||||||
import { getTenantSubscriptionPlan } from '#src/utils/subscription/index.js';
|
import { getTenantSubscriptionPlan } from '#src/utils/subscription/index.js';
|
||||||
|
import { isKeyOfI18nPhrases } from '#src/utils/translation.js';
|
||||||
|
|
||||||
import { type CloudConnectionLibrary } from '../cloud-connection.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
|
// TODO: @simeng-li Remove the dev feature check once SSO is fully released
|
||||||
if (!EnvSet.values.isDevFeaturesEnabled) {
|
if (!EnvSet.values.isDevFeaturesEnabled) {
|
||||||
return [];
|
return [];
|
||||||
|
@ -73,13 +74,17 @@ export const createSignInExperienceLibrary = (
|
||||||
|
|
||||||
return ssoConnectors.map(({ providerName, id, branding }): SsoConnectorMetadata => {
|
return ssoConnectors.map(({ providerName, id, branding }): SsoConnectorMetadata => {
|
||||||
const factory = ssoConnectorFactories[providerName];
|
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 {
|
return {
|
||||||
id,
|
id,
|
||||||
// Use the provider name as the connector name if the branding displayName is not provided
|
// Use the provider name as the connector name if the branding displayName is not provided
|
||||||
connectorName: branding.displayName ?? providerName,
|
connectorName: branding.displayName ?? providerNameInLocale,
|
||||||
logo: branding.logo ?? factory.logo,
|
logo: branding.logo ?? logo,
|
||||||
darkLogo: branding.darkLogo ?? factory.logoDark,
|
darkLogo: branding.darkLogo ?? logoDark,
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
@ -105,12 +110,12 @@ export const createSignInExperienceLibrary = (
|
||||||
return plan.id === developmentTenantPlanId;
|
return plan.id === developmentTenantPlanId;
|
||||||
};
|
};
|
||||||
|
|
||||||
const getFullSignInExperience = async (): Promise<FullSignInExperience> => {
|
const getFullSignInExperience = async (locale: string): Promise<FullSignInExperience> => {
|
||||||
const [signInExperience, logtoConnectors, ssoConnectors, isDevelopmentTenant] =
|
const [signInExperience, logtoConnectors, ssoConnectors, isDevelopmentTenant] =
|
||||||
await Promise.all([
|
await Promise.all([
|
||||||
findDefaultSignInExperience(),
|
findDefaultSignInExperience(),
|
||||||
getLogtoConnectors(),
|
getLogtoConnectors(),
|
||||||
getActiveSsoConnectors(),
|
getActiveSsoConnectors(locale),
|
||||||
getIsDevelopmentTenant(),
|
getIsDevelopmentTenant(),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
|
|
@ -44,7 +44,7 @@ export default function wellKnownRoutes<T extends AnonymousRouter>(
|
||||||
'/.well-known/sign-in-exp',
|
'/.well-known/sign-in-exp',
|
||||||
koaGuard({ response: guardFullSignInExperience, status: 200 }),
|
koaGuard({ response: guardFullSignInExperience, status: 200 }),
|
||||||
async (ctx, next) => {
|
async (ctx, next) => {
|
||||||
ctx.body = await getFullSignInExperience();
|
ctx.body = await getFullSignInExperience(ctx.locale);
|
||||||
|
|
||||||
return next();
|
return next();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
import { type I18nPhrases } from '@logto/connector-kit';
|
||||||
import type { Translation } from '@logto/schemas';
|
import type { Translation } from '@logto/schemas';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -23,3 +24,6 @@ export const isStrictlyPartial = (
|
||||||
return typeof fullValue === typeof value;
|
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