diff --git a/src/main/java/org/olat/core/commons/services/vfs/manager/VFSRepositoryServiceImpl.java b/src/main/java/org/olat/core/commons/services/vfs/manager/VFSRepositoryServiceImpl.java index 27f7e4f18b9d5494c8e64b56304de0b121749d22..6c2ad14c641776e1bb34a89fc7ba299d53b74bfd 100644 --- a/src/main/java/org/olat/core/commons/services/vfs/manager/VFSRepositoryServiceImpl.java +++ b/src/main/java/org/olat/core/commons/services/vfs/manager/VFSRepositoryServiceImpl.java @@ -350,6 +350,8 @@ public class VFSRepositoryServiceImpl implements VFSRepositoryService, GenericEv @Override public void deleteMetadata(VFSMetadata data) { + if(data == null) return; // nothing to do + List<VFSThumbnailMetadata> thumbnails = thumbnailDao.loadByMetadata(data); for(VFSThumbnailMetadata thumbnail:thumbnails) { VFSItem item = VFSManager.olatRootLeaf("/" + data.getRelativePath(), thumbnail.getFilename()); @@ -392,11 +394,13 @@ public class VFSRepositoryServiceImpl implements VFSRepositoryService, GenericEv if(item.canMeta() != VFSConstants.YES) return; VFSMetadataImpl metadata = (VFSMetadataImpl)getMetadataFor(item); - metadata.setDeleted(true); - if(item instanceof VFSLeaf && item.canVersion() == VFSConstants.YES) { - addToRevisions((VFSLeaf)item, metadata, author, "", true); + if(metadata != null) { // concurrent delete possible + metadata.setDeleted(true); + if(item instanceof VFSLeaf && item.canVersion() == VFSConstants.YES) { + addToRevisions((VFSLeaf)item, metadata, author, "", true); + } + metadataDao.updateMetadata(metadata); } - metadataDao.updateMetadata(metadata); } @Override diff --git a/src/test/java/org/olat/user/UserNameAndPasswordSyntaxCheckerWithRegexpTest.java b/src/test/java/org/olat/user/UserNameAndPasswordSyntaxCheckerWithRegexpTest.java index 8ac186f96499df318c9419becad751b067b9b749..6f821f2b2b09d7256bde3961ff8aa06c9d6b2da8 100644 --- a/src/test/java/org/olat/user/UserNameAndPasswordSyntaxCheckerWithRegexpTest.java +++ b/src/test/java/org/olat/user/UserNameAndPasswordSyntaxCheckerWithRegexpTest.java @@ -63,10 +63,34 @@ public class UserNameAndPasswordSyntaxCheckerWithRegexpTest { Assert.assertTrue(checker.syntaxCheckOlatPassword("Kanu#010")); Assert.assertTrue(checker.syntaxCheckOlatPassword("?Ryomou#010")); + Assert.assertTrue(checker.syntaxCheckOlatPassword("?Ryo ou#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")); } + + /** + * Min. 12 characters, at least one uppercase, one lowercase, one number and only + * alphanumeric characters allowed (no space, no underscore, no Umlaut) + */ + @Test + public void customPasswordCheck_upperLowerCase_number_noUmlaut() { + UserNameAndPasswordSyntaxCheckerWithRegexp checker = new UserNameAndPasswordSyntaxCheckerWithRegexp(); + checker.setPasswordRegExp("(?=^.{12,}$)(?=^[a-zA-Z0-9]+$)(?=.*[0-9])(?=.*[A-Z])(?=.*[a-z]).*$"); + + Assert.assertTrue(checker.syntaxCheckOlatPassword("Kanu1asdfghj")); + Assert.assertTrue(checker.syntaxCheckOlatPassword("KASD123DFGHJj")); + Assert.assertFalse(checker.syntaxCheckOlatPassword("Kanuhasdfghj")); + Assert.assertFalse(checker.syntaxCheckOlatPassword("kanu1asdfghj")); + Assert.assertFalse(checker.syntaxCheckOlatPassword("kanugasdfghj")); + Assert.assertFalse(checker.syntaxCheckOlatPassword("Kanu1as fghj")); + Assert.assertFalse(checker.syntaxCheckOlatPassword("Kanu1as_fghj")); + Assert.assertFalse(checker.syntaxCheckOlatPassword("kanugasdfgh")); + Assert.assertFalse(checker.syntaxCheckOlatPassword("JAHDFKL1DFSGJHG")); + Assert.assertFalse(checker.syntaxCheckOlatPassword("Kan\u00E41asdfghj")); + } + + }