From 4fdd6f4d0cb977007e059d3b6d6b54200199bedf Mon Sep 17 00:00:00 2001 From: Eduard Heimbuch Date: Mon, 9 May 2022 09:41:59 +0200 Subject: [PATCH] Require password for creation of internal user (#2027) --- gradle/changelog/user_password.yaml | 2 ++ .../src/users/components/UserConverter.tsx | 8 ++++---- .../ui-webapp/src/users/components/UserForm.tsx | 15 ++++++++------- 3 files changed, 14 insertions(+), 11 deletions(-) create mode 100644 gradle/changelog/user_password.yaml diff --git a/gradle/changelog/user_password.yaml b/gradle/changelog/user_password.yaml new file mode 100644 index 0000000000..e50eaf1902 --- /dev/null +++ b/gradle/changelog/user_password.yaml @@ -0,0 +1,2 @@ +- type: fixed + description: Require password for internal user creation ([#2027](https://github.com/scm-manager/scm-manager/pull/2027)) diff --git a/scm-ui/ui-webapp/src/users/components/UserConverter.tsx b/scm-ui/ui-webapp/src/users/components/UserConverter.tsx index a30e98eda4..f691610ee2 100644 --- a/scm-ui/ui-webapp/src/users/components/UserConverter.tsx +++ b/scm-ui/ui-webapp/src/users/components/UserConverter.tsx @@ -32,7 +32,7 @@ import { Level, Modal, PasswordConfirmation, - SubmitButton + SubmitButton, } from "@scm-manager/ui-components"; type Props = { @@ -47,12 +47,12 @@ const UserConverter: FC = ({ user }) => { const { isLoading: isConvertingToInternal, error: convertingToInternalError, - convertToInternal + convertToInternal, } = useConvertToInternal(); const { isLoading: isConvertingToExternal, error: convertingToExternalError, - convertToExternal + convertToExternal, } = useConvertToExternal(); const error = convertingToExternalError || convertingToInternalError || undefined; const isLoading = isConvertingToExternal || isConvertingToInternal; @@ -114,7 +114,7 @@ const UserConverter: FC = ({ user }) => { password && passwordValid && convertToInternal(user, password)} loading={isLoading} - disabled={!passwordValid || isLoading} + disabled={!password || !passwordValid || isLoading} scrollToTop={false} label={t("userForm.modal.convertToInternal")} /> diff --git a/scm-ui/ui-webapp/src/users/components/UserForm.tsx b/scm-ui/ui-webapp/src/users/components/UserForm.tsx index 7c7b87c08a..6808f23a2c 100644 --- a/scm-ui/ui-webapp/src/users/components/UserForm.tsx +++ b/scm-ui/ui-webapp/src/users/components/UserForm.tsx @@ -31,7 +31,7 @@ import { PasswordConfirmation, SubmitButton, Subtitle, - validation as validator + validation as validator, } from "@scm-manager/ui-components"; import * as userValidator from "./userValidation"; @@ -50,7 +50,7 @@ const UserForm: FC = ({ submitForm, user, loading }) => { password: "", active: true, external: false, - _links: {} + _links: {}, }); const [mailValidationError, setMailValidationError] = useState(false); const [displayNameValidationError, setDisplayNameValidationError] = useState(false); @@ -91,6 +91,7 @@ const UserForm: FC = ({ submitForm, user, loading }) => { mailValidationError || displayNameValidationError || nameValidationError || + (userState && !userState.external && !userState.password) || !userState.displayName ); }; @@ -118,7 +119,7 @@ const UserForm: FC = ({ submitForm, user, loading }) => {
{ + onChange={(name) => { setNameValidationError(!!name && !validator.isNameValid(name)); setUserState({ ...userState, name }); }} @@ -144,7 +145,7 @@ const UserForm: FC = ({ submitForm, user, loading }) => {
{ + onChange={(displayName) => { setDisplayNameValidationError(!userValidator.isDisplayNameValid(displayName)); setUserState({ ...userState, displayName }); }} @@ -158,7 +159,7 @@ const UserForm: FC = ({ submitForm, user, loading }) => {
{ + onChange={(mail) => { setMailValidationError(!!mail && !validator.isMailValid(mail)); setUserState({ ...userState, mail }); }} @@ -176,7 +177,7 @@ const UserForm: FC = ({ submitForm, user, loading }) => {
setUserState({ ...userState, external })} + onChange={(external) => setUserState({ ...userState, external })} checked={userState.external} helpText={t("help.externalFlagHelpText")} /> @@ -191,7 +192,7 @@ const UserForm: FC = ({ submitForm, user, loading }) => {
setUserState({ ...userState, active })} + onChange={(active) => setUserState({ ...userState, active })} checked={userState ? userState.active : false} helpText={t("help.activeHelpText")} />