diff --git a/src/main/java/org/olat/repository/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/repository/_i18n/LocalStrings_de.properties index 201a66dbf3310db643adbc1245c746f3b7750d7b..ced60bd9b6321436b007d8c91c475c4db3876470 100644 --- a/src/main/java/org/olat/repository/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/repository/_i18n/LocalStrings_de.properties @@ -219,6 +219,7 @@ details.delete.acknowledge=Best\u00E4tigung details.delete.acknowledge.error=Bitte best\u00E4tigen. details.delete.acknowledge.msg=Alle Dateien werden definitiv gel\u00F6scht und k\u00F6nnen nicht mehr wiederhergestellt werden. details.delete.alt={0} l\u00F6schen +details.delete.soft.acknowledge.msg=Die Lernressource wird als gel\u00F6scht markiert. details.delete.soft.desc=Mit dieser Funktion wird die Lernressource als gel\u00F6scht markiert. details.delete.soft.desc.1=Die Benutzerdaten werden aus dem Kurs entfernt. details.delete.soft.desc.2=Nur noch der Kursbesitzer hat Zugriff auf den Kurs. diff --git a/src/main/java/org/olat/repository/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/repository/_i18n/LocalStrings_en.properties index 35cafd4371d8638bd38325f0abc3fb51a20588f2..9cbc82dc5c55f3b53af72b1cca8cb81fe451c8fd 100644 --- a/src/main/java/org/olat/repository/_i18n/LocalStrings_en.properties +++ b/src/main/java/org/olat/repository/_i18n/LocalStrings_en.properties @@ -223,6 +223,7 @@ details.delete.managed=managed details.delete.notOrphan=still referenced details.delete.notOwner=not owner details.delete.references=Do you wish to delete the referenced learning resources too? +details.delete.soft.acknowledge.msg=The learning resource will be marked as deleted. details.delete.soft.auto.desc=<strong>The course will be automatically deleted at {0}.</strong> details.delete.soft.desc=Using this method the learning resource will be marked as deleted. details.delete.soft.desc.1=The user data will be removed from the course. diff --git a/src/main/java/org/olat/repository/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/repository/_i18n/LocalStrings_fr.properties index 88d5f31e7de1ba9e7ca6cf9fcd7a20e653603e01..1fea6fd1aadd2e7cc3acbf88a8c5c64bb4b2b917 100644 --- a/src/main/java/org/olat/repository/_i18n/LocalStrings_fr.properties +++ b/src/main/java/org/olat/repository/_i18n/LocalStrings_fr.properties @@ -223,6 +223,7 @@ details.delete.managed=managed details.delete.notOrphan=encore r\u00E9f\u00E9renc\u00E9 details.delete.notOwner=pas propri\u00E9taire details.delete.references=Voulez-vous effacer les objects didactiques r\u00E9f\u00E9renc\u00E9s par cette resource? +details.delete.soft.acknowledge.msg=La ressource didactique sera marqu\u00E9e comme effac\u00E9e. details.delete.soft.auto.desc=<strong>Le cours sera automatiquement effac\u00E9 le {0}.</strong> details.delete.soft.desc=Avec cette fonction, la ressource didactique sera marqu\u00E9e comme effac\u00E9e. details.delete.soft.desc.1=Les donn\u00E9es utilisateurs du cours seront effac\u00E9es. diff --git a/src/main/java/org/olat/repository/ui/author/ConfirmDeleteSoftlyController.java b/src/main/java/org/olat/repository/ui/author/ConfirmDeleteSoftlyController.java index 8b685ada8189cc9091759c941470e0bc611120ef..5a521134753374c681f3f062075fbf04100cadd2 100644 --- a/src/main/java/org/olat/repository/ui/author/ConfirmDeleteSoftlyController.java +++ b/src/main/java/org/olat/repository/ui/author/ConfirmDeleteSoftlyController.java @@ -104,7 +104,7 @@ public class ConfirmDeleteSoftlyController extends FormBasicController { } uifactory.addStaticTextElement("rows", "details.delete.entries", message.toString(), layoutCont); - String[] acknowledge = new String[] { translate("details.delete.acknowledge.msg") }; + String[] acknowledge = new String[] { translate("details.delete.soft.acknowledge.msg") }; acknowledgeEl = uifactory.addCheckboxesHorizontal("confirm", "details.delete.acknowledge", layoutCont, new String[]{ "" }, acknowledge); FormLayoutContainer buttonsCont = FormLayoutContainer.createButtonLayout("buttons", getTranslator()); 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")); + } }