diff --git a/src/main/java/org/olat/user/ChangePasswordForm.java b/src/main/java/org/olat/user/ChangePasswordForm.java index ae5e91417a45f961d566a3080d05bb5cadfcb638..9383ce8ebdf72809ff1c1ebf41fda2d5a017e2f1 100644 --- a/src/main/java/org/olat/user/ChangePasswordForm.java +++ b/src/main/java/org/olat/user/ChangePasswordForm.java @@ -33,6 +33,7 @@ import org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer; import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.Event; import org.olat.core.gui.control.WindowControl; +import org.springframework.beans.factory.annotation.Autowired; /** @@ -52,6 +53,9 @@ public class ChangePasswordForm extends FormBasicController { private String _oldpass = ""; private String _newpass = ""; + + @Autowired + private UserManager userManager; /** * @param name @@ -95,17 +99,23 @@ public class ChangePasswordForm extends FormBasicController { @Override protected boolean validateFormLogic (UserRequest ureq) { - if (!UserManager.getInstance().syntaxCheckOlatPassword(newpass1.getValue())) { + boolean allOk = true; + newpass1.clearError(); + newpass2.clearError(); + + if (!userManager.syntaxCheckOlatPassword(newpass1.getValue())) { newpass1.setErrorKey("form.checkPassword", null); - return false; + allOk &= false; } + if (!newpass1.getValue().equals(newpass2.getValue())) { newpass1.setValue(""); newpass2.setValue(""); newpass2.setErrorKey("error.password.nomatch", null); - return false; + allOk &= false; } - return true; + + return allOk & super.validateFormLogic(ureq); } @Override diff --git a/src/test/java/org/olat/user/UserNameAndPasswordSyntaxCheckerWithRegexpTest.java b/src/test/java/org/olat/user/UserNameAndPasswordSyntaxCheckerWithRegexpTest.java index c39d3d9230c1070af7f6d0b4c651c4c847ed2d6c..eb6ba5527b085090702c8f11fcdf04431a7477da 100644 --- a/src/test/java/org/olat/user/UserNameAndPasswordSyntaxCheckerWithRegexpTest.java +++ b/src/test/java/org/olat/user/UserNameAndPasswordSyntaxCheckerWithRegexpTest.java @@ -30,9 +30,11 @@ import org.junit.Test; */ public class UserNameAndPasswordSyntaxCheckerWithRegexpTest { + /** + * Min. 7 characters, one uppercase, one lowercase, one number + */ @Test - public void testCustom() { - //Min. 7 characters, one uppercase, one lowercase, one number + public void testCustomPasswordCheck_upperLowerCase_number() { UserNameAndPasswordSyntaxCheckerWithRegexp checker = new UserNameAndPasswordSyntaxCheckerWithRegexp(); checker.setPasswordRegExp("(?=^.{7,}$)((?=.*\\d)|(?=.*\\W+))(?![.\\n])(?=.*[A-Z])(?=.*[a-z]).*$"); @@ -41,4 +43,21 @@ public class UserNameAndPasswordSyntaxCheckerWithRegexpTest { Assert.assertFalse(checker.syntaxCheckOlatPassword("Kanu#1"));//less than 7 characters Assert.assertFalse(checker.syntaxCheckOlatPassword("Kanuunch"));//no number } + + /** + * Min. 8 characters, one uppercase, one lowercase, one number, one special character + */ + @Test + public void testCustomPasswordCheck_upperLowerCase_number_special() { + UserNameAndPasswordSyntaxCheckerWithRegexp checker = new UserNameAndPasswordSyntaxCheckerWithRegexp(); + checker.setPasswordRegExp("(?=^.{8,}$)((?=.*\\d)|(?=.*\\W+))(?![.\\n])(?=.*[A-Z])(?=.*[a-z])(?=.*[$@$!%*#?&]).*$"); + + Assert.assertTrue(checker.syntaxCheckOlatPassword("Kanu#010")); + Assert.assertTrue(checker.syntaxCheckOlatPassword("?Ryomou#010")); + + Assert.assertFalse(checker.syntaxCheckOlatPassword("Kanuunc1")); + Assert.assertFalse(checker.syntaxCheckOlatPassword("Kanu#10"));//less than 8 characters + Assert.assertFalse(checker.syntaxCheckOlatPassword("Kanuunch"));//no number + Assert.assertFalse(checker.syntaxCheckOlatPassword("kanu8#10")); + } }