Skip to content

Commit 2ccd2ac

Browse files
authored
fix(console): normalize scope textarea input to single-space string in Social and Enterprise SSO connectors (#7658)
* fix(console): fix scope input field fix scope input field * chore: fix typo fix typo
1 parent 2be4f1b commit 2ccd2ac

File tree

3 files changed

+27
-1
lines changed

3 files changed

+27
-1
lines changed

packages/console/src/components/ConnectorForm/ConfigForm/ConfigFormFields/index.tsx

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import type { ConnectorConfigFormItem } from '@logto/connector-kit';
22
import { ConnectorConfigFormItemType } from '@logto/connector-kit';
3+
import { conditional } from '@silverhand/essentials';
34
import { useCallback } from 'react';
45
import { Controller, useFormContext } from 'react-hook-form';
56
import { useTranslation } from 'react-i18next';
@@ -14,6 +15,7 @@ import Switch from '@/ds-components/Switch';
1415
import TextInput from '@/ds-components/TextInput';
1516
import Textarea from '@/ds-components/Textarea';
1617
import type { ConnectorFormType } from '@/types/connector';
18+
import { formatMultiLineScopeInput } from '@/utils/connector-form';
1719
import { jsonValidator } from '@/utils/validator';
1820

1921
import styles from './index.module.scss';
@@ -65,6 +67,13 @@ function ConfigFormFields({ formItems }: Props) {
6567
...register(`formConfig.${item.key}`, {
6668
required: item.required,
6769
valueAsNumber: item.type === ConnectorConfigFormItemType.Number,
70+
...conditional(
71+
// For `scope` input field using multiline text, we need to format the input value.
72+
item.key === 'scope' &&
73+
item.type === ConnectorConfigFormItemType.MultilineText && {
74+
setValueAs: (value) => formatMultiLineScopeInput(String(value)),
75+
}
76+
),
6877
}),
6978
placeholder: item.placeholder,
7079
error,

packages/console/src/pages/EnterpriseSsoDetails/Connection/OidcMetadataForm/index.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import InlineNotification from '@/ds-components/InlineNotification';
88
import Switch from '@/ds-components/Switch';
99
import TextInput from '@/ds-components/TextInput';
1010
import Textarea from '@/ds-components/Textarea';
11+
import { formatMultiLineScopeInput } from '@/utils/connector-form';
1112
import { uriValidator } from '@/utils/validator';
1213

1314
import { type OidcConnectorConfig, type OidcProviderConfig } from '../../types/oidc';
@@ -85,7 +86,9 @@ function OidcMetadataForm({ providerConfig, config, providerName }: Props) {
8586
<FormField title="enterprise_sso.metadata.oidc.scope_field_name">
8687
<Textarea
8788
rows={5}
88-
{...register('scope')}
89+
{...register('scope', {
90+
setValueAs: (value) => formatMultiLineScopeInput(String(value)),
91+
})}
8992
error={Boolean(errors.scope)}
9093
placeholder={t('enterprise_sso.metadata.oidc.scope_field_placeholder')}
9194
/>

packages/console/src/utils/connector-form.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,3 +109,17 @@ export const convertFactoryResponseToForm = (
109109
enableTokenStorage: false,
110110
};
111111
};
112+
113+
/**
114+
* `scope` should be stored as a string with space-separated values.
115+
* In some pages like Social connector form and Enterprise SSO connector form,
116+
* we use Textarea to allow multi-line input, which allows users to input scopes in multiple lines.
117+
* To prevent the scopes from being stored with newlines,
118+
* we need to remove any newlines and trim the values before storing.
119+
**/
120+
export const formatMultiLineScopeInput = (value: string) =>
121+
value
122+
.split(/\r?\n/)
123+
.map((line) => line.trim())
124+
.filter(Boolean)
125+
.join(' ');

0 commit comments

Comments
 (0)