diff --git a/scm-core/src/main/java/sonia/scm/user/User.java b/scm-core/src/main/java/sonia/scm/user/User.java index 3f0898d348..29ab1ba9c7 100644 --- a/scm-core/src/main/java/sonia/scm/user/User.java +++ b/scm-core/src/main/java/sonia/scm/user/User.java @@ -67,6 +67,12 @@ public class User extends BasicPropertiesAware implements Principal, ModelObject private String mail; private String name; private String password; + @Deprecated + /** + * @deprecated Use external instead. + * The user type is replaced by {@link external} flag + * Since 2.8.0 + */ private String type; public User(String name) { diff --git a/scm-ui/ui-webapp/src/users/components/UserForm.tsx b/scm-ui/ui-webapp/src/users/components/UserForm.tsx index 55729fe486..da231384b5 100644 --- a/scm-ui/ui-webapp/src/users/components/UserForm.tsx +++ b/scm-ui/ui-webapp/src/users/components/UserForm.tsx @@ -128,8 +128,8 @@ class UserForm extends React.Component { const { user, passwordValid } = this.state; event.preventDefault(); if (!this.isInvalid()) { - if (user.password && passwordValid) { - setPassword((user._links.password as Link).href, user.password).catch(); + if (user.password && passwordValid && user._links?.password) { + setPassword((user._links.password as Link).href, user.password).catch(error => this.setState({ error })); } this.props.submitForm(this.state.user); } @@ -177,10 +177,6 @@ class UserForm extends React.Component { subtitle = ; } - if (error) { - return ; - } - return ( <> {subtitle} @@ -232,6 +228,7 @@ class UserForm extends React.Component { )} + {error && } } /> diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserToUserDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserToUserDtoMapper.java index 761de187f1..d40adc8f47 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserToUserDtoMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserToUserDtoMapper.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + package sonia.scm.api.v2.resources; import de.otto.edison.hal.Embedded; @@ -66,9 +66,7 @@ public abstract class UserToUserDtoMapper extends BaseMapper { if (UserPermissions.modify(user).isPermitted()) { linksBuilder.single(link("update", resourceLinks.user().update(user.getName()))); linksBuilder.single(link("publicKeys", resourceLinks.user().publicKeys(user.getName()))); - if (userManager.isTypeDefault(user)) { - linksBuilder.single(link("password", resourceLinks.user().passwordChange(user.getName()))); - } + linksBuilder.single(link("password", resourceLinks.user().passwordChange(user.getName()))); } if (PermissionPermissions.read().isPermitted()) { linksBuilder.single(link("permissions", resourceLinks.userPermissions().permissions(user.getName()))); diff --git a/scm-webapp/src/main/java/sonia/scm/user/DefaultUserManager.java b/scm-webapp/src/main/java/sonia/scm/user/DefaultUserManager.java index b6bb822e5a..5bd15ee4be 100644 --- a/scm-webapp/src/main/java/sonia/scm/user/DefaultUserManager.java +++ b/scm-webapp/src/main/java/sonia/scm/user/DefaultUserManager.java @@ -389,7 +389,7 @@ public class DefaultUserManager extends AbstractUserManager if (user == null) { throw new NotFoundException(User.class, userId); } - if (!isTypeDefault(user) || isAnonymousUser(user)) { + if (isAnonymousUser(user)) { throw new ChangePasswordNotAllowedException(ContextEntry.ContextBuilder.entity("PasswordChange", "-").in(User.class, user.getName()), user.getType()); } user.setPassword(newPassword);