diff --git a/file-repository-core/pom.xml b/file-repository-core/pom.xml index 4915a52acd9492c33261fede6b8a0f72c175bf6a..7394e5fcd0da6a01e3901e2fde94cbbf9973d275 100644 --- a/file-repository-core/pom.xml +++ b/file-repository-core/pom.xml @@ -125,6 +125,13 @@ ${spring.security.version} + + org.springframework.security + spring-security-test + ${spring.security.version} + test + + org.springframework spring-test @@ -132,6 +139,13 @@ test + + javax.inject + javax.inject + 1 + test + + org.springframework.data spring-data-jpa diff --git a/file-repository-core/src/main/java/org/genesys/filerepository/migration/RepositoryUpgrade20180920.java b/file-repository-core/src/main/java/org/genesys/filerepository/migration/RepositoryUpgrade20180920.java index e9ba854af1f124bb97855968973b6bfd352e4c92..c3ecf02e1e8fa19b05f2d981d51aeb231624c322 100644 --- a/file-repository-core/src/main/java/org/genesys/filerepository/migration/RepositoryUpgrade20180920.java +++ b/file-repository-core/src/main/java/org/genesys/filerepository/migration/RepositoryUpgrade20180920.java @@ -19,9 +19,11 @@ import java.nio.file.Path; import java.nio.file.Paths; import java.util.List; +import org.genesys.filerepository.model.ImageGallery; import org.genesys.filerepository.model.QRepositoryFile; import org.genesys.filerepository.model.RepositoryFile; import org.genesys.filerepository.model.RepositoryFolder; +import org.genesys.filerepository.persistence.ImageGalleryPersistence; import org.genesys.filerepository.persistence.RepositoryFilePersistence; import org.genesys.filerepository.service.RepositoryService; import org.slf4j.Logger; @@ -56,6 +58,9 @@ public class RepositoryUpgrade20180920 { @Autowired private RepositoryService repositoryService; + + @Autowired + private ImageGalleryPersistence imagegalleryRepository; @Autowired private JPAQueryFactory jpaQueryFactory; @@ -83,6 +88,18 @@ public class RepositoryUpgrade20180920 { } } }); + + + tmpl.execute(new TransactionCallbackWithoutResult() { + @Override + protected void doInTransactionWithoutResult(TransactionStatus status) { + try { + migrateImageGalleries(); + } catch (Throwable e) { + LOG.error("Could not migrate 1.0 to 1.1 model: {}", e.getMessage(), e); + } + } + }); } /** @@ -141,4 +158,29 @@ public class RepositoryUpgrade20180920 { LOG.warn("\n\n\t** All repository files have been moved to proper folders **\n\t You can remove the {} bean.\n\n", this.getClass().getName()); } } + + /** + * Do the migration. + * + * @throws Exception the exception + */ + void migrateImageGalleries() throws Exception { + long count = 0; + + for (ImageGallery imageGallery : imagegalleryRepository.findAll()) { + if (imageGallery.getFolder() == null) { + RepositoryFolder repoFolder = repositoryService.getFolder(Paths.get(imageGallery.getPath())); + if (imageGallery.getFolder() == null || imageGallery.getFolder().getId() != repoFolder.getId()) { + LOG.warn("Upgrading image gallery {} to folder={}", imageGallery.getPath(), repoFolder.getPath()); + imageGallery.setFolder(repoFolder); + imagegalleryRepository.save(imageGallery); + count++; + } + } + } + + if (count == 0) { + LOG.warn("\n\n\t** All image galleries have been moved to proper folders **\n\t You can remove the {} bean.\n\n", this.getClass().getName()); + } + } } diff --git a/file-repository-core/src/main/java/org/genesys/filerepository/model/ImageGallery.java b/file-repository-core/src/main/java/org/genesys/filerepository/model/ImageGallery.java index bcda90e5bcdc212872452c71dec48655314a9052..ebd36730e970a1959ce6d1c20c043a4704a5301b 100644 --- a/file-repository-core/src/main/java/org/genesys/filerepository/model/ImageGallery.java +++ b/file-repository-core/src/main/java/org/genesys/filerepository/model/ImageGallery.java @@ -16,27 +16,33 @@ package org.genesys.filerepository.model; -import java.nio.file.Path; -import java.nio.file.Paths; import java.util.ArrayList; import java.util.List; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; +import javax.persistence.FetchType; import javax.persistence.JoinColumn; import javax.persistence.JoinTable; import javax.persistence.Lob; import javax.persistence.ManyToMany; +import javax.persistence.OneToOne; import javax.persistence.OrderColumn; import javax.persistence.Table; -import javax.persistence.Transient; import org.genesys.blocks.model.AuditedVersionedModel; import org.genesys.blocks.model.Copyable; import org.genesys.blocks.security.model.AclAwareModel; import org.hibernate.annotations.Type; +import com.fasterxml.jackson.annotation.JsonIdentityInfo; +import com.fasterxml.jackson.annotation.JsonIdentityReference; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonProperty.Access; +import com.fasterxml.jackson.annotation.ObjectIdGenerators; + /** * {@link ImageGallery} is a collection of ordered {@link RepositoryImage} * instances. @@ -60,6 +66,7 @@ public class ImageGallery extends AuditedVersionedModel implements AclAwareModel * a unique path in the repository. */ @Column(nullable = false, unique = true) + @JsonIgnore private String path; /** @@ -81,9 +88,40 @@ public class ImageGallery extends AuditedVersionedModel implements AclAwareModel @OrderColumn(name = "position") private List images; - @Transient - private Path folderPath; + /** The folder. */ + @OneToOne(cascade = {}, fetch = FetchType.LAZY, optional = false) + @JoinColumn(unique = true) + @JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "path") + @JsonIdentityReference(alwaysAsId = true) + @JsonProperty(access = Access.READ_ONLY) + private RepositoryFolder folder; + + + @Override + public AclAwareModel aclParentObject() { + return folder; + } + /** + * Gets the folder. + * + * @return the folder + */ + public RepositoryFolder getFolder() { + return folder; + } + + /** + * Sets the folder. + * + * @param folder the new folder + */ + public void setFolder(RepositoryFolder folder) { + this.folder = folder; + } + + + /** * Gets the path. * @@ -181,18 +219,4 @@ public class ImageGallery extends AuditedVersionedModel implements AclAwareModel copy.images = new ArrayList<>(this.images); return copy; } - - /** - * Gets the folder path. - * - * @return the folder path - */ - public Path getFolderPath() { - synchronized (this) { - if (folderPath == null) { - this.folderPath = Paths.get(this.path); - } - } - return this.folderPath; - } } diff --git a/file-repository-core/src/main/java/org/genesys/filerepository/persistence/ImageGalleryPersistence.java b/file-repository-core/src/main/java/org/genesys/filerepository/persistence/ImageGalleryPersistence.java index 5b440a8f1ab7c3b556df78ca14fe2e4e159fcd80..17c4aa298df86ab5fbbf3b2242e6bbded30bc457 100644 --- a/file-repository-core/src/main/java/org/genesys/filerepository/persistence/ImageGalleryPersistence.java +++ b/file-repository-core/src/main/java/org/genesys/filerepository/persistence/ImageGalleryPersistence.java @@ -17,18 +17,16 @@ package org.genesys.filerepository.persistence; import org.genesys.filerepository.model.ImageGallery; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.Pageable; +import org.genesys.filerepository.model.RepositoryFolder; import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.data.jpa.repository.Query; +import org.springframework.data.querydsl.QueryDslPredicateExecutor; import org.springframework.stereotype.Repository; -// TODO: Auto-generated Javadoc /** * The Interface ImageGalleryPersistence. */ @Repository -public interface ImageGalleryPersistence extends JpaRepository { +public interface ImageGalleryPersistence extends JpaRepository, QueryDslPredicateExecutor { /** * Find gallery for specified path. @@ -36,16 +34,6 @@ public interface ImageGalleryPersistence extends JpaRepositoryprefix. - * - * @param prefix the prefix - * @param pageable the pageable - * @return the page - */ - @Query("select ig from org.genesys.filerepository.model.ImageGallery ig where ig.path like ?1%") - Page listByPath(String prefix, Pageable pageable); + ImageGallery findByFolder(RepositoryFolder folder); } diff --git a/file-repository-core/src/main/java/org/genesys/filerepository/service/ImageGalleryService.java b/file-repository-core/src/main/java/org/genesys/filerepository/service/ImageGalleryService.java index 5ef4823dbe404d467c3c3223ee676c28bc190358..e04357d713bf0e9604ba98759cd0acbe78c46a25 100644 --- a/file-repository-core/src/main/java/org/genesys/filerepository/service/ImageGalleryService.java +++ b/file-repository-core/src/main/java/org/genesys/filerepository/service/ImageGalleryService.java @@ -52,8 +52,9 @@ public interface ImageGalleryService { * @param title Image gallery title in English. * @param description Image gallery description in English. * @return the new ImageGallery or existing gallery at the specified path. + * @throws InvalidRepositoryPathException */ - ImageGallery createImageGallery(Path path, String title, String description); + ImageGallery createImageGallery(Path path, String title, String description) throws InvalidRepositoryPathException; /** * Delete the image gallery, but don't remove the images at that path. @@ -107,7 +108,8 @@ public interface ImageGalleryService { * @param prefix the prefix * @param pageable the pageable * @return paginated image gallery data + * @throws InvalidRepositoryPathException */ - Page listImageGalleries(Path root, Pageable pageable); + Page listImageGalleries(Path root, Pageable pageable) throws InvalidRepositoryPathException; } diff --git a/file-repository-core/src/main/java/org/genesys/filerepository/service/impl/ImageGalleryServiceImpl.java b/file-repository-core/src/main/java/org/genesys/filerepository/service/impl/ImageGalleryServiceImpl.java index 7feb0a192d19db58e48340f5786f9a99b1fdb299..216dd4f735600e7bf46c0407b5989c8073d731da 100644 --- a/file-repository-core/src/main/java/org/genesys/filerepository/service/impl/ImageGalleryServiceImpl.java +++ b/file-repository-core/src/main/java/org/genesys/filerepository/service/impl/ImageGalleryServiceImpl.java @@ -23,8 +23,11 @@ import java.util.ArrayList; import java.util.List; import java.util.UUID; +import org.genesys.blocks.security.SecurityContextUtil; import org.genesys.filerepository.InvalidRepositoryPathException; import org.genesys.filerepository.model.ImageGallery; +import org.genesys.filerepository.model.QImageGallery; +import org.genesys.filerepository.model.RepositoryFolder; import org.genesys.filerepository.model.RepositoryImage; import org.genesys.filerepository.persistence.ImageGalleryPersistence; import org.genesys.filerepository.service.BytesStorageService; @@ -35,14 +38,18 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.Pageable; +import org.springframework.security.access.AccessDeniedException; import org.springframework.security.access.prepost.PostAuthorize; -import org.springframework.security.access.prepost.PostFilter; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; +import com.querydsl.jpa.impl.JPAQuery; +import com.querydsl.jpa.impl.JPAQueryFactory; + // TODO: Auto-generated Javadoc /** * The Class ImageGalleryServiceImpl. @@ -70,6 +77,10 @@ public class ImageGalleryServiceImpl implements ImageGalleryService { @Autowired private ThumbnailGenerator thumbnailGenerator; + /** The jpa query factory. */ + @Autowired + private JPAQueryFactory jpaQueryFactory; + /* * (non-Javadoc) * @see @@ -79,7 +90,7 @@ public class ImageGalleryServiceImpl implements ImageGalleryService { @Override @PostAuthorize("returnObject == null or hasRole('ADMINISTRATOR') or hasPermission(returnObject, 'read')") public ImageGallery loadImageGallery(final Path path) { - final ImageGallery imageGallery = imageGalleryPersistence.findByPath(path.normalize().toAbsolutePath().toString()); + final ImageGallery imageGallery = imageGalleryPersistence.findByFolder(repositoryService.getFolder(path)); return deepLoad(imageGallery); } @@ -106,17 +117,23 @@ public class ImageGalleryServiceImpl implements ImageGalleryService { @Override @Transactional @PreAuthorize("isAuthenticated()") - public ImageGallery createImageGallery(final Path path, final String title, final String description) { + public ImageGallery createImageGallery(final Path path, final String title, final String description) throws InvalidRepositoryPathException { LOG.debug("Creating ImageGallery at path={}", path); - ImageGallery imageGallery = imageGalleryPersistence.findByPath(path.normalize().toAbsolutePath().toString()); + RepositoryFolder repositoryFolder = repositoryService.ensureFolder(path.normalize().toAbsolutePath()); + + ImageGallery imageGallery = imageGalleryPersistence.findByFolder(repositoryFolder); if (imageGallery != null) { return imageGallery; - } else { - LOG.info("Creating new image gallery at path={}", path); - imageGallery = new ImageGallery(); } + if (!SecurityContextUtil.hasRole("ADMINISTRATOR") && !SecurityContextUtil.hasPermission(repositoryFolder, "WRITE")) { + throw new AccessDeniedException("No WRITE permission on " + repositoryFolder.getPath()); + } + + LOG.info("Creating new image gallery at path={}", path); + imageGallery = new ImageGallery(); + imageGallery.setFolder(repositoryFolder); imageGallery.setPath(path.normalize().toAbsolutePath().toString()); imageGallery.setTitle(title); imageGallery.setDescription(description); @@ -295,7 +312,7 @@ public class ImageGalleryServiceImpl implements ImageGalleryService { * @return the page */ @Override - @PostFilter("hasRole('ADMINISTRATOR') or hasPermission(filterObject, 'read')") + @PreAuthorize("hasRole('ADMINISTRATOR')") public Page listImageGalleries(final Pageable pageable) { return imageGalleryPersistence.findAll(pageable); } @@ -307,8 +324,22 @@ public class ImageGalleryServiceImpl implements ImageGalleryService { * java.lang.String, org.springframework.data.domain.Pageable) */ @Override - @PostFilter("hasRole('ADMINISTRATOR') or hasPermission(filterObject, 'read')") - public Page listImageGalleries(final Path root, final Pageable pageable) { - return imageGalleryPersistence.listByPath(root.normalize().toAbsolutePath().toString(), pageable); + public Page listImageGalleries(final Path root, final Pageable pageable) throws InvalidRepositoryPathException { + List folders = repositoryService.listPaths(root); + // Remove folders user can't read + folders.removeIf(folder -> !SecurityContextUtil.hasRole("ADMINISTRATOR") && !SecurityContextUtil.hasPermission(folder, "READ")); + + JPAQuery query = jpaQueryFactory.selectFrom(QImageGallery.imageGallery).where(QImageGallery.imageGallery.folder.in(folders)); + long total = query.fetchCount(); + + List content = query.join(QImageGallery.imageGallery.folder).fetchJoin() + // page + .offset(pageable.getOffset()).limit(pageable.getPageSize()) + // fetch + .fetch(); + + // content.forEach(imageGallery -> imageGallery.getImages().size()); + // content.forEach(imageGallery -> imageGallery.getFolder().getId()); + return new PageImpl<>(content, pageable, total); } } diff --git a/file-repository-core/src/main/java/org/genesys/filerepository/service/impl/RepositoryServiceImpl.java b/file-repository-core/src/main/java/org/genesys/filerepository/service/impl/RepositoryServiceImpl.java index ad1a391d4143f06daa6dde9fc9624b6b4ad4333d..f50994c673852f27acac6de6fc02e167ce389777 100644 --- a/file-repository-core/src/main/java/org/genesys/filerepository/service/impl/RepositoryServiceImpl.java +++ b/file-repository-core/src/main/java/org/genesys/filerepository/service/impl/RepositoryServiceImpl.java @@ -33,6 +33,7 @@ import javax.imageio.ImageIO; import org.apache.commons.codec.digest.DigestUtils; import org.apache.tika.Tika; +import org.genesys.blocks.security.SecurityContextUtil; import org.genesys.filerepository.FolderNotEmptyException; import org.genesys.filerepository.InvalidRepositoryFileDataException; import org.genesys.filerepository.InvalidRepositoryPathException; @@ -51,6 +52,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.AccessDeniedException; import org.springframework.security.access.prepost.PostAuthorize; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Service; @@ -88,7 +90,7 @@ public class RepositoryServiceImpl implements RepositoryService, InitializingBea /** The bytes storage service. */ @Autowired private BytesStorageService bytesStorageService; - + /* * (non-Javadoc) * @see org.springframework.beans.factory.InitializingBean#afterPropertiesSet() @@ -139,6 +141,8 @@ public class RepositoryServiceImpl implements RepositoryService, InitializingBea PathValidator.checkValidPath(repositoryPath); + RepositoryFolder repositoryFolder = ensureFolder(repositoryPath); + contentType = updateContentTypeIfNecessary(contentType, bytes); if ((originalFilename == null) || (contentType == null) || (bytes == null)) { @@ -162,7 +166,6 @@ public class RepositoryServiceImpl implements RepositoryService, InitializingBea repositoryFile.setMd5Sum(DigestUtils.md5Hex(bytes)); repositoryFile.setSize(bytes.length); - RepositoryFolder repositoryFolder = ensureFolder(repositoryPath); repositoryFile.setFolder(repositoryFolder); repositoryFile.setOriginalFilename(originalFilename); @@ -527,7 +530,9 @@ public class RepositoryServiceImpl implements RepositoryService, InitializingBea return new Tika().detect(bytes); } else { final String detectedContentType = new Tika().detect(bytes); - LOG.info("Content-Type provided={} detected={}", contentType, detectedContentType); + if (! detectedContentType.equals(contentType)) { + LOG.debug("Content-Type provided={} detected={}", contentType, detectedContentType); + } return contentType; } } @@ -780,6 +785,10 @@ public class RepositoryServiceImpl implements RepositoryService, InitializingBea if ("/".equals(folderPath.toString())) { // Root folder + if (! SecurityContextUtil.hasRole("ADMINISTRATOR")) { + // Only administrator can create folders on root + throw new AccessDeniedException("No WRITE permission on /"); + } return null; } else { PathValidator.checkValidFolderName(folderPath.getFileName().toString()); @@ -791,9 +800,15 @@ public class RepositoryServiceImpl implements RepositoryService, InitializingBea folder = new RepositoryFolder(); folder.setName(folderPath.getFileName().toString()); if (folderPath.getParent() != null) { + // This will assure permissions on existing parent folder folder.setParent(ensureFolder(folderPath.getParent())); } folderRepository.save(folder); + } else { + // Assure permissions on folder if it already exists + if (! SecurityContextUtil.hasRole("ADMINISTRATOR") && ! SecurityContextUtil.hasPermission(folder, "WRITE")) { + throw new AccessDeniedException("No WRITE permission on " + folder.getPath()); + } } return folder; diff --git a/file-repository-core/src/test/java/org/genesys/filerepository/config/DatabaseConfig.java b/file-repository-core/src/test/java/org/genesys/filerepository/config/DatabaseConfig.java index 079b7c7b1813defc83f58a70df16408a4a178a9f..8eb7ce57ee7a931d025abd23e9b20f35ac8e32ab 100644 --- a/file-repository-core/src/test/java/org/genesys/filerepository/config/DatabaseConfig.java +++ b/file-repository-core/src/test/java/org/genesys/filerepository/config/DatabaseConfig.java @@ -18,6 +18,7 @@ package org.genesys.filerepository.config; import java.util.Properties; +import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.sql.DataSource; @@ -39,6 +40,8 @@ import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.annotation.EnableTransactionManagement; +import com.querydsl.jpa.impl.JPAQueryFactory; + /** * The Class DatabaseConfig. */ @@ -82,6 +85,17 @@ public class DatabaseConfig { return new JdbcTemplate(dataSource); } + /** + * Jpa query factory. + * + * @param entityManager the entity manager + * @return the JPA query factory + */ + @Bean + public JPAQueryFactory jpaQueryFactory(EntityManager entityManager) { + return new JPAQueryFactory(entityManager); + } + /** * Entity manager factory. * diff --git a/file-repository-core/src/test/java/org/genesys/filerepository/service/FileRepositoryAddTest.java b/file-repository-core/src/test/java/org/genesys/filerepository/service/FileRepositoryAddTest.java index 5a3361493ab545a8ce8543c4ab76e571ea6002c2..aff52d5c684a28bd592418487b5fe0db59cc0383 100644 --- a/file-repository-core/src/test/java/org/genesys/filerepository/service/FileRepositoryAddTest.java +++ b/file-repository-core/src/test/java/org/genesys/filerepository/service/FileRepositoryAddTest.java @@ -31,11 +31,13 @@ import org.genesys.filerepository.NoSuchRepositoryFileException; import org.genesys.filerepository.model.RepositoryFile; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.test.context.support.WithMockUser; // TODO: Auto-generated Javadoc /** * The Class FileRepositoryAddTest. */ +@WithMockUser(username = "user", password = "user", roles = "ADMINISTRATOR") public class FileRepositoryAddTest extends RepositoryServiceTest { /** The Constant SOME_BYTES. */ diff --git a/file-repository-core/src/test/java/org/genesys/filerepository/service/FileRepositoryDirectoryTest.java b/file-repository-core/src/test/java/org/genesys/filerepository/service/FileRepositoryDirectoryTest.java index 52a004a46f82dec813efbc1c52117d962057864d..be01b22d8ad81ece079ab16fb67ae028fb0caffa 100644 --- a/file-repository-core/src/test/java/org/genesys/filerepository/service/FileRepositoryDirectoryTest.java +++ b/file-repository-core/src/test/java/org/genesys/filerepository/service/FileRepositoryDirectoryTest.java @@ -33,10 +33,12 @@ import org.genesys.filerepository.model.RepositoryFile; import org.genesys.filerepository.model.RepositoryFolder; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.test.context.support.WithMockUser; /** * Test the folder navigation of the repository. */ +@WithMockUser(username = "user", password = "user", roles = "ADMINISTRATOR") public class FileRepositoryDirectoryTest extends RepositoryServiceTest { /** The Constant SOME_BYTES. */ diff --git a/file-repository-core/src/test/java/org/genesys/filerepository/service/FileRepositoryExtensionTest.java b/file-repository-core/src/test/java/org/genesys/filerepository/service/FileRepositoryExtensionTest.java index c9070c3b59d946e73811139ebdca7f7a04c7ba93..6537e2ee656b38f42e7fbb3b9a1ff91903ce4e1f 100644 --- a/file-repository-core/src/test/java/org/genesys/filerepository/service/FileRepositoryExtensionTest.java +++ b/file-repository-core/src/test/java/org/genesys/filerepository/service/FileRepositoryExtensionTest.java @@ -26,11 +26,13 @@ import org.genesys.filerepository.NoSuchRepositoryFileException; import org.genesys.filerepository.model.RepositoryFile; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.test.context.support.WithMockUser; // TODO: Auto-generated Javadoc /** * The Class FileRepositoryExtensionTest. */ +@WithMockUser(username = "user", password = "user", roles = "ADMINISTRATOR") public class FileRepositoryExtensionTest extends RepositoryServiceTest { /** The initial content type. */ diff --git a/file-repository-core/src/test/java/org/genesys/filerepository/service/FileRepositoryUpdateTest.java b/file-repository-core/src/test/java/org/genesys/filerepository/service/FileRepositoryUpdateTest.java index 42f0c7a13c0801b8be6d38f3a179bbd33eeb0944..bea8a3f82032c3480345398298971f4bc923f64f 100644 --- a/file-repository-core/src/test/java/org/genesys/filerepository/service/FileRepositoryUpdateTest.java +++ b/file-repository-core/src/test/java/org/genesys/filerepository/service/FileRepositoryUpdateTest.java @@ -31,12 +31,14 @@ import org.genesys.filerepository.NoSuchRepositoryFileException; import org.genesys.filerepository.model.RepositoryFile; import org.junit.Before; import org.junit.Test; +import org.springframework.security.test.context.support.WithMockUser; import org.springframework.transaction.annotation.Transactional; // TODO: Auto-generated Javadoc /** * The Class FileRepositoryUpdateTest. */ +@WithMockUser(username = "user", password = "user", roles = "ADMINISTRATOR") public class FileRepositoryUpdateTest extends RepositoryServiceTest { /** The initial content type. */ diff --git a/file-repository-core/src/test/java/org/genesys/filerepository/service/ImageGalleryTest.java b/file-repository-core/src/test/java/org/genesys/filerepository/service/ImageGalleryTest.java index 33da90fcad823a968e42912b7626cd76e7529a1d..250c8e1b5d61574bb42cd333d0a12da9d8d102f2 100644 --- a/file-repository-core/src/test/java/org/genesys/filerepository/service/ImageGalleryTest.java +++ b/file-repository-core/src/test/java/org/genesys/filerepository/service/ImageGalleryTest.java @@ -17,7 +17,7 @@ package org.genesys.filerepository.service; import static org.hamcrest.Matchers.*; -import static org.junit.Assert.*; +import static org.junit.Assert.assertThat; import java.io.IOException; import java.nio.file.Path; @@ -26,19 +26,26 @@ import java.util.ArrayList; import java.util.List; import java.util.Random; +import javax.transaction.Transactional; + import org.genesys.filerepository.InvalidRepositoryFileDataException; import org.genesys.filerepository.InvalidRepositoryPathException; import org.genesys.filerepository.NoSuchRepositoryFileException; import org.genesys.filerepository.model.ImageGallery; import org.genesys.filerepository.model.RepositoryImage; +import org.genesys.filerepository.persistence.ImageGalleryPersistence; import org.junit.After; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.security.test.context.support.WithMockUser; // TODO: Auto-generated Javadoc /** * The Class ImageGalleryTest. */ +@WithMockUser(username = "user", password = "user", roles = "ADMINISTRATOR") public class ImageGalleryTest extends RepositoryServiceTest { /** The Constant DEFAULT_GALLERY_TITLE. */ @@ -64,19 +71,17 @@ public class ImageGalleryTest extends RepositoryServiceTest { @Autowired private RepositoryService fileRepoService; + @Autowired + private ImageGalleryPersistence galleryRepository; + /** * After test. - * - * @throws NoSuchRepositoryFileException the no such repository file exception - * @throws IOException Signals that an I/O exception has occurred. - * @throws InvalidRepositoryPathException the invalid repository path exception */ @After - public void afterTest() throws NoSuchRepositoryFileException, IOException, InvalidRepositoryPathException { - final ImageGallery imageGallery = imageGalleryService.loadImageGallery(initialPath); - if (imageGallery != null) { - imageGalleryService.removeGallery(imageGallery); - } + @Transactional + public void afterTest() throws Throwable { + galleryRepository.deleteAll(); + super.afterTest(); } /** @@ -90,9 +95,10 @@ public class ImageGalleryTest extends RepositoryServiceTest { /** * Creates the gallery. + * @throws InvalidRepositoryPathException */ @Test - public void createGallery() { + public void createGallery() throws InvalidRepositoryPathException { ImageGallery imageGallery = imageGalleryService.loadImageGallery(initialPath); assertThat("Must be null", imageGallery, nullValue()); @@ -129,9 +135,10 @@ public class ImageGalleryTest extends RepositoryServiceTest { /** * Creates the gallery update blah. + * @throws InvalidRepositoryPathException */ @Test - public void createGalleryUpdateBlah() { + public void createGalleryUpdateBlah() throws InvalidRepositoryPathException { ImageGallery imageGallery = imageGalleryService.createImageGallery(initialPath, DEFAULT_GALLERY_TITLE, DEFAULT_GALLERY_DESCRIPTION); assertThat("Must not be null", imageGallery, notNullValue()); @@ -166,10 +173,10 @@ public class ImageGalleryTest extends RepositoryServiceTest { final RepositoryImage repoImage = fileRepoService.addImage(initialPath, image1.getOriginalFilename(), image1.getContentType(), image1.getImageBytes(), null); // Expect the image to be included in the list! - assertThat("Image gallery must include the image!", imageGalleryService.loadImageGallery(imageGallery.getFolderPath()).getImages(), hasSize(1)); - assertThat("Image gallery must include the image!", imageGalleryService.loadImageGallery(imageGallery.getFolderPath()).getImages(), contains(repoImage)); + assertThat("Image gallery must include the image!", imageGalleryService.loadImageGallery(initialPath).getImages(), hasSize(1)); + assertThat("Image gallery must include the image!", imageGalleryService.loadImageGallery(initialPath).getImages(), contains(repoImage)); - imageGalleryService.removeGallery(imageGalleryService.loadImageGallery(imageGallery.getFolderPath())); + imageGalleryService.removeGallery(imageGalleryService.loadImageGallery(initialPath)); fileRepoService.removeFile(repoImage); } @@ -185,22 +192,22 @@ public class ImageGalleryTest extends RepositoryServiceTest { @Test public void autoImagesOnPath() throws InvalidRepositoryPathException, InvalidRepositoryFileDataException, NoSuchRepositoryFileException, IOException { - final ImageGallery imageGallery = imageGalleryService.createImageGallery(initialPath, DEFAULT_GALLERY_TITLE, DEFAULT_GALLERY_DESCRIPTION); + imageGalleryService.createImageGallery(initialPath, DEFAULT_GALLERY_TITLE, DEFAULT_GALLERY_DESCRIPTION); // Add an image to the gallery path final TestImage image1 = new TestImage("10x10.png", "image/png"); final RepositoryImage repoImage1 = (RepositoryImage) fileRepoService.addFile(initialPath, image1.getOriginalFilename(), image1.getContentType(), image1.getImageBytes(), null); // Expect the image to be included in the list! - assertThat("Image gallery must include the image!", imageGalleryService.loadImageGallery(imageGallery.getFolderPath()).getImages(), contains(repoImage1)); + assertThat("Image gallery must include the image!", imageGalleryService.loadImageGallery(initialPath).getImages(), contains(repoImage1)); // Add an image to the gallery path final TestImage image2 = new TestImage("11x10.png", "image/png"); final RepositoryImage repoImage2 = (RepositoryImage) fileRepoService.addFile(initialPath, image2.getOriginalFilename(), image2.getContentType(), image2.getImageBytes(), null); - assertThat("Image gallery must include both images!", imageGalleryService.loadImageGallery(imageGallery.getFolderPath()).getImages(), contains(repoImage1, repoImage2)); + assertThat("Image gallery must include both images!", imageGalleryService.loadImageGallery(initialPath).getImages(), contains(repoImage1, repoImage2)); - imageGalleryService.removeGallery(imageGalleryService.loadImageGallery(imageGallery.getFolderPath())); + imageGalleryService.removeGallery(imageGalleryService.loadImageGallery(initialPath)); // repositoryService.removeFile(repoImage2); // repositoryService.removeFile(repoImage1); } @@ -217,7 +224,7 @@ public class ImageGalleryTest extends RepositoryServiceTest { @Test public void autoRemoveImagesOnPath() throws InvalidRepositoryPathException, InvalidRepositoryFileDataException, NoSuchRepositoryFileException, IOException { - final ImageGallery imageGallery = imageGalleryService.createImageGallery(initialPath, DEFAULT_GALLERY_TITLE, DEFAULT_GALLERY_DESCRIPTION); + imageGalleryService.createImageGallery(initialPath, DEFAULT_GALLERY_TITLE, DEFAULT_GALLERY_DESCRIPTION); // Add an image to the gallery path final TestImage image1 = new TestImage("10x10.png", "image/png"); @@ -227,16 +234,16 @@ public class ImageGalleryTest extends RepositoryServiceTest { final TestImage image2 = new TestImage("11x10.png", "image/png"); final RepositoryImage repoImage2 = fileRepoService.addImage(initialPath, image2.getOriginalFilename(), image2.getContentType(), image2.getImageBytes(), null); - assertThat("Image gallery must include both images!", imageGalleryService.loadImageGallery(imageGallery.getFolderPath()).getImages(), contains(repoImage1, repoImage2)); + assertThat("Image gallery must include both images!", imageGalleryService.loadImageGallery(initialPath).getImages(), contains(repoImage1, repoImage2)); fileRepoService.removeFile(repoImage2); - assertThat("Image gallery must include the image!", imageGalleryService.loadImageGallery(imageGallery.getFolderPath()).getImages(), contains(repoImage1)); + assertThat("Image gallery must include the image!", imageGalleryService.loadImageGallery(initialPath).getImages(), contains(repoImage1)); fileRepoService.removeFile(repoImage1); // Expect the image to be gone from the list! - assertThat("Image gallery must be deleted", imageGalleryService.loadImageGallery(imageGallery.getFolderPath()), is(nullValue())); + assertThat("Image gallery must be deleted", imageGalleryService.loadImageGallery(initialPath), is(nullValue())); } /** @@ -262,26 +269,26 @@ public class ImageGalleryTest extends RepositoryServiceTest { images.add(repoImg); } - imageGallery = imageGalleryService.loadImageGallery(imageGallery.getFolderPath()); + imageGallery = imageGalleryService.loadImageGallery(initialPath); assertThat("Image gallery must have 20 images", imageGallery.getImages(), hasSize(20)); // Remove something in the middle of the gallery fileRepoService.removeImage(images.remove(4)); // Test order - assertThat("Images must be reordered!", imageGalleryService.loadImageGallery(imageGallery.getFolderPath()).getImages(), contains(images.toArray(EMPTY_REPOSITORYIMAGE_ARRAY))); + assertThat("Images must be reordered!", imageGalleryService.loadImageGallery(initialPath).getImages(), contains(images.toArray(EMPTY_REPOSITORYIMAGE_ARRAY))); // Remove something in the start of the gallery fileRepoService.removeFile(images.remove(0)); // Test order - assertThat("Images must be reordered!", imageGalleryService.loadImageGallery(imageGallery.getFolderPath()).getImages(), contains(images.toArray(EMPTY_REPOSITORYIMAGE_ARRAY))); + assertThat("Images must be reordered!", imageGalleryService.loadImageGallery(initialPath).getImages(), contains(images.toArray(EMPTY_REPOSITORYIMAGE_ARRAY))); // Remove something in the end of the gallery fileRepoService.removeFile(images.remove(images.size() - 1)); // Test order - assertThat("Images must be reordered!", imageGalleryService.loadImageGallery(imageGallery.getFolderPath()).getImages(), contains(images.toArray(EMPTY_REPOSITORYIMAGE_ARRAY))); + assertThat("Images must be reordered!", imageGalleryService.loadImageGallery(initialPath).getImages(), contains(images.toArray(EMPTY_REPOSITORYIMAGE_ARRAY))); // Remove randomly until empty final Random rnd = new Random(System.currentTimeMillis()); @@ -290,10 +297,10 @@ public class ImageGalleryTest extends RepositoryServiceTest { fileRepoService.removeFile(images.remove(idx)); if (images.size() == 0) { - assertThat("Image gallery must be deleted", imageGalleryService.loadImageGallery(imageGallery.getFolderPath()), is(nullValue())); + assertThat("Image gallery must be deleted", imageGalleryService.loadImageGallery(initialPath), is(nullValue())); } else { // Test order - assertThat("Images must be reordered!", imageGalleryService.loadImageGallery(imageGallery.getFolderPath()).getImages(), contains(images.toArray(EMPTY_REPOSITORYIMAGE_ARRAY))); + assertThat("Images must be reordered!", imageGalleryService.loadImageGallery(initialPath).getImages(), contains(images.toArray(EMPTY_REPOSITORYIMAGE_ARRAY))); } } } @@ -318,7 +325,7 @@ public class ImageGalleryTest extends RepositoryServiceTest { final TestImage image2 = new TestImage("11x10.png", "image/png"); final RepositoryImage repoImage2 = fileRepoService.addImage(initialPath, image2.getOriginalFilename(), image2.getContentType(), image2.getImageBytes(), null); - imageGallery = imageGalleryService.loadImageGallery(imageGallery.getFolderPath()); + imageGallery = imageGalleryService.loadImageGallery(initialPath); assertThat("Image gallery must include both images!", imageGallery.getImages(), contains(repoImage1, repoImage2)); @@ -357,7 +364,7 @@ public class ImageGalleryTest extends RepositoryServiceTest { ImageGallery imageGallery = imageGalleryService.createImageGallery(initialPath, DEFAULT_GALLERY_TITLE, DEFAULT_GALLERY_DESCRIPTION); - imageGallery = imageGalleryService.loadImageGallery(imageGallery.getFolderPath()); + imageGallery = imageGalleryService.loadImageGallery(initialPath); assertThat("Image gallery must include both images!", imageGallery.getImages(), contains(repoImage1, repoImage2)); @@ -365,4 +372,33 @@ public class ImageGalleryTest extends RepositoryServiceTest { fileRepoService.removeFile(repoImage2); fileRepoService.removeFile(repoImage1); } + + + /** + * Delete gallery. + * + * @throws InvalidRepositoryPathException the invalid repository path exception + */ + @Test + public void listGalleries() throws InvalidRepositoryPathException { + imageGalleryService.createImageGallery(initialPath.resolve("gallery1"), DEFAULT_GALLERY_TITLE, DEFAULT_GALLERY_DESCRIPTION); + imageGalleryService.createImageGallery(initialPath.resolve("gallery2"), DEFAULT_GALLERY_TITLE, DEFAULT_GALLERY_DESCRIPTION); + imageGalleryService.createImageGallery(initialPath.resolve("sub/gallery3"), DEFAULT_GALLERY_TITLE, DEFAULT_GALLERY_DESCRIPTION); + + Page page = imageGalleryService.listImageGalleries(new PageRequest(0, 3)); + assertThat(page.getContent().size(), is(3)); + assertThat(page.getTotalElements(), is(3l)); + + page = imageGalleryService.listImageGalleries(new PageRequest(0, 2)); + assertThat(page.getContent().size(), is(2)); + assertThat(page.getTotalElements(), is(3l)); + + page = imageGalleryService.listImageGalleries(initialPath, new PageRequest(0, 3)); + assertThat(page.getContent().size(), is(3)); + assertThat(page.getTotalElements(), is(3l)); + + page = imageGalleryService.listImageGalleries(initialPath.resolve("sub"), new PageRequest(0, 3)); + assertThat(page.getContent().size(), is(1)); + assertThat(page.getTotalElements(), is(1l)); + } } diff --git a/file-repository-core/src/test/java/org/genesys/filerepository/service/ImageGalleryThumbnailsTest.java b/file-repository-core/src/test/java/org/genesys/filerepository/service/ImageGalleryThumbnailsTest.java index 1fdd7e4d6c5515ddc051fbca877950e2bc9219fb..ff9b5f023c3adc5b39f476b8184ef3d84d2bb8d4 100644 --- a/file-repository-core/src/test/java/org/genesys/filerepository/service/ImageGalleryThumbnailsTest.java +++ b/file-repository-core/src/test/java/org/genesys/filerepository/service/ImageGalleryThumbnailsTest.java @@ -38,12 +38,14 @@ import org.genesys.filerepository.service.impl.ImageGalleryServiceImpl; import org.junit.After; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.test.context.support.WithMockUser; import org.springframework.transaction.annotation.Transactional; // TODO: Auto-generated Javadoc /** * The Class ImageGalleryTest. */ +@WithMockUser(username = "user", password = "user", roles = "ADMINISTRATOR") public class ImageGalleryThumbnailsTest extends RepositoryServiceTest { /** The Constant DEFAULT_GALLERY_TITLE. */ diff --git a/file-repository-core/src/test/java/org/genesys/filerepository/service/MetadataTest.java b/file-repository-core/src/test/java/org/genesys/filerepository/service/MetadataTest.java index da28f7d4286110dafd6d4d0fb987823d31bef472..c7b137659a00a9bdb5352925bc67a3d860b8f514 100644 --- a/file-repository-core/src/test/java/org/genesys/filerepository/service/MetadataTest.java +++ b/file-repository-core/src/test/java/org/genesys/filerepository/service/MetadataTest.java @@ -30,6 +30,7 @@ import org.genesys.filerepository.model.RepositoryImage; import org.junit.After; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.test.context.support.WithMockUser; import org.springframework.transaction.annotation.Transactional; import com.fasterxml.jackson.databind.DeserializationFeature; @@ -38,6 +39,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; /** * Repository metadata tests. */ +@WithMockUser(username = "user", password = "user", roles = "ADMINISTRATOR") public class MetadataTest extends RepositoryServiceTest { /** The timestamp. */ diff --git a/file-repository-core/src/test/java/org/genesys/filerepository/service/RepositoryFolderTest.java b/file-repository-core/src/test/java/org/genesys/filerepository/service/RepositoryFolderTest.java index 629587acd292ec5aa552fc329dd6d2ea6b7d5f4d..65d5ecf3f394473c0ef8488e12dde1eb9402b103 100644 --- a/file-repository-core/src/test/java/org/genesys/filerepository/service/RepositoryFolderTest.java +++ b/file-repository-core/src/test/java/org/genesys/filerepository/service/RepositoryFolderTest.java @@ -27,11 +27,13 @@ import org.genesys.filerepository.FolderNotEmptyException; import org.genesys.filerepository.InvalidRepositoryPathException; import org.genesys.filerepository.model.RepositoryFolder; import org.junit.Test; +import org.springframework.security.test.context.support.WithMockUser; // TODO: Auto-generated Javadoc /** * The Class FileRepositoryAddTest. */ +@WithMockUser(username = "user", password = "user", roles = "ADMINISTRATOR") public class RepositoryFolderTest extends RepositoryServiceTest { @Test diff --git a/file-repository-core/src/test/java/org/genesys/filerepository/service/RepositoryImageAddTest.java b/file-repository-core/src/test/java/org/genesys/filerepository/service/RepositoryImageAddTest.java index 6b19b735a819a9fbaafcccb21e182e24a26fddc7..9ad636f81bbb857c9efce2dfd28a3d66c712e0c0 100644 --- a/file-repository-core/src/test/java/org/genesys/filerepository/service/RepositoryImageAddTest.java +++ b/file-repository-core/src/test/java/org/genesys/filerepository/service/RepositoryImageAddTest.java @@ -33,6 +33,7 @@ import org.genesys.filerepository.model.RepositoryImage; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.test.context.support.WithMockUser; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @@ -42,6 +43,7 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { ServiceBeanConfig.class, DatabaseConfig.class }) +@WithMockUser(username = "user", password = "user", roles = "ADMINISTRATOR") public class RepositoryImageAddTest { /** The initial content type. */ diff --git a/file-repository-core/src/test/java/org/genesys/filerepository/service/RepositoryImageUpdateTest.java b/file-repository-core/src/test/java/org/genesys/filerepository/service/RepositoryImageUpdateTest.java index 1704c46240de85f14c0de8fa35d61bcea387ea54..de19e2856bf48bf16d84a82b2c55fe8d6137b173 100644 --- a/file-repository-core/src/test/java/org/genesys/filerepository/service/RepositoryImageUpdateTest.java +++ b/file-repository-core/src/test/java/org/genesys/filerepository/service/RepositoryImageUpdateTest.java @@ -26,15 +26,16 @@ import org.genesys.filerepository.InvalidRepositoryPathException; import org.genesys.filerepository.NoSuchRepositoryFileException; import org.genesys.filerepository.metadata.ImageMetadata.Orientation; import org.genesys.filerepository.model.RepositoryImage; -import org.junit.After; import org.junit.Before; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.test.context.support.WithMockUser; // TODO: Auto-generated Javadoc /** * The Class RepositoryImageUpdateTest. */ +@WithMockUser(username = "user", password = "user", roles = "ADMINISTRATOR") public class RepositoryImageUpdateTest extends RepositoryServiceTest { /** The initial content type. */ diff --git a/file-repository-core/src/test/java/org/genesys/filerepository/service/RepositoryServiceTest.java b/file-repository-core/src/test/java/org/genesys/filerepository/service/RepositoryServiceTest.java index 9bccf66cc454ab2e46bad4749e8465a24df9b764..7d46cfc4961a366a67f84445f1e9b4041a798bc8 100644 --- a/file-repository-core/src/test/java/org/genesys/filerepository/service/RepositoryServiceTest.java +++ b/file-repository-core/src/test/java/org/genesys/filerepository/service/RepositoryServiceTest.java @@ -16,6 +16,8 @@ import org.genesys.filerepository.persistence.RepositoryFolderRepository; import org.junit.After; import org.junit.Before; import org.junit.runner.RunWith; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @@ -25,6 +27,8 @@ import org.springframework.transaction.annotation.Transactional; @ContextConfiguration(classes = { ServiceBeanConfig.class, DatabaseConfig.class }) public abstract class RepositoryServiceTest { + protected final Logger LOG = LoggerFactory.getLogger(getClass()); + protected static final Path ROOT = Paths.get("/"); /** The file repo service. */ @@ -40,9 +44,7 @@ public abstract class RepositoryServiceTest { @Before @Transactional public void beforeTest() throws Throwable { - fileRepository.deleteAll(); - deleteFolders(folderRepository.findAll()); - + afterTest(); assertThat(fileRepository.count(), is(0l)); assertThat(folderRepository.count(), is(0l)); } @@ -52,9 +54,8 @@ public abstract class RepositoryServiceTest { for (RepositoryFolder folder : toDelete) { try { folderRepository.delete(folder); - System.err.println("Folder deleted " + folder); } catch (Throwable e) { - System.err.println("Folder NOT deleted " + folder); + LOG.debug("Folder not deleted " + folder); pending.add(folder); } } @@ -66,7 +67,8 @@ public abstract class RepositoryServiceTest { @After @Transactional public void afterTest() throws Throwable { - + fileRepository.deleteAll(); + deleteFolders(folderRepository.findAll()); } } diff --git a/file-repository-core/src/test/java/org/genesys/filerepository/service/S3StorageServiceTest.java b/file-repository-core/src/test/java/org/genesys/filerepository/service/S3StorageServiceTest.java index 7671fa59b80f28a3719adbf67b45a27274bd74cc..a5fed1b0f7b349372b4a99dc620790b389e3d666 100644 --- a/file-repository-core/src/test/java/org/genesys/filerepository/service/S3StorageServiceTest.java +++ b/file-repository-core/src/test/java/org/genesys/filerepository/service/S3StorageServiceTest.java @@ -335,7 +335,7 @@ public class S3StorageServiceTest { */ @Test(expected = IOException.class) public void invalidUpsertNullFilename() throws IOException, InvalidKeyException, NoSuchAlgorithmException { - bytesStorageService.upsert(Paths.get("/test/", null), SOME_BYTES); + bytesStorageService.upsert(Paths.get("/test/"), SOME_BYTES); } /** @@ -407,7 +407,7 @@ public class S3StorageServiceTest { */ @Test(expected = IOException.class) public void invalidRemoveNullFilename() throws IOException, InvalidKeyException, NoSuchAlgorithmException { - bytesStorageService.remove(Paths.get("/test/", null)); + bytesStorageService.remove(Paths.get("/test/")); } /** diff --git a/file-repository-ftpserver/pom.xml b/file-repository-ftpserver/pom.xml index d92ef3b9d80460e7fad36c5dc77df1ad8f66bc8e..22665534333a5affd60f4cbcf96715c603b5490b 100644 --- a/file-repository-ftpserver/pom.xml +++ b/file-repository-ftpserver/pom.xml @@ -57,6 +57,13 @@ ${spring.version} test + + + org.springframework.security + spring-security-test + ${spring.security.version} + test + commons-net @@ -80,6 +87,13 @@ test + + javax.inject + javax.inject + 1 + test + + commons-io commons-io diff --git a/file-repository-ftpserver/src/test/java/org/genesys/filerepository/service/ftp/ApplicationConfig.java b/file-repository-ftpserver/src/test/java/org/genesys/filerepository/service/ftp/ApplicationConfig.java index fb12eb45ece0658d477fbcbd32be6d77f2d3bc44..6ade5da712370d4b756231eb0ca9c3368498c4fe 100644 --- a/file-repository-ftpserver/src/test/java/org/genesys/filerepository/service/ftp/ApplicationConfig.java +++ b/file-repository-ftpserver/src/test/java/org/genesys/filerepository/service/ftp/ApplicationConfig.java @@ -16,6 +16,7 @@ package org.genesys.filerepository.service.ftp; import java.util.ArrayList; +import java.util.Collection; import java.util.List; import org.apache.ftpserver.ftplet.Authentication; @@ -29,8 +30,11 @@ import org.apache.ftpserver.usermanager.UsernamePasswordAuthentication; import org.apache.ftpserver.usermanager.impl.AbstractUserManager; import org.apache.ftpserver.usermanager.impl.ConcurrentLoginPermission; import org.apache.ftpserver.usermanager.impl.WritePermission; +import org.genesys.blocks.security.model.BasicUser; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.authority.SimpleGrantedAuthority; /** * The Class ApplicationConfig. @@ -128,10 +132,10 @@ public class ApplicationConfig { if (authentication instanceof UsernamePasswordAuthentication) { final UsernamePasswordAuthentication upauth = (UsernamePasswordAuthentication) authentication; - final String user = upauth.getUsername(); + final String username = upauth.getUsername(); String password = upauth.getPassword(); - if (user == null) { + if (username == null) { throw new AuthenticationFailedException("Authentication failed"); } @@ -139,7 +143,7 @@ public class ApplicationConfig { password = ""; } - final String storedPassword = user.concat("1!"); + final String storedPassword = username.concat("1!"); if (!password.equals(storedPassword)) { // user does not exist @@ -148,11 +152,25 @@ public class ApplicationConfig { // if (getPasswordEncryptor().matches(password, storedPassword)) { if (password.equals(storedPassword)) { - try { - return getUserByName(user); - } catch (final FtpException e) { - throw new AuthenticationFailedException("Authentication failed", e); - } + // using this to grant us ADMIN role + BasicUser user=new BasicUser() { + @Override + public Collection getAuthorities() { + List roles=new ArrayList<>(); + roles.add(new SimpleGrantedAuthority("ROLE_ADMINISTRATOR")); + return roles; + } + }; + + FtpUser ftpUser = new FtpUser(user); + ftpUser.setName(username); + final List authorities = new ArrayList<>(); + authorities.add(new ConcurrentLoginPermission(10, 0)); + authorities.add(new WritePermission()); + ftpUser.setAuthorities(authorities); + ftpUser.setHomeDirectory("/"); + return ftpUser; + } else { throw new AuthenticationFailedException("Authentication failed"); } diff --git a/file-repository-ftpserver/src/test/java/org/genesys/filerepository/service/ftp/FtpServerTest.java b/file-repository-ftpserver/src/test/java/org/genesys/filerepository/service/ftp/FtpServerTest.java index f1805d0a2130d0e691252e0b240b93caf7d3a00c..663eef5aca424c3b215e9e45d93fb8109710ab3a 100644 --- a/file-repository-ftpserver/src/test/java/org/genesys/filerepository/service/ftp/FtpServerTest.java +++ b/file-repository-ftpserver/src/test/java/org/genesys/filerepository/service/ftp/FtpServerTest.java @@ -15,11 +15,7 @@ */ package org.genesys.filerepository.service.ftp; -import static org.hamcrest.Matchers.contains; -import static org.hamcrest.Matchers.hasItems; -import static org.hamcrest.Matchers.hasSize; -import static org.hamcrest.Matchers.is; -import static org.hamcrest.Matchers.notNullValue; +import static org.hamcrest.Matchers.*; import static org.junit.Assert.assertThat; import java.io.ByteArrayInputStream;