Set overall structure

This commit is contained in:
2026-04-21 18:07:15 +02:00
parent 5e453dad51
commit c7ee90cbaa
20 changed files with 120 additions and 50 deletions

View File

@@ -1,7 +0,0 @@
package sh.rhiobet.lalafin.access;
import sh.rhiobet.lalafin.path.Path;
public interface AccessService {
boolean checkAccess(Path path);
}

View File

@@ -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;

View File

@@ -1,4 +1,4 @@
package sh.rhiobet.lalafin.advent;
package sh.rhiobet.lalafin.advent.configuration;
import java.util.List;
import io.smallrye.config.ConfigMapping;

View File

@@ -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 {

View File

@@ -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);
}

View File

@@ -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) {

View File

@@ -1,4 +1,4 @@
package sh.rhiobet.lalafin.path;
package sh.rhiobet.lalafin.core.path.model;
import jakarta.ws.rs.core.PathSegment;

View File

@@ -1,4 +1,4 @@
package sh.rhiobet.lalafin.path;
package sh.rhiobet.lalafin.core.path.model;
import java.io.IOException;
import java.io.InputStream;

View File

@@ -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) {

View File

@@ -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 {

View File

@@ -1,4 +1,4 @@
package sh.rhiobet.lalafin.path;
package sh.rhiobet.lalafin.core.path.model;
import jakarta.ws.rs.core.PathSegment;

View File

@@ -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<String> resolveURI(Path path);
OutputStream getOutputStream(Path path) throws IOException;

View File

@@ -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")

View File

@@ -1,4 +1,4 @@
package sh.rhiobet.lalafin.file;
package sh.rhiobet.lalafin.file.configuration;
import java.util.List;
import java.util.Optional;

View 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, "");
}
}

View File

@@ -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);
}
}

View File

@@ -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<String> thumbUrl = this.thumbnailPathPlugin.resolveURI(filePath);

View 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, "");
}
}

View File

@@ -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<PathSegment> names) {
sh.rhiobet.lalafin.path.Path path;
sh.rhiobet.lalafin.core.path.model.Path path;
try {
path = this.pathFactory.toPath(names);
} catch (InvalidPathException ignored) {

View File

@@ -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")