From cce723d12a0d2cd5a8a8a66474e7636bcd62d164 Mon Sep 17 00:00:00 2001 From: Xiao Yijun Date: Fri, 13 Jan 2023 12:37:33 +0800 Subject: [PATCH] refactor(console): do not allow spaces in the permission name (#2935) --- .../components/CreatePermissionModal/index.tsx | 13 +++++++++++-- .../admin-console/api-resource-details.ts | 1 + .../admin-console/api-resource-details.ts | 1 + .../admin-console/api-resource-details.ts | 1 + .../admin-console/api-resource-details.ts | 1 + .../admin-console/api-resource-details.ts | 1 + .../admin-console/api-resource-details.ts | 1 + .../admin-console/api-resource-details.ts | 1 + .../admin-console/api-resource-details.ts | 1 + packages/toolkit/core-kit/src/regex.ts | 1 + 10 files changed, 20 insertions(+), 2 deletions(-) diff --git a/packages/console/src/pages/ApiResourceDetails/ApiResourcePermissions/components/CreatePermissionModal/index.tsx b/packages/console/src/pages/ApiResourceDetails/ApiResourcePermissions/components/CreatePermissionModal/index.tsx index ad33ec86c..a78febb5c 100644 --- a/packages/console/src/pages/ApiResourceDetails/ApiResourcePermissions/components/CreatePermissionModal/index.tsx +++ b/packages/console/src/pages/ApiResourceDetails/ApiResourcePermissions/components/CreatePermissionModal/index.tsx @@ -1,3 +1,4 @@ +import { noSpaceRegEx } from '@logto/core-kit'; import type { Scope } from '@logto/schemas'; import { useForm } from 'react-hook-form'; import { useTranslation } from 'react-i18next'; @@ -22,7 +23,7 @@ const CreatePermissionModal = ({ resourceId, onClose }: Props) => { const { handleSubmit, register, - formState: { isSubmitting }, + formState: { isSubmitting, errors }, } = useForm(); const api = useApi(); @@ -70,7 +71,15 @@ const CreatePermissionModal = ({ resourceId, onClose }: Props) => { // eslint-disable-next-line jsx-a11y/no-autofocus autoFocus placeholder={t('api_resource_details.permission.name_placeholder')} - {...register('name', { required: true })} + {...register('name', { + required: true, + pattern: { + value: noSpaceRegEx, + message: t('api_resource_details.permission.forbidden_space_in_name'), + }, + })} + hasError={Boolean(errors.name)} + errorMessage={errors.name?.message} /> diff --git a/packages/phrases/src/locales/de/translation/admin-console/api-resource-details.ts b/packages/phrases/src/locales/de/translation/admin-console/api-resource-details.ts index 9df675df4..dcc223a32 100644 --- a/packages/phrases/src/locales/de/translation/admin-console/api-resource-details.ts +++ b/packages/phrases/src/locales/de/translation/admin-console/api-resource-details.ts @@ -18,6 +18,7 @@ const api_resource_details = { confirm_create: 'Create permission', // UNTRANSLATED name: 'Permission name', // UNTRANSLATED name_placeholder: 'Read:Resources', // UNTRANSLATED + forbidden_space_in_name: 'The permission name must not contain any spaces.', // UNTRANSLATED description: 'Description', // UNTRANSLATED description_placeholder: 'Able to read the resources', // UNTRANSLATED permission_created: 'The permission {{name}} has been successfully created', // UNTRANSLATED diff --git a/packages/phrases/src/locales/en/translation/admin-console/api-resource-details.ts b/packages/phrases/src/locales/en/translation/admin-console/api-resource-details.ts index bdb83ce7b..57a4d2b07 100644 --- a/packages/phrases/src/locales/en/translation/admin-console/api-resource-details.ts +++ b/packages/phrases/src/locales/en/translation/admin-console/api-resource-details.ts @@ -18,6 +18,7 @@ const api_resource_details = { confirm_create: 'Create permission', name: 'Permission name', name_placeholder: 'Read:Resources', + forbidden_space_in_name: 'The permission name must not contain any spaces.', description: 'Description', description_placeholder: 'Able to read the resources', permission_created: 'The permission {{name}} has been successfully created', diff --git a/packages/phrases/src/locales/fr/translation/admin-console/api-resource-details.ts b/packages/phrases/src/locales/fr/translation/admin-console/api-resource-details.ts index d6e1dce0d..ea09c8265 100644 --- a/packages/phrases/src/locales/fr/translation/admin-console/api-resource-details.ts +++ b/packages/phrases/src/locales/fr/translation/admin-console/api-resource-details.ts @@ -18,6 +18,7 @@ const api_resource_details = { confirm_create: 'Create permission', // UNTRANSLATED name: 'Permission name', // UNTRANSLATED name_placeholder: 'Read:Resources', // UNTRANSLATED + forbidden_space_in_name: 'The permission name must not contain any spaces.', // UNTRANSLATED description: 'Description', // UNTRANSLATED description_placeholder: 'Able to read the resources', // UNTRANSLATED permission_created: 'The permission {{name}} has been successfully created', // UNTRANSLATED diff --git a/packages/phrases/src/locales/ko/translation/admin-console/api-resource-details.ts b/packages/phrases/src/locales/ko/translation/admin-console/api-resource-details.ts index 9d4267ab1..7ad569ad3 100644 --- a/packages/phrases/src/locales/ko/translation/admin-console/api-resource-details.ts +++ b/packages/phrases/src/locales/ko/translation/admin-console/api-resource-details.ts @@ -18,6 +18,7 @@ const api_resource_details = { confirm_create: 'Create permission', // UNTRANSLATED name: 'Permission name', // UNTRANSLATED name_placeholder: 'Read:Resources', // UNTRANSLATED + forbidden_space_in_name: 'The permission name must not contain any spaces.', // UNTRANSLATED description: 'Description', // UNTRANSLATED description_placeholder: 'Able to read the resources', // UNTRANSLATED permission_created: 'The permission {{name}} has been successfully created', // UNTRANSLATED diff --git a/packages/phrases/src/locales/pt-br/translation/admin-console/api-resource-details.ts b/packages/phrases/src/locales/pt-br/translation/admin-console/api-resource-details.ts index 63fef2892..9c3e12349 100644 --- a/packages/phrases/src/locales/pt-br/translation/admin-console/api-resource-details.ts +++ b/packages/phrases/src/locales/pt-br/translation/admin-console/api-resource-details.ts @@ -18,6 +18,7 @@ const api_resource_details = { confirm_create: 'Create permission', // UNTRANSLATED name: 'Permission name', // UNTRANSLATED name_placeholder: 'Read:Resources', // UNTRANSLATED + forbidden_space_in_name: 'The permission name must not contain any spaces.', // UNTRANSLATED description: 'Description', // UNTRANSLATED description_placeholder: 'Able to read the resources', // UNTRANSLATED permission_created: 'The permission {{name}} has been successfully created', // UNTRANSLATED diff --git a/packages/phrases/src/locales/pt-pt/translation/admin-console/api-resource-details.ts b/packages/phrases/src/locales/pt-pt/translation/admin-console/api-resource-details.ts index 688df04f4..b6dc7bc0a 100644 --- a/packages/phrases/src/locales/pt-pt/translation/admin-console/api-resource-details.ts +++ b/packages/phrases/src/locales/pt-pt/translation/admin-console/api-resource-details.ts @@ -18,6 +18,7 @@ const api_resource_details = { confirm_create: 'Create permission', // UNTRANSLATED name: 'Permission name', // UNTRANSLATED name_placeholder: 'Read:Resources', // UNTRANSLATED + forbidden_space_in_name: 'The permission name must not contain any spaces.', // UNTRANSLATED description: 'Description', // UNTRANSLATED description_placeholder: 'Able to read the resources', // UNTRANSLATED permission_created: 'The permission {{name}} has been successfully created', // UNTRANSLATED diff --git a/packages/phrases/src/locales/tr-tr/translation/admin-console/api-resource-details.ts b/packages/phrases/src/locales/tr-tr/translation/admin-console/api-resource-details.ts index bace08c12..15facfff6 100644 --- a/packages/phrases/src/locales/tr-tr/translation/admin-console/api-resource-details.ts +++ b/packages/phrases/src/locales/tr-tr/translation/admin-console/api-resource-details.ts @@ -18,6 +18,7 @@ const api_resource_details = { confirm_create: 'Create permission', // UNTRANSLATED name: 'Permission name', // UNTRANSLATED name_placeholder: 'Read:Resources', // UNTRANSLATED + forbidden_space_in_name: 'The permission name must not contain any spaces.', // UNTRANSLATED description: 'Description', // UNTRANSLATED description_placeholder: 'Able to read the resources', // UNTRANSLATED permission_created: 'The permission {{name}} has been successfully created', // UNTRANSLATED diff --git a/packages/phrases/src/locales/zh-cn/translation/admin-console/api-resource-details.ts b/packages/phrases/src/locales/zh-cn/translation/admin-console/api-resource-details.ts index adaefe0f9..747aa87c3 100644 --- a/packages/phrases/src/locales/zh-cn/translation/admin-console/api-resource-details.ts +++ b/packages/phrases/src/locales/zh-cn/translation/admin-console/api-resource-details.ts @@ -18,6 +18,7 @@ const api_resource_details = { confirm_create: 'Create permission', // UNTRANSLATED name: 'Permission name', // UNTRANSLATED name_placeholder: 'Read:Resources', // UNTRANSLATED + forbidden_space_in_name: 'The permission name must not contain any spaces.', // UNTRANSLATED description: 'Description', // UNTRANSLATED description_placeholder: 'Able to read the resources', // UNTRANSLATED permission_created: 'The permission {{name}} has been successfully created', // UNTRANSLATED diff --git a/packages/toolkit/core-kit/src/regex.ts b/packages/toolkit/core-kit/src/regex.ts index 666a86729..49daf6471 100644 --- a/packages/toolkit/core-kit/src/regex.ts +++ b/packages/toolkit/core-kit/src/regex.ts @@ -6,3 +6,4 @@ export const webRedirectUriProtocolRegEx = /^https?:$/; export const mobileUriSchemeProtocolRegEx = /^[a-z][\d_a-z]*(\.[\d_a-z]+)+:$/; export const hexColorRegEx = /^#[\da-f]{3}([\da-f]{3})?$/i; export const dateRegex = /^\d{4}(-\d{2}){2}/; +export const noSpaceRegEx = /^\S+$/;