diff --git a/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/impl/WebServiceAdmin.java b/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/impl/WebServiceAdmin.java index 80b9e6f206..7ee943724e 100644 --- a/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/impl/WebServiceAdmin.java +++ b/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/impl/WebServiceAdmin.java @@ -51,6 +51,7 @@ import org.jkiss.dbeaver.model.secret.DBSSecretController; import org.jkiss.dbeaver.model.security.*; import org.jkiss.dbeaver.model.security.user.SMTeam; import org.jkiss.dbeaver.model.security.user.SMUser; +import org.jkiss.dbeaver.utils.GeneralUtils; import org.jkiss.utils.CommonUtils; import java.text.MessageFormat; @@ -162,6 +163,11 @@ public class WebServiceAdmin implements DBWServiceAdmin { throw new DBWebException("Empty user name"); } String userId = userName.toLowerCase(); + try { + GeneralUtils.validateResourceNameUnconditionally(userId); + } catch (DBException e) { + throw new DBWebException(e.getMessage(), e); + } webSession.addInfoMessage("Create new user - " + userId); try { @@ -223,6 +229,12 @@ public class WebServiceAdmin implements DBWServiceAdmin { if (user == null) { throw new DBWebException("Admin user is not found"); } + try { + GeneralUtils.validateResourceNameUnconditionally(teamId); + } catch (DBException e) { + throw new DBWebException(e.getMessage(), e); + } + webSession.addInfoMessage("Create new team - " + teamId); try { SMTeam newTeam = webSession.getAdminSecurityController().createTeam( diff --git a/webapp/packages/plugin-authentication-administration/src/Administration/Users/Teams/TeamsForm/Options/TeamOptions.tsx b/webapp/packages/plugin-authentication-administration/src/Administration/Users/Teams/TeamsForm/Options/TeamOptions.tsx index 3fe96e2d23..4936bf3e0f 100644 --- a/webapp/packages/plugin-authentication-administration/src/Administration/Users/Teams/TeamsForm/Options/TeamOptions.tsx +++ b/webapp/packages/plugin-authentication-administration/src/Administration/Users/Teams/TeamsForm/Options/TeamOptions.tsx @@ -1,13 +1,13 @@ /* * CloudBeaver - Cloud Database Manager - * Copyright (C) 2020-2024 DBeaver Corp and others + * Copyright (C) 2020-2025 DBeaver Corp and others * * Licensed under the Apache License, Version 2.0. * you may not use this file except in compliance with the License. */ import { observer } from 'mobx-react-lite'; -import { Container, Group, InputField, Textarea, useAutoLoad, useResource, useTranslate } from '@cloudbeaver/core-blocks'; +import { Container, Group, InputField, Textarea, useAutoLoad, useCustomInputValidation, useResource, useTranslate } from '@cloudbeaver/core-blocks'; import { ServerConfigResource } from '@cloudbeaver/core-root'; import { type TabContainerPanelComponent, useTab, useTabState } from '@cloudbeaver/core-ui'; @@ -15,6 +15,7 @@ import type { TeamFormProps } from '../TeamsAdministrationFormService.js'; import { Permissions } from './Permissions.js'; import { TeamMetaParameters } from './TeamMetaParameters.js'; import type { TeamOptionsFormPart } from './TeamOptionsFormPart.js'; +import { ENTITY_ID_VALIDATION } from '../../../shared/ENTITY_ID_VALIDATION.js'; export const TeamOptions: TabContainerPanelComponent = observer(function TeamOptions({ formState, tabId }) { const serverConfigResource = useResource(TeamOptions, ServerConfigResource, undefined); @@ -26,10 +27,18 @@ export const TeamOptions: TabContainerPanelComponent = observer(f useAutoLoad(TeamOptions, tabState, tab.selected && !loaded); + const idValidationRef = useCustomInputValidation(value => { + if (!value.match(ENTITY_ID_VALIDATION)) { + return translate('plugin_authentication_administration_team_id_validation_error'); + } + + return null; + }); + return ( - + {translate('administration_teams_team_id')} diff --git a/webapp/packages/plugin-authentication-administration/src/Administration/Users/UserForm/Info/UserFormInfoCredentials.tsx b/webapp/packages/plugin-authentication-administration/src/Administration/Users/UserForm/Info/UserFormInfoCredentials.tsx index c5136b7564..392284e6db 100644 --- a/webapp/packages/plugin-authentication-administration/src/Administration/Users/UserForm/Info/UserFormInfoCredentials.tsx +++ b/webapp/packages/plugin-authentication-administration/src/Administration/Users/UserForm/Info/UserFormInfoCredentials.tsx @@ -1,6 +1,6 @@ /* * CloudBeaver - Cloud Database Manager - * Copyright (C) 2020-2024 DBeaver Corp and others + * Copyright (C) 2020-2025 DBeaver Corp and others * * Licensed under the Apache License, Version 2.0. * you may not use this file except in compliance with the License. @@ -22,6 +22,7 @@ import { isValuesEqual } from '@cloudbeaver/core-utils'; import type { UserFormProps } from '../AdministrationUserFormService.js'; import type { UserFormInfoPart } from './UserFormInfoPart.js'; +import { ENTITY_ID_VALIDATION } from '../../shared/ENTITY_ID_VALIDATION.js'; const PASSWORD_PLACEHOLDER = '••••••'; @@ -44,6 +45,14 @@ export const UserFormInfoCredentials = observer(function UserFormInfoCred local = !editing || (!!userInfo.data && isLocalUser(userInfo.data)); } + const usernameValidationRef = useCustomInputValidation(value => { + if (!value.match(ENTITY_ID_VALIDATION)) { + return translate('plugin_authentication_administration_user_username_validation_error'); + } + + return null; + }); + const passwordRepeatRef = useCustomInputValidation(value => { if (!isValuesEqual(value, tabState.state.password, null)) { return translate('authentication_user_passwords_not_match'); @@ -55,6 +64,7 @@ export const UserFormInfoCredentials = observer(function UserFormInfoCred {translate('authentication_user_credentials')} |?*]+$/u; diff --git a/webapp/packages/plugin-authentication-administration/src/locales/en.ts b/webapp/packages/plugin-authentication-administration/src/locales/en.ts index 81d509de95..a1def90ca9 100644 --- a/webapp/packages/plugin-authentication-administration/src/locales/en.ts +++ b/webapp/packages/plugin-authentication-administration/src/locales/en.ts @@ -138,4 +138,13 @@ export default [ ['plugin_authentication_administration_team_form_edit_label', 'Team editing form'], ['plugin_authentication_administration_user_form_edit_label', 'User editing form'], + + [ + 'plugin_authentication_administration_user_username_validation_error', + "User's name may not contain the following symbols / : \" \\ ' <> | ? * and can't start with a dot", + ], + [ + 'plugin_authentication_administration_team_id_validation_error', + "Team's ID may not contain the following symbols / : \" \\ ' <> | ? * and can't start with a dot", + ], ]; diff --git a/webapp/packages/plugin-authentication-administration/src/locales/fr.ts b/webapp/packages/plugin-authentication-administration/src/locales/fr.ts index b814c2c2d6..07ba216043 100644 --- a/webapp/packages/plugin-authentication-administration/src/locales/fr.ts +++ b/webapp/packages/plugin-authentication-administration/src/locales/fr.ts @@ -127,4 +127,13 @@ export default [ ], ['plugin_authentication_administration_team_form_edit_label', 'Team editing form'], ['plugin_authentication_administration_user_form_edit_label', 'User editing form'], + + [ + 'plugin_authentication_administration_user_username_validation_error', + "User's name may not contain the following symbols / : \" \\ ' <> | ? * and can't start with a dot", + ], + [ + 'plugin_authentication_administration_team_id_validation_error', + "Team's ID may not contain the following symbols / : \" \\ ' <> | ? * and can't start with a dot", + ], ]; diff --git a/webapp/packages/plugin-authentication-administration/src/locales/it.ts b/webapp/packages/plugin-authentication-administration/src/locales/it.ts index e38ee293bf..8a7ebaa986 100644 --- a/webapp/packages/plugin-authentication-administration/src/locales/it.ts +++ b/webapp/packages/plugin-authentication-administration/src/locales/it.ts @@ -85,4 +85,13 @@ export default [ ['plugin_authentication_administration_team_form_edit_label', 'Team editing form'], ['plugin_authentication_administration_user_form_edit_label', 'User editing form'], + + [ + 'plugin_authentication_administration_user_username_validation_error', + "User's name may not contain the following symbols / : \" \\ ' <> | ? * and can't start with a dot", + ], + [ + 'plugin_authentication_administration_team_id_validation_error', + "Team's ID may not contain the following symbols / : \" \\ ' <> | ? * and can't start with a dot", + ], ]; diff --git a/webapp/packages/plugin-authentication-administration/src/locales/ru.ts b/webapp/packages/plugin-authentication-administration/src/locales/ru.ts index 2d8a2b23a3..b8141837d2 100644 --- a/webapp/packages/plugin-authentication-administration/src/locales/ru.ts +++ b/webapp/packages/plugin-authentication-administration/src/locales/ru.ts @@ -146,4 +146,13 @@ export default [ ['plugin_authentication_administration_team_form_edit_label', 'Форма редактирования команды'], ['plugin_authentication_administration_user_form_edit_label', 'Форма редактирования пользователя'], + + [ + 'plugin_authentication_administration_user_username_validation_error', + 'Имя пользователя не может содержать следующие символы / : " \\ \' <> | ? * и не может начинаться с точки', + ], + [ + 'plugin_authentication_administration_team_id_validation_error', + 'ID команды не может содержать следующие символы / : " \\ \' <> | ? * и не может начинаться с точки', + ], ]; diff --git a/webapp/packages/plugin-authentication-administration/src/locales/vi.ts b/webapp/packages/plugin-authentication-administration/src/locales/vi.ts index 71bef04fe9..1c102ada45 100644 --- a/webapp/packages/plugin-authentication-administration/src/locales/vi.ts +++ b/webapp/packages/plugin-authentication-administration/src/locales/vi.ts @@ -136,4 +136,13 @@ export default [ ], ['plugin_authentication_administration_team_form_edit_label', 'Biểu mẫu chỉnh sửa nhóm'], ['plugin_authentication_administration_user_form_edit_label', 'Biểu mẫu chỉnh sửa người dùng'], + + [ + 'plugin_authentication_administration_user_username_validation_error', + "User's name may not contain the following symbols / : \" \\ ' <> | ? * and can't start with a dot", + ], + [ + 'plugin_authentication_administration_team_id_validation_error', + "Team's ID may not contain the following symbols / : \" \\ ' <> | ? * and can't start with a dot", + ], ]; diff --git a/webapp/packages/plugin-authentication-administration/src/locales/zh.ts b/webapp/packages/plugin-authentication-administration/src/locales/zh.ts index 98f5ab76ed..f93843625c 100644 --- a/webapp/packages/plugin-authentication-administration/src/locales/zh.ts +++ b/webapp/packages/plugin-authentication-administration/src/locales/zh.ts @@ -117,4 +117,13 @@ export default [ ['plugin_authentication_administration_team_form_edit_label', 'Team editing form'], ['plugin_authentication_administration_user_form_edit_label', 'User editing form'], + + [ + 'plugin_authentication_administration_user_username_validation_error', + "User's name may not contain the following symbols / : \" \\ ' <> | ? * and can't start with a dot", + ], + [ + 'plugin_authentication_administration_team_id_validation_error', + "Team's ID may not contain the following symbols / : \" \\ ' <> | ? * and can't start with a dot", + ], ];