diff --git a/src/main/java/sh/rhiobet/lalafin/access/AccessService.java b/src/main/java/sh/rhiobet/lalafin/access/AccessService.java deleted file mode 100644 index f782485..0000000 --- a/src/main/java/sh/rhiobet/lalafin/access/AccessService.java +++ /dev/null @@ -1,7 +0,0 @@ -package sh.rhiobet.lalafin.access; - -import sh.rhiobet.lalafin.path.Path; - -public interface AccessService { - boolean checkAccess(Path path); -} diff --git a/src/main/java/sh/rhiobet/lalafin/advent/AdventAccessService.java b/src/main/java/sh/rhiobet/lalafin/advent/access/AdventAccessService.java similarity index 86% rename from src/main/java/sh/rhiobet/lalafin/advent/AdventAccessService.java rename to src/main/java/sh/rhiobet/lalafin/advent/access/AdventAccessService.java index 60008e9..174f3bc 100644 --- a/src/main/java/sh/rhiobet/lalafin/advent/AdventAccessService.java +++ b/src/main/java/sh/rhiobet/lalafin/advent/access/AdventAccessService.java @@ -1,4 +1,4 @@ -package sh.rhiobet.lalafin.advent; +package sh.rhiobet.lalafin.advent.access; import java.time.LocalDateTime; import java.util.Optional; @@ -7,13 +7,13 @@ import java.util.regex.Pattern; import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; import jakarta.inject.Named; -import sh.rhiobet.lalafin.access.AccessService; -import sh.rhiobet.lalafin.path.Path; +import sh.rhiobet.lalafin.advent.configuration.AdventConfiguration; +import sh.rhiobet.lalafin.core.access.AccessService; +import sh.rhiobet.lalafin.core.path.model.Path; @ApplicationScoped @Named("advent") public class AdventAccessService implements AccessService { - @Inject AdventConfiguration adventConfiguration; diff --git a/src/main/java/sh/rhiobet/lalafin/advent/AdventConfiguration.java b/src/main/java/sh/rhiobet/lalafin/advent/configuration/AdventConfiguration.java similarity index 86% rename from src/main/java/sh/rhiobet/lalafin/advent/AdventConfiguration.java rename to src/main/java/sh/rhiobet/lalafin/advent/configuration/AdventConfiguration.java index 064fc48..e495191 100644 --- a/src/main/java/sh/rhiobet/lalafin/advent/AdventConfiguration.java +++ b/src/main/java/sh/rhiobet/lalafin/advent/configuration/AdventConfiguration.java @@ -1,4 +1,4 @@ -package sh.rhiobet.lalafin.advent; +package sh.rhiobet.lalafin.advent.configuration; import java.util.List; import io.smallrye.config.ConfigMapping; diff --git a/src/main/java/sh/rhiobet/lalafin/advent/AdventThumbnailPathPlugin.java b/src/main/java/sh/rhiobet/lalafin/advent/thumbnail/AdventThumbnailPathPlugin.java similarity index 87% rename from src/main/java/sh/rhiobet/lalafin/advent/AdventThumbnailPathPlugin.java rename to src/main/java/sh/rhiobet/lalafin/advent/thumbnail/AdventThumbnailPathPlugin.java index 234e34c..1f508af 100644 --- a/src/main/java/sh/rhiobet/lalafin/advent/AdventThumbnailPathPlugin.java +++ b/src/main/java/sh/rhiobet/lalafin/advent/thumbnail/AdventThumbnailPathPlugin.java @@ -1,4 +1,4 @@ -package sh.rhiobet.lalafin.advent; +package sh.rhiobet.lalafin.advent.thumbnail; import java.io.IOException; import java.io.OutputStream; @@ -10,10 +10,11 @@ import jakarta.decorator.Decorator; import jakarta.decorator.Delegate; import jakarta.inject.Inject; import jakarta.inject.Named; +import sh.rhiobet.lalafin.advent.access.AdventAccessService; import sh.rhiobet.lalafin.api.configuration.FileApiConfiguration; -import sh.rhiobet.lalafin.path.Path; -import sh.rhiobet.lalafin.path.PathAccessor; -import sh.rhiobet.lalafin.path.PathPlugin; +import sh.rhiobet.lalafin.core.path.model.Path; +import sh.rhiobet.lalafin.core.path.model.PathAccessor; +import sh.rhiobet.lalafin.core.path.plugin.PathPlugin; @Decorator public class AdventThumbnailPathPlugin extends PathAccessor implements PathPlugin { diff --git a/src/main/java/sh/rhiobet/lalafin/core/access/AccessService.java b/src/main/java/sh/rhiobet/lalafin/core/access/AccessService.java new file mode 100644 index 0000000..e26b34d --- /dev/null +++ b/src/main/java/sh/rhiobet/lalafin/core/access/AccessService.java @@ -0,0 +1,7 @@ +package sh.rhiobet.lalafin.core.access; + +import sh.rhiobet.lalafin.core.path.model.Path; + +public interface AccessService { + boolean checkAccess(Path path); +} diff --git a/src/main/java/sh/rhiobet/lalafin/path/InvalidPathException.java b/src/main/java/sh/rhiobet/lalafin/core/path/exception/InvalidPathException.java similarity index 72% rename from src/main/java/sh/rhiobet/lalafin/path/InvalidPathException.java rename to src/main/java/sh/rhiobet/lalafin/core/path/exception/InvalidPathException.java index 079d330..dfc9b4c 100644 --- a/src/main/java/sh/rhiobet/lalafin/path/InvalidPathException.java +++ b/src/main/java/sh/rhiobet/lalafin/core/path/exception/InvalidPathException.java @@ -1,4 +1,4 @@ -package sh.rhiobet.lalafin.path; +package sh.rhiobet.lalafin.core.path.exception; public class InvalidPathException extends Exception { public InvalidPathException(String message) { diff --git a/src/main/java/sh/rhiobet/lalafin/path/FileSystemPath.java b/src/main/java/sh/rhiobet/lalafin/core/path/model/FileSystemPath.java similarity index 98% rename from src/main/java/sh/rhiobet/lalafin/path/FileSystemPath.java rename to src/main/java/sh/rhiobet/lalafin/core/path/model/FileSystemPath.java index 99bd0de..7b4f663 100644 --- a/src/main/java/sh/rhiobet/lalafin/path/FileSystemPath.java +++ b/src/main/java/sh/rhiobet/lalafin/core/path/model/FileSystemPath.java @@ -1,4 +1,4 @@ -package sh.rhiobet.lalafin.path; +package sh.rhiobet.lalafin.core.path.model; import jakarta.ws.rs.core.PathSegment; diff --git a/src/main/java/sh/rhiobet/lalafin/path/Path.java b/src/main/java/sh/rhiobet/lalafin/core/path/model/Path.java similarity index 89% rename from src/main/java/sh/rhiobet/lalafin/path/Path.java rename to src/main/java/sh/rhiobet/lalafin/core/path/model/Path.java index bdb6b7a..a4384f3 100644 --- a/src/main/java/sh/rhiobet/lalafin/path/Path.java +++ b/src/main/java/sh/rhiobet/lalafin/core/path/model/Path.java @@ -1,4 +1,4 @@ -package sh.rhiobet.lalafin.path; +package sh.rhiobet.lalafin.core.path.model; import java.io.IOException; import java.io.InputStream; diff --git a/src/main/java/sh/rhiobet/lalafin/path/PathAccessor.java b/src/main/java/sh/rhiobet/lalafin/core/path/model/PathAccessor.java similarity index 85% rename from src/main/java/sh/rhiobet/lalafin/path/PathAccessor.java rename to src/main/java/sh/rhiobet/lalafin/core/path/model/PathAccessor.java index b4e4db5..1b0110d 100644 --- a/src/main/java/sh/rhiobet/lalafin/path/PathAccessor.java +++ b/src/main/java/sh/rhiobet/lalafin/core/path/model/PathAccessor.java @@ -1,4 +1,4 @@ -package sh.rhiobet.lalafin.path; +package sh.rhiobet.lalafin.core.path.model; public abstract class PathAccessor { protected java.nio.file.Path getAbsolutePath(Path path) { diff --git a/src/main/java/sh/rhiobet/lalafin/path/PathFactory.java b/src/main/java/sh/rhiobet/lalafin/core/path/model/PathFactory.java similarity index 93% rename from src/main/java/sh/rhiobet/lalafin/path/PathFactory.java rename to src/main/java/sh/rhiobet/lalafin/core/path/model/PathFactory.java index 1c5e0a3..1cf97b8 100644 --- a/src/main/java/sh/rhiobet/lalafin/path/PathFactory.java +++ b/src/main/java/sh/rhiobet/lalafin/core/path/model/PathFactory.java @@ -1,4 +1,4 @@ -package sh.rhiobet.lalafin.path; +package sh.rhiobet.lalafin.core.path.model; import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; @@ -10,6 +10,7 @@ import java.nio.file.Paths; import java.util.List; import sh.rhiobet.lalafin.api.configuration.FileApiConfiguration; +import sh.rhiobet.lalafin.core.path.exception.InvalidPathException; @ApplicationScoped public class PathFactory { diff --git a/src/main/java/sh/rhiobet/lalafin/path/ZipEntryPath.java b/src/main/java/sh/rhiobet/lalafin/core/path/model/ZipEntryPath.java similarity index 98% rename from src/main/java/sh/rhiobet/lalafin/path/ZipEntryPath.java rename to src/main/java/sh/rhiobet/lalafin/core/path/model/ZipEntryPath.java index 40d3226..7602b09 100644 --- a/src/main/java/sh/rhiobet/lalafin/path/ZipEntryPath.java +++ b/src/main/java/sh/rhiobet/lalafin/core/path/model/ZipEntryPath.java @@ -1,4 +1,4 @@ -package sh.rhiobet.lalafin.path; +package sh.rhiobet.lalafin.core.path.model; import jakarta.ws.rs.core.PathSegment; diff --git a/src/main/java/sh/rhiobet/lalafin/path/PathPlugin.java b/src/main/java/sh/rhiobet/lalafin/core/path/plugin/PathPlugin.java similarity index 70% rename from src/main/java/sh/rhiobet/lalafin/path/PathPlugin.java rename to src/main/java/sh/rhiobet/lalafin/core/path/plugin/PathPlugin.java index 81cf587..70b64e3 100644 --- a/src/main/java/sh/rhiobet/lalafin/path/PathPlugin.java +++ b/src/main/java/sh/rhiobet/lalafin/core/path/plugin/PathPlugin.java @@ -1,9 +1,11 @@ -package sh.rhiobet.lalafin.path; +package sh.rhiobet.lalafin.core.path.plugin; import java.io.IOException; import java.io.OutputStream; import java.util.Optional; +import sh.rhiobet.lalafin.core.path.model.Path; + public interface PathPlugin { Optional resolveURI(Path path); OutputStream getOutputStream(Path path) throws IOException; diff --git a/src/main/java/sh/rhiobet/lalafin/file/FileRoleAccessService.java b/src/main/java/sh/rhiobet/lalafin/file/access/FileRoleAccessService.java similarity index 80% rename from src/main/java/sh/rhiobet/lalafin/file/FileRoleAccessService.java rename to src/main/java/sh/rhiobet/lalafin/file/access/FileRoleAccessService.java index 9c231e9..682787f 100644 --- a/src/main/java/sh/rhiobet/lalafin/file/FileRoleAccessService.java +++ b/src/main/java/sh/rhiobet/lalafin/file/access/FileRoleAccessService.java @@ -1,4 +1,4 @@ -package sh.rhiobet.lalafin.file; +package sh.rhiobet.lalafin.file.access; import java.util.List; @@ -6,8 +6,9 @@ import io.quarkus.security.identity.SecurityIdentity; import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; import jakarta.inject.Named; -import sh.rhiobet.lalafin.access.AccessService; -import sh.rhiobet.lalafin.path.Path; +import sh.rhiobet.lalafin.core.access.AccessService; +import sh.rhiobet.lalafin.core.path.model.Path; +import sh.rhiobet.lalafin.file.configuration.FileConfiguration; @ApplicationScoped @Named("file/role") diff --git a/src/main/java/sh/rhiobet/lalafin/file/FileConfiguration.java b/src/main/java/sh/rhiobet/lalafin/file/configuration/FileConfiguration.java similarity index 89% rename from src/main/java/sh/rhiobet/lalafin/file/FileConfiguration.java rename to src/main/java/sh/rhiobet/lalafin/file/configuration/FileConfiguration.java index d0d8455..d9cf918 100644 --- a/src/main/java/sh/rhiobet/lalafin/file/FileConfiguration.java +++ b/src/main/java/sh/rhiobet/lalafin/file/configuration/FileConfiguration.java @@ -1,4 +1,4 @@ -package sh.rhiobet.lalafin.file; +package sh.rhiobet.lalafin.file.configuration; import java.util.List; import java.util.Optional; diff --git a/src/main/java/sh/rhiobet/lalafin/file/model/FileInfo.java b/src/main/java/sh/rhiobet/lalafin/file/model/FileInfo.java new file mode 100644 index 0000000..4a5a279 --- /dev/null +++ b/src/main/java/sh/rhiobet/lalafin/file/model/FileInfo.java @@ -0,0 +1,17 @@ +package sh.rhiobet.lalafin.file.model; + +import io.quarkus.runtime.annotations.RegisterForReflection; + +@RegisterForReflection +public class FileInfo extends FileInfoBase { + public String publicApiUrl; + + public FileInfo(String filename, String thumbnailUrl, String directUrl, String publicApiUrl) { + super(filename, "file", thumbnailUrl, directUrl); + this.publicApiUrl = publicApiUrl; + } + + public FileInfo(String filename, String directUrl) { + this(filename, "", directUrl, ""); + } +} diff --git a/src/main/java/sh/rhiobet/lalafin/file/model/FileInfoBase.java b/src/main/java/sh/rhiobet/lalafin/file/model/FileInfoBase.java new file mode 100644 index 0000000..56c843b --- /dev/null +++ b/src/main/java/sh/rhiobet/lalafin/file/model/FileInfoBase.java @@ -0,0 +1,30 @@ +package sh.rhiobet.lalafin.file.model; + +import io.quarkus.runtime.annotations.RegisterForReflection; + +@RegisterForReflection +public abstract class FileInfoBase implements Comparable { + public String filename; + public String type; + public String thumbnailUrl; + public String directUrl; + public String viewUrl; + + public FileInfoBase(String filename, String type, String thumbnailUrl, String directUrl, + String viewUrl) { + this.filename = filename; + this.type = type; + this.thumbnailUrl = thumbnailUrl; + this.directUrl = directUrl; + this.viewUrl = viewUrl; + } + + public FileInfoBase(String filename, String type, String thumbnailUrl, String directUrl) { + this(filename, type, thumbnailUrl, directUrl, ""); + } + + @Override + public int compareTo(FileInfoBase f) { + return this.filename.compareToIgnoreCase(f.filename); + } +} diff --git a/src/main/java/sh/rhiobet/lalafin/file/FileMetadataService.java b/src/main/java/sh/rhiobet/lalafin/file/model/FileMetadataService.java similarity index 86% rename from src/main/java/sh/rhiobet/lalafin/file/FileMetadataService.java rename to src/main/java/sh/rhiobet/lalafin/file/model/FileMetadataService.java index 50a3eb0..5ca8940 100644 --- a/src/main/java/sh/rhiobet/lalafin/file/FileMetadataService.java +++ b/src/main/java/sh/rhiobet/lalafin/file/model/FileMetadataService.java @@ -1,4 +1,4 @@ -package sh.rhiobet.lalafin.file; +package sh.rhiobet.lalafin.file.model; import java.io.IOException; import java.util.Optional; @@ -6,13 +6,11 @@ import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; import jakarta.inject.Named; import sh.rhiobet.lalafin.LalafinConfiguration; -import sh.rhiobet.lalafin.api.advent.AdventAccessService; import sh.rhiobet.lalafin.api.internal.redis.FileTokenProvider; -import sh.rhiobet.lalafin.api.model.FileInfo; -import sh.rhiobet.lalafin.api.model.FileInfoBase; -import sh.rhiobet.lalafin.api.model.FolderInfo; -import sh.rhiobet.lalafin.path.Path; -import sh.rhiobet.lalafin.path.PathPlugin; +import sh.rhiobet.lalafin.core.path.model.Path; +import sh.rhiobet.lalafin.core.path.plugin.PathPlugin; +import sh.rhiobet.lalafin.file.ThumbnailService; +import sh.rhiobet.lalafin.file.configuration.FileConfiguration; @ApplicationScoped public class FileMetadataService { @@ -29,9 +27,6 @@ public class FileMetadataService { @Named("file/thumbnail") PathPlugin thumbnailPathPlugin; - @Inject - AdventAccessService adventAccessService; - public FileInfoBase getInfo(Path filePath, FileTokenProvider fileTokenProvider) { if (filePath.exists()) { Optional thumbUrl = this.thumbnailPathPlugin.resolveURI(filePath); diff --git a/src/main/java/sh/rhiobet/lalafin/file/model/FolderInfo.java b/src/main/java/sh/rhiobet/lalafin/file/model/FolderInfo.java new file mode 100644 index 0000000..0632550 --- /dev/null +++ b/src/main/java/sh/rhiobet/lalafin/file/model/FolderInfo.java @@ -0,0 +1,22 @@ +package sh.rhiobet.lalafin.file.model; + +import java.util.Set; +import java.util.TreeSet; +import com.fasterxml.jackson.annotation.JsonInclude; +import io.quarkus.runtime.annotations.RegisterForReflection; + +@RegisterForReflection +@JsonInclude(JsonInclude.Include.NON_NULL) +public class FolderInfo extends FileInfoBase { + public Set content; + public FileInfo playlist; + + public FolderInfo(String filename, String thumbnailUrl, String directUrl, String viewUrl) { + super(filename, "folder", thumbnailUrl, directUrl, viewUrl); + this.content = new TreeSet<>(); + } + + public FolderInfo(String filename, String directUrl) { + this(filename, "", directUrl, ""); + } +} diff --git a/src/main/java/sh/rhiobet/lalafin/file/rest/FilePrivateAPI.java b/src/main/java/sh/rhiobet/lalafin/file/rest/FilePrivateAPI.java index 940068c..466e92f 100644 --- a/src/main/java/sh/rhiobet/lalafin/file/rest/FilePrivateAPI.java +++ b/src/main/java/sh/rhiobet/lalafin/file/rest/FilePrivateAPI.java @@ -12,14 +12,14 @@ import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.PathSegment; import jakarta.ws.rs.core.Response; import io.quarkus.security.Authenticated; -import sh.rhiobet.lalafin.access.AccessService; -import sh.rhiobet.lalafin.api.model.FileInfoBase; -import sh.rhiobet.lalafin.file.FileMetadataService; -import sh.rhiobet.lalafin.path.InvalidPathException; -import sh.rhiobet.lalafin.path.PathFactory; +import sh.rhiobet.lalafin.core.access.AccessService; +import sh.rhiobet.lalafin.core.path.exception.InvalidPathException; +import sh.rhiobet.lalafin.core.path.model.PathFactory; +import sh.rhiobet.lalafin.file.model.FileInfoBase; +import sh.rhiobet.lalafin.file.model.FileMetadataService; @Authenticated -@Path("/api/v1/private/file") +@Path("/v1/api/private/file") public class FilePrivateAPI { @Inject FileMetadataService fileMetadataService; @@ -41,7 +41,7 @@ public class FilePrivateAPI { @Path("/{names: .+}") @Produces(MediaType.APPLICATION_JSON) public Response getFileInfo(List names) { - sh.rhiobet.lalafin.path.Path path; + sh.rhiobet.lalafin.core.path.model.Path path; try { path = this.pathFactory.toPath(names); } catch (InvalidPathException ignored) { diff --git a/src/main/java/sh/rhiobet/lalafin/file/FileThumbnailPathPlugin.java b/src/main/java/sh/rhiobet/lalafin/file/thumbnail/FileThumbnailPathPlugin.java similarity index 85% rename from src/main/java/sh/rhiobet/lalafin/file/FileThumbnailPathPlugin.java rename to src/main/java/sh/rhiobet/lalafin/file/thumbnail/FileThumbnailPathPlugin.java index b5f3c1f..738beb5 100644 --- a/src/main/java/sh/rhiobet/lalafin/file/FileThumbnailPathPlugin.java +++ b/src/main/java/sh/rhiobet/lalafin/file/thumbnail/FileThumbnailPathPlugin.java @@ -1,4 +1,4 @@ -package sh.rhiobet.lalafin.file; +package sh.rhiobet.lalafin.file.thumbnail; import java.io.IOException; import java.io.OutputStream; @@ -10,11 +10,12 @@ import java.util.regex.Pattern; import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; import jakarta.inject.Named; -import sh.rhiobet.lalafin.path.FileSystemPath; -import sh.rhiobet.lalafin.path.Path; -import sh.rhiobet.lalafin.path.PathAccessor; -import sh.rhiobet.lalafin.path.PathPlugin; -import sh.rhiobet.lalafin.path.ZipEntryPath; +import sh.rhiobet.lalafin.file.configuration.FileConfiguration; +import sh.rhiobet.lalafin.core.path.model.FileSystemPath; +import sh.rhiobet.lalafin.core.path.model.Path; +import sh.rhiobet.lalafin.core.path.model.PathAccessor; +import sh.rhiobet.lalafin.core.path.model.ZipEntryPath; +import sh.rhiobet.lalafin.core.path.plugin.PathPlugin; @ApplicationScoped @Named("file/thumbnail")