Skip to content

Commit ec646a0

Browse files
authored
refactor(console): change captcha policy to single switch (#7184)
1 parent 4d4ba90 commit ec646a0

File tree

6 files changed

+49
-94
lines changed

6 files changed

+49
-94
lines changed

Diff for: packages/console/src/pages/Security/RequiredFlows/index.module.scss renamed to packages/console/src/pages/Security/EnableCaptcha/index.module.scss

-4
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,3 @@
33
.container {
44
margin-top: _.unit(4);
55
}
6-
7-
.line {
8-
margin-top: _.unit(3);
9-
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import { type CaptchaPolicy, type SignInExperience } from '@logto/schemas';
2+
import { useEffect } from 'react';
3+
import { useFormContext } from 'react-hook-form';
4+
import { useTranslation } from 'react-i18next';
5+
import useSWR from 'swr';
6+
7+
import FormField from '@/ds-components/FormField';
8+
import Switch from '@/ds-components/Switch';
9+
import { type RequestError } from '@/hooks/use-api';
10+
11+
import styles from './index.module.scss';
12+
13+
function EnableCaptcha() {
14+
const { t } = useTranslation(undefined, { keyPrefix: 'admin_console' });
15+
const { register, reset } = useFormContext<CaptchaPolicy>();
16+
const { data, isLoading } = useSWR<SignInExperience, RequestError>('api/sign-in-exp');
17+
18+
useEffect(() => {
19+
if (data) {
20+
reset(data.captchaPolicy);
21+
}
22+
}, [data, reset]);
23+
24+
if (isLoading) {
25+
return null;
26+
}
27+
28+
return (
29+
<div className={styles.container}>
30+
<FormField title="security.bot_protection.enable_captcha">
31+
<div className={styles.line}>
32+
<Switch
33+
label={t('security.bot_protection.enable_captcha_description')}
34+
{...register('enabled')}
35+
/>
36+
</div>
37+
</FormField>
38+
</div>
39+
);
40+
}
41+
42+
export default EnableCaptcha;

Diff for: packages/console/src/pages/Security/RequiredFlows/index.tsx

-78
This file was deleted.

Diff for: packages/console/src/pages/Security/index.tsx

+3-5
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ import { trySubmitSafe } from '@/utils/form';
2222

2323
import CaptchaCard from './CaptchaCard';
2424
import CreateCaptchaForm from './CreateCaptchaForm';
25+
import EnableCaptcha from './EnableCaptcha';
2526
import Guide from './Guide';
26-
import RequiredFlows from './RequiredFlows';
2727
import styles from './index.module.scss';
2828
import useDataFetch from './use-data-fetch';
2929

@@ -34,9 +34,7 @@ function Security() {
3434
const { data, isLoading } = useDataFetch();
3535
const formMethods = useForm<CaptchaPolicy>({
3636
defaultValues: {
37-
signUp: false,
38-
signIn: false,
39-
forgotPassword: false,
37+
enabled: false,
4038
},
4139
mode: 'onBlur',
4240
});
@@ -103,7 +101,7 @@ function Security() {
103101
{data ? (
104102
<>
105103
<CaptchaCard captchaProvider={data} />
106-
<RequiredFlows />
104+
<EnableCaptcha />
107105
</>
108106
) : (
109107
<Button

Diff for: packages/phrases/src/locales/en/translation/admin-console/security.ts

+3-4
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,9 @@ const security = {
1212
add: 'Add CAPTCHA',
1313
},
1414
settings: 'Settings',
15-
captcha_required_flows: 'CAPTCHA required flows',
16-
sign_up: 'Sign up',
17-
sign_in: 'Sign in',
18-
forgot_password: 'Forgot password',
15+
enable_captcha: 'Enable CAPTCHA',
16+
enable_captcha_description:
17+
'Enable CAPTCHA verification for sign-up, sign-in, and password recovery flows.',
1918
},
2019
create_captcha: {
2120
setup_captcha: 'Setup CAPTCHA',

Diff for: packages/schemas/src/foundations/jsonb-types/sign-in-experience.ts

+1-3
Original file line numberDiff line numberDiff line change
@@ -231,9 +231,7 @@ export const customUiAssetsGuard = z.object({
231231
export type CustomUiAssets = z.infer<typeof customUiAssetsGuard>;
232232

233233
export const captchaPolicyGuard = z.object({
234-
signIn: z.boolean().optional(),
235-
signUp: z.boolean().optional(),
236-
forgotPassword: z.boolean().optional(),
234+
enabled: z.boolean().optional(),
237235
});
238236

239237
export type CaptchaPolicy = z.infer<typeof captchaPolicyGuard>;

0 commit comments

Comments
 (0)