Set overall structure
This commit is contained in:
@@ -1,7 +0,0 @@
|
|||||||
package sh.rhiobet.lalafin.access;
|
|
||||||
|
|
||||||
import sh.rhiobet.lalafin.path.Path;
|
|
||||||
|
|
||||||
public interface AccessService {
|
|
||||||
boolean checkAccess(Path path);
|
|
||||||
}
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package sh.rhiobet.lalafin.advent;
|
package sh.rhiobet.lalafin.advent.access;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
@@ -7,13 +7,13 @@ import java.util.regex.Pattern;
|
|||||||
import jakarta.enterprise.context.ApplicationScoped;
|
import jakarta.enterprise.context.ApplicationScoped;
|
||||||
import jakarta.inject.Inject;
|
import jakarta.inject.Inject;
|
||||||
import jakarta.inject.Named;
|
import jakarta.inject.Named;
|
||||||
import sh.rhiobet.lalafin.access.AccessService;
|
import sh.rhiobet.lalafin.advent.configuration.AdventConfiguration;
|
||||||
import sh.rhiobet.lalafin.path.Path;
|
import sh.rhiobet.lalafin.core.access.AccessService;
|
||||||
|
import sh.rhiobet.lalafin.core.path.model.Path;
|
||||||
|
|
||||||
@ApplicationScoped
|
@ApplicationScoped
|
||||||
@Named("advent")
|
@Named("advent")
|
||||||
public class AdventAccessService implements AccessService {
|
public class AdventAccessService implements AccessService {
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
AdventConfiguration adventConfiguration;
|
AdventConfiguration adventConfiguration;
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package sh.rhiobet.lalafin.advent;
|
package sh.rhiobet.lalafin.advent.configuration;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import io.smallrye.config.ConfigMapping;
|
import io.smallrye.config.ConfigMapping;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package sh.rhiobet.lalafin.advent;
|
package sh.rhiobet.lalafin.advent.thumbnail;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.OutputStream;
|
import java.io.OutputStream;
|
||||||
@@ -10,10 +10,11 @@ import jakarta.decorator.Decorator;
|
|||||||
import jakarta.decorator.Delegate;
|
import jakarta.decorator.Delegate;
|
||||||
import jakarta.inject.Inject;
|
import jakarta.inject.Inject;
|
||||||
import jakarta.inject.Named;
|
import jakarta.inject.Named;
|
||||||
|
import sh.rhiobet.lalafin.advent.access.AdventAccessService;
|
||||||
import sh.rhiobet.lalafin.api.configuration.FileApiConfiguration;
|
import sh.rhiobet.lalafin.api.configuration.FileApiConfiguration;
|
||||||
import sh.rhiobet.lalafin.path.Path;
|
import sh.rhiobet.lalafin.core.path.model.Path;
|
||||||
import sh.rhiobet.lalafin.path.PathAccessor;
|
import sh.rhiobet.lalafin.core.path.model.PathAccessor;
|
||||||
import sh.rhiobet.lalafin.path.PathPlugin;
|
import sh.rhiobet.lalafin.core.path.plugin.PathPlugin;
|
||||||
|
|
||||||
@Decorator
|
@Decorator
|
||||||
public class AdventThumbnailPathPlugin extends PathAccessor implements PathPlugin {
|
public class AdventThumbnailPathPlugin extends PathAccessor implements PathPlugin {
|
||||||
@@ -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);
|
||||||
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package sh.rhiobet.lalafin.path;
|
package sh.rhiobet.lalafin.core.path.exception;
|
||||||
|
|
||||||
public class InvalidPathException extends Exception {
|
public class InvalidPathException extends Exception {
|
||||||
public InvalidPathException(String message) {
|
public InvalidPathException(String message) {
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package sh.rhiobet.lalafin.path;
|
package sh.rhiobet.lalafin.core.path.model;
|
||||||
|
|
||||||
import jakarta.ws.rs.core.PathSegment;
|
import jakarta.ws.rs.core.PathSegment;
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package sh.rhiobet.lalafin.path;
|
package sh.rhiobet.lalafin.core.path.model;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package sh.rhiobet.lalafin.path;
|
package sh.rhiobet.lalafin.core.path.model;
|
||||||
|
|
||||||
public abstract class PathAccessor {
|
public abstract class PathAccessor {
|
||||||
protected java.nio.file.Path getAbsolutePath(Path path) {
|
protected java.nio.file.Path getAbsolutePath(Path path) {
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package sh.rhiobet.lalafin.path;
|
package sh.rhiobet.lalafin.core.path.model;
|
||||||
|
|
||||||
import jakarta.enterprise.context.ApplicationScoped;
|
import jakarta.enterprise.context.ApplicationScoped;
|
||||||
import jakarta.inject.Inject;
|
import jakarta.inject.Inject;
|
||||||
@@ -10,6 +10,7 @@ import java.nio.file.Paths;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import sh.rhiobet.lalafin.api.configuration.FileApiConfiguration;
|
import sh.rhiobet.lalafin.api.configuration.FileApiConfiguration;
|
||||||
|
import sh.rhiobet.lalafin.core.path.exception.InvalidPathException;
|
||||||
|
|
||||||
@ApplicationScoped
|
@ApplicationScoped
|
||||||
public class PathFactory {
|
public class PathFactory {
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package sh.rhiobet.lalafin.path;
|
package sh.rhiobet.lalafin.core.path.model;
|
||||||
|
|
||||||
import jakarta.ws.rs.core.PathSegment;
|
import jakarta.ws.rs.core.PathSegment;
|
||||||
|
|
||||||
@@ -1,9 +1,11 @@
|
|||||||
package sh.rhiobet.lalafin.path;
|
package sh.rhiobet.lalafin.core.path.plugin;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.OutputStream;
|
import java.io.OutputStream;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
|
import sh.rhiobet.lalafin.core.path.model.Path;
|
||||||
|
|
||||||
public interface PathPlugin {
|
public interface PathPlugin {
|
||||||
Optional<String> resolveURI(Path path);
|
Optional<String> resolveURI(Path path);
|
||||||
OutputStream getOutputStream(Path path) throws IOException;
|
OutputStream getOutputStream(Path path) throws IOException;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package sh.rhiobet.lalafin.file;
|
package sh.rhiobet.lalafin.file.access;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@@ -6,8 +6,9 @@ import io.quarkus.security.identity.SecurityIdentity;
|
|||||||
import jakarta.enterprise.context.ApplicationScoped;
|
import jakarta.enterprise.context.ApplicationScoped;
|
||||||
import jakarta.inject.Inject;
|
import jakarta.inject.Inject;
|
||||||
import jakarta.inject.Named;
|
import jakarta.inject.Named;
|
||||||
import sh.rhiobet.lalafin.access.AccessService;
|
import sh.rhiobet.lalafin.core.access.AccessService;
|
||||||
import sh.rhiobet.lalafin.path.Path;
|
import sh.rhiobet.lalafin.core.path.model.Path;
|
||||||
|
import sh.rhiobet.lalafin.file.configuration.FileConfiguration;
|
||||||
|
|
||||||
@ApplicationScoped
|
@ApplicationScoped
|
||||||
@Named("file/role")
|
@Named("file/role")
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package sh.rhiobet.lalafin.file;
|
package sh.rhiobet.lalafin.file.configuration;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
17
src/main/java/sh/rhiobet/lalafin/file/model/FileInfo.java
Normal file
17
src/main/java/sh/rhiobet/lalafin/file/model/FileInfo.java
Normal file
@@ -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, "");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
package sh.rhiobet.lalafin.file.model;
|
||||||
|
|
||||||
|
import io.quarkus.runtime.annotations.RegisterForReflection;
|
||||||
|
|
||||||
|
@RegisterForReflection
|
||||||
|
public abstract class FileInfoBase implements Comparable<FileInfoBase> {
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package sh.rhiobet.lalafin.file;
|
package sh.rhiobet.lalafin.file.model;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
@@ -6,13 +6,11 @@ import jakarta.enterprise.context.ApplicationScoped;
|
|||||||
import jakarta.inject.Inject;
|
import jakarta.inject.Inject;
|
||||||
import jakarta.inject.Named;
|
import jakarta.inject.Named;
|
||||||
import sh.rhiobet.lalafin.LalafinConfiguration;
|
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.internal.redis.FileTokenProvider;
|
||||||
import sh.rhiobet.lalafin.api.model.FileInfo;
|
import sh.rhiobet.lalafin.core.path.model.Path;
|
||||||
import sh.rhiobet.lalafin.api.model.FileInfoBase;
|
import sh.rhiobet.lalafin.core.path.plugin.PathPlugin;
|
||||||
import sh.rhiobet.lalafin.api.model.FolderInfo;
|
import sh.rhiobet.lalafin.file.ThumbnailService;
|
||||||
import sh.rhiobet.lalafin.path.Path;
|
import sh.rhiobet.lalafin.file.configuration.FileConfiguration;
|
||||||
import sh.rhiobet.lalafin.path.PathPlugin;
|
|
||||||
|
|
||||||
@ApplicationScoped
|
@ApplicationScoped
|
||||||
public class FileMetadataService {
|
public class FileMetadataService {
|
||||||
@@ -29,9 +27,6 @@ public class FileMetadataService {
|
|||||||
@Named("file/thumbnail")
|
@Named("file/thumbnail")
|
||||||
PathPlugin thumbnailPathPlugin;
|
PathPlugin thumbnailPathPlugin;
|
||||||
|
|
||||||
@Inject
|
|
||||||
AdventAccessService adventAccessService;
|
|
||||||
|
|
||||||
public FileInfoBase getInfo(Path filePath, FileTokenProvider fileTokenProvider) {
|
public FileInfoBase getInfo(Path filePath, FileTokenProvider fileTokenProvider) {
|
||||||
if (filePath.exists()) {
|
if (filePath.exists()) {
|
||||||
Optional<String> thumbUrl = this.thumbnailPathPlugin.resolveURI(filePath);
|
Optional<String> thumbUrl = this.thumbnailPathPlugin.resolveURI(filePath);
|
||||||
22
src/main/java/sh/rhiobet/lalafin/file/model/FolderInfo.java
Normal file
22
src/main/java/sh/rhiobet/lalafin/file/model/FolderInfo.java
Normal file
@@ -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<FileInfoBase> 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, "");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -12,14 +12,14 @@ import jakarta.ws.rs.core.MediaType;
|
|||||||
import jakarta.ws.rs.core.PathSegment;
|
import jakarta.ws.rs.core.PathSegment;
|
||||||
import jakarta.ws.rs.core.Response;
|
import jakarta.ws.rs.core.Response;
|
||||||
import io.quarkus.security.Authenticated;
|
import io.quarkus.security.Authenticated;
|
||||||
import sh.rhiobet.lalafin.access.AccessService;
|
import sh.rhiobet.lalafin.core.access.AccessService;
|
||||||
import sh.rhiobet.lalafin.api.model.FileInfoBase;
|
import sh.rhiobet.lalafin.core.path.exception.InvalidPathException;
|
||||||
import sh.rhiobet.lalafin.file.FileMetadataService;
|
import sh.rhiobet.lalafin.core.path.model.PathFactory;
|
||||||
import sh.rhiobet.lalafin.path.InvalidPathException;
|
import sh.rhiobet.lalafin.file.model.FileInfoBase;
|
||||||
import sh.rhiobet.lalafin.path.PathFactory;
|
import sh.rhiobet.lalafin.file.model.FileMetadataService;
|
||||||
|
|
||||||
@Authenticated
|
@Authenticated
|
||||||
@Path("/api/v1/private/file")
|
@Path("/v1/api/private/file")
|
||||||
public class FilePrivateAPI {
|
public class FilePrivateAPI {
|
||||||
@Inject
|
@Inject
|
||||||
FileMetadataService fileMetadataService;
|
FileMetadataService fileMetadataService;
|
||||||
@@ -41,7 +41,7 @@ public class FilePrivateAPI {
|
|||||||
@Path("/{names: .+}")
|
@Path("/{names: .+}")
|
||||||
@Produces(MediaType.APPLICATION_JSON)
|
@Produces(MediaType.APPLICATION_JSON)
|
||||||
public Response getFileInfo(List<PathSegment> names) {
|
public Response getFileInfo(List<PathSegment> names) {
|
||||||
sh.rhiobet.lalafin.path.Path path;
|
sh.rhiobet.lalafin.core.path.model.Path path;
|
||||||
try {
|
try {
|
||||||
path = this.pathFactory.toPath(names);
|
path = this.pathFactory.toPath(names);
|
||||||
} catch (InvalidPathException ignored) {
|
} catch (InvalidPathException ignored) {
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
package sh.rhiobet.lalafin.file;
|
package sh.rhiobet.lalafin.file.thumbnail;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.OutputStream;
|
import java.io.OutputStream;
|
||||||
@@ -10,11 +10,12 @@ import java.util.regex.Pattern;
|
|||||||
import jakarta.enterprise.context.ApplicationScoped;
|
import jakarta.enterprise.context.ApplicationScoped;
|
||||||
import jakarta.inject.Inject;
|
import jakarta.inject.Inject;
|
||||||
import jakarta.inject.Named;
|
import jakarta.inject.Named;
|
||||||
import sh.rhiobet.lalafin.path.FileSystemPath;
|
import sh.rhiobet.lalafin.file.configuration.FileConfiguration;
|
||||||
import sh.rhiobet.lalafin.path.Path;
|
import sh.rhiobet.lalafin.core.path.model.FileSystemPath;
|
||||||
import sh.rhiobet.lalafin.path.PathAccessor;
|
import sh.rhiobet.lalafin.core.path.model.Path;
|
||||||
import sh.rhiobet.lalafin.path.PathPlugin;
|
import sh.rhiobet.lalafin.core.path.model.PathAccessor;
|
||||||
import sh.rhiobet.lalafin.path.ZipEntryPath;
|
import sh.rhiobet.lalafin.core.path.model.ZipEntryPath;
|
||||||
|
import sh.rhiobet.lalafin.core.path.plugin.PathPlugin;
|
||||||
|
|
||||||
@ApplicationScoped
|
@ApplicationScoped
|
||||||
@Named("file/thumbnail")
|
@Named("file/thumbnail")
|
||||||
Reference in New Issue
Block a user