0
Fork 0
mirror of https://github.com/logto-io/logto.git synced 2025-04-14 23:11:31 -05:00

feat(core,console,experience): remove sso dev guard (#5026)

* fix(console): fix lint

allow isDev tag always exist

* feat(core,console,experience): remove dev guard for SSO

remove dev guard for SSO

* fix(experience): polish comment

polish comment
This commit is contained in:
simeng-li 2023-12-04 15:11:28 +08:00 committed by GitHub
parent cdf5a22315
commit b8f4c07dd0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
11 changed files with 24 additions and 66 deletions

View file

@ -8,7 +8,6 @@ import { useContext, useMemo, useState } from 'react';
import Modal from 'react-modal';
import useSWR from 'swr';
import { isDevFeaturesEnabled } from '@/consts/env';
import { TenantsContext } from '@/contexts/TenantsProvider';
import DynamicT from '@/ds-components/DynamicT';
import ModalLayout from '@/ds-components/ModalLayout';
@ -55,12 +54,7 @@ function CreateConnectorForm({ onClose, isOpen: isFormOpen, type }: Props) {
}
const allGroups = getConnectorGroups<ConnectorFactoryResponse>(
factories
.filter(({ type: factoryType, isDemo }) => factoryType === type && !isDemo)
// TODO: should remove the `isDevFeaturesEnabled` when Enterprise SSO is ready.
// Hide the entrance of adding SAML social connectors, users should go to Enterprise SSO if they want to use SAML.
// Should not remove the SAML factory from GET /connector-factories API, since that could break the existing SAML connectors.
.filter(({ id }) => isDevFeaturesEnabled || id !== 'saml')
factories.filter(({ type: factoryType, isDemo }) => factoryType === type && !isDemo)
);
return allGroups

View file

@ -4,6 +4,6 @@ import { yes } from '@silverhand/essentials';
export const isProduction = process.env.NODE_ENV === 'production';
export const isCloud = yes(process.env.IS_CLOUD);
export const adminEndpoint = process.env.ADMIN_ENDPOINT;
// eslint-disable-next-line unicorn/prevent-abbreviations -- we love dev
// eslint-disable-next-line unicorn/prevent-abbreviations, import/no-unused-modules -- we love dev
export const isDevFeaturesEnabled =
!isProduction || yes(process.env.DEV_FEATURES_ENABLED) || yes(process.env.INTEGRATION_TEST);

View file

@ -16,7 +16,7 @@ import Role from '@/assets/icons/role.svg';
import SecurityLock from '@/assets/icons/security-lock.svg';
import EnterpriseSso from '@/assets/icons/single-sign-on.svg';
import Web from '@/assets/icons/web.svg';
import { isCloud, isDevFeaturesEnabled } from '@/consts/env';
import { isCloud } from '@/consts/env';
import useUserPreferences from '@/hooks/use-user-preferences';
type SidebarItem = {
@ -92,7 +92,6 @@ export const useSidebarMenuItems = (): {
{
Icon: EnterpriseSso,
title: 'enterprise_sso',
isHidden: !isDevFeaturesEnabled,
},
],
},

View file

@ -11,7 +11,7 @@ import {
ApplicationDetailsTabs,
EnterpriseSsoDetailsTabs,
} from '@/consts';
import { isCloud, isDevFeaturesEnabled } from '@/consts/env';
import { isCloud } from '@/consts/env';
import { TenantsContext } from '@/contexts/TenantsProvider';
import OverlayScrollbar from '@/ds-components/OverlayScrollbar';
import useUserPreferences from '@/hooks/use-user-preferences';
@ -117,19 +117,17 @@ function ConsoleContent() {
<Route path=":tab/guide/:factoryId" element={<Connectors />} />
<Route path=":tab/:connectorId" element={<ConnectorDetails />} />
</Route>
{isDevFeaturesEnabled && (
<Route path="enterprise-sso">
<Route index element={<EnterpriseSsoConnectors />} />
<Route path="create" element={<EnterpriseSsoConnectors />} />
<Route path=":ssoConnectorId">
<Route
index
element={<Navigate replace to={EnterpriseSsoDetailsTabs.Connection} />}
/>
<Route path=":tab" element={<EnterpriseSsoConnectorDetails />} />
</Route>
<Route path="enterprise-sso">
<Route index element={<EnterpriseSsoConnectors />} />
<Route path="create" element={<EnterpriseSsoConnectors />} />
<Route path=":ssoConnectorId">
<Route
index
element={<Navigate replace to={EnterpriseSsoDetailsTabs.Connection} />}
/>
<Route path=":tab" element={<EnterpriseSsoConnectorDetails />} />
</Route>
)}
</Route>
<Route path="webhooks">
<Route index element={<Webhooks />} />
<Route path="create" element={<Webhooks />} />

View file

@ -10,7 +10,6 @@ import { useOutletContext } from 'react-router-dom';
import DetailsForm from '@/components/DetailsForm';
import FormCard from '@/components/FormCard';
import UnsavedChangesAlertModal from '@/components/UnsavedChangesAlertModal';
import { isDevFeaturesEnabled } from '@/consts/env';
import CodeEditor from '@/ds-components/CodeEditor';
import FormField from '@/ds-components/FormField';
import TextInput from '@/ds-components/TextInput';
@ -153,11 +152,9 @@ function UserSettings() {
}}
/>
</FormField>
{isDevFeaturesEnabled && (
<FormField title="user_details.field_sso_connectors">
<UserSsoIdentities ssoIdentities={user.ssoIdentities ?? []} />
</FormField>
)}
<FormField title="user_details.field_sso_connectors">
<UserSsoIdentities ssoIdentities={user.ssoIdentities ?? []} />
</FormField>
<FormField title="user_details.mfa.field_name">
<UserMfaVerifications userId={user.id} />
</FormField>

View file

@ -65,11 +65,6 @@ export const createSignInExperienceLibrary = (
};
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 [];
}
const ssoConnectors = await getAvailableSsoConnectors();
return ssoConnectors.map(({ providerName, id, branding }): SsoConnectorMetadata => {

View file

@ -3,7 +3,6 @@ import type Router from 'koa-router';
import { type IRouterParamContext } from 'koa-router';
import { z } from 'zod';
import { EnvSet } from '#src/env-set/index.js';
import RequestError from '#src/errors/RequestError/index.js';
import { assignInteractionResults } from '#src/libraries/session.js';
import { type WithLogContext } from '#src/middleware/koa-audit-log.js';
@ -29,11 +28,6 @@ export default function singleSignOnRoutes<T extends IRouterParamContext>(
router: Router<unknown, WithInteractionDetailsContext<WithLogContext<T>>>,
tenant: TenantContext
) {
// FIXME: @simeng-li should remove this check after the feature is enabled in production
if (!EnvSet.values.isDevFeaturesEnabled) {
return;
}
const { provider, libraries, queries } = tenant;
const { ssoConnectors: ssoConnectorsLibrary } = libraries;

View file

@ -1,7 +1,6 @@
import { type SocialUserInfo } from '@logto/connector-kit';
import { type IdentifierPayload, type SignInExperience } from '@logto/schemas';
import { EnvSet } from '#src/env-set/index.js';
import RequestError from '#src/errors/RequestError/index.js';
import { type SsoConnectorLibrary } from '#src/libraries/sso-connector.js';
import assertThat from '#src/utils/assert-that.js';
@ -12,11 +11,6 @@ export const verifySsoOnlyEmailIdentifier = async (
identifier: IdentifierPayload | SocialUserInfo,
signInExperience: SignInExperience
) => {
// TODO: @simeng-li remove the dev features check when the SSO feature is released
if (!EnvSet.values.isDevFeaturesEnabled) {
return;
}
if (!('email' in identifier) || !identifier.email) {
return;
}

View file

@ -7,7 +7,6 @@ import { generateStandardShortId } from '@logto/shared';
import { conditional, assert } from '@silverhand/essentials';
import { z } from 'zod';
import { EnvSet } from '#src/env-set/index.js';
import RequestError from '#src/errors/RequestError/index.js';
import koaGuard from '#src/middleware/koa-guard.js';
import koaPagination from '#src/middleware/koa-pagination.js';
@ -29,11 +28,6 @@ import {
} from './utils.js';
export default function singleSignOnRoutes<T extends AuthedRouter>(...args: RouterInitArgs<T>) {
// FIXME: @simeng-li should remove this check after the feature is enabled in production
if (!EnvSet.values.isDevFeaturesEnabled) {
return;
}
const [
router,
{

View file

@ -8,10 +8,7 @@ import LoadingLayerProvider from './Providers/LoadingLayerProvider';
import PageContextProvider from './Providers/PageContextProvider';
import SettingsProvider from './Providers/SettingsProvider';
import SingleSignOnContextProvider from './Providers/SingleSignOnContextProvider';
import {
isDevFeaturesEnabled as isDevelopmentFeaturesEnabled,
singleSignOnPath,
} from './constants/env';
import { singleSignOnPath } from './constants/env';
import Callback from './pages/Callback';
import Consent from './pages/Consent';
import Continue from './pages/Continue';
@ -113,13 +110,11 @@ const App = () => {
<Route path="callback/:connectorId" element={<Callback />} />
</Route>
{/* Single sign on */}
{isDevelopmentFeaturesEnabled && (
<Route path={singleSignOnPath} element={<LoadingLayerProvider />}>
<Route path="email" element={<SingleSignOnEmail />} />
<Route path="connectors" element={<SingleSignOnConnectors />} />
</Route>
)}
{/* Single sign-on */}
<Route path={singleSignOnPath} element={<LoadingLayerProvider />}>
<Route path="email" element={<SingleSignOnEmail />} />
<Route path="connectors" element={<SingleSignOnConnectors />} />
</Route>
<Route path="*" element={<ErrorPage />} />
</Route>

View file

@ -5,7 +5,6 @@ import { useContext, useMemo } from 'react';
import { useTranslation } from 'react-i18next';
import PageContext from '@/Providers/PageContextProvider/PageContext';
import { isDevFeaturesEnabled } from '@/constants/env';
import { type VerificationCodeIdentifier } from '@/types';
export const useSieMethods = () => {
@ -25,8 +24,7 @@ export const useSieMethods = () => {
signInMode: experienceSettings?.signInMode,
forgotPassword: experienceSettings?.forgotPassword,
customContent: experienceSettings?.customContent,
// TODO: remove the dev feature check once SSO is ready
singleSignOnEnabled: isDevFeaturesEnabled && experienceSettings?.singleSignOnEnabled,
singleSignOnEnabled: experienceSettings?.singleSignOnEnabled,
};
};