diff --git a/Makefile b/Makefile
index ce993ee..2440f50 100644
--- a/Makefile
+++ b/Makefile
@@ -1,5 +1,5 @@
executable:
- ./mvnw package -Pnative $(EXECUTABLE_ARGS)
+ ./mvnw package -Pnative -Dquarkus.native.additional-build-args="--initialize-at-run-time=sun.java2d.Disposer" $(EXECUTABLE_ARGS)
image:
docker build -t rhiobet/lalafin$(IMAGE_TAG) . -f src/main/docker/Dockerfile.native
diff --git a/pom.xml b/pom.xml
index a0b3afe..c25d865 100644
--- a/pom.xml
+++ b/pom.xml
@@ -12,10 +12,10 @@
11
UTF-8
UTF-8
- 2.15.0.Final
+ 3.4.1
quarkus-bom
io.quarkus
- 2.15.0.Final
+ 3.4.1
2.22.1
@@ -54,6 +54,10 @@
io.quarkus
quarkus-elytron-security-properties-file
+
+ io.quarkus
+ quarkus-redis-client
+
org.openimaj
core-image
diff --git a/src/main/java/sh/rhiobet/lalafin/api/FilePrivateAPI.java b/src/main/java/sh/rhiobet/lalafin/api/FilePrivateAPI.java
index 43c92f3..13ae4b4 100644
--- a/src/main/java/sh/rhiobet/lalafin/api/FilePrivateAPI.java
+++ b/src/main/java/sh/rhiobet/lalafin/api/FilePrivateAPI.java
@@ -2,19 +2,20 @@ package sh.rhiobet.lalafin.api;
import java.util.ArrayList;
import java.util.List;
-import javax.inject.Inject;
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.Context;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.PathSegment;
-import javax.ws.rs.core.Response;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.Context;
+import jakarta.ws.rs.core.MediaType;
+import jakarta.ws.rs.core.PathSegment;
+import jakarta.ws.rs.core.Response;
import io.quarkus.security.Authenticated;
import io.quarkus.security.identity.SecurityIdentity;
import io.vertx.core.http.HttpServerRequest;
import sh.rhiobet.lalafin.api.advent.AdventAccessService;
-import sh.rhiobet.lalafin.api.internal.FileTokenProvider;
+import sh.rhiobet.lalafin.api.internal.RedisProviders;
+import sh.rhiobet.lalafin.api.internal.redis.FileTokenProvider;
import sh.rhiobet.lalafin.api.internal.RoleAccessService;
import sh.rhiobet.lalafin.api.model.FileInfoBase;
import sh.rhiobet.lalafin.file.FileInfoService;
@@ -37,6 +38,9 @@ public class FilePrivateAPI {
@Inject
AdventAccessService adventAccessService;
+ @Inject
+ RedisProviders redisProviders;
+
@GET
@Path("/")
@Produces(MediaType.APPLICATION_JSON)
@@ -54,7 +58,7 @@ public class FilePrivateAPI {
}
FileTokenProvider fileTokenProvider =
- new FileTokenProvider(securityIdentity.getPrincipal().getName(),
+ redisProviders.newFileTokenProvider(securityIdentity.getPrincipal().getName(),
request.remoteAddress().host().toString());
FileInfoBase fileInfo = fileInfoService.getInfo(names, fileTokenProvider);
diff --git a/src/main/java/sh/rhiobet/lalafin/api/FilePublicAPI.java b/src/main/java/sh/rhiobet/lalafin/api/FilePublicAPI.java
index f35444c..50732f2 100644
--- a/src/main/java/sh/rhiobet/lalafin/api/FilePublicAPI.java
+++ b/src/main/java/sh/rhiobet/lalafin/api/FilePublicAPI.java
@@ -3,17 +3,18 @@ package sh.rhiobet.lalafin.api;
import java.net.URLDecoder;
import java.nio.charset.StandardCharsets;
import java.util.List;
-import javax.inject.Inject;
-import javax.ws.rs.GET;
-import javax.ws.rs.HeaderParam;
-import javax.ws.rs.Path;
-import javax.ws.rs.core.Context;
-import javax.ws.rs.core.PathSegment;
-import javax.ws.rs.core.Response;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.HeaderParam;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.core.Context;
+import jakarta.ws.rs.core.PathSegment;
+import jakarta.ws.rs.core.Response;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.quarkus.runtime.annotations.RegisterForReflection;
import io.vertx.core.http.HttpServerRequest;
+import sh.rhiobet.lalafin.api.internal.RedisProviders;
import sh.rhiobet.lalafin.api.model.FileInfo;
import sh.rhiobet.lalafin.api.model.FileInfoBase;
import sh.rhiobet.lalafin.api.model.FileToken;
@@ -22,7 +23,6 @@ import sh.rhiobet.lalafin.file.FileInfoService;
import sh.rhiobet.lalafin.file.FileServeService;
import sh.rhiobet.lalafin.api.configuration.FolderApiConfiguration;
import sh.rhiobet.lalafin.api.configuration.FolderApiConfiguration.Token;
-import sh.rhiobet.lalafin.api.internal.RSAKey;
@RegisterForReflection
@Path("/api/public/file")
@@ -39,13 +39,14 @@ public class FilePublicAPI {
@Inject
FolderApiConfiguration folderApiConfiguration;
+ @Inject
+ RedisProviders redisProviders;
+
@GET
@Path("/token/{fileToken}{fileName: (/.*)?}")
- public Response getFileFromToken(String fileToken,
- @HeaderParam("Range") String range) throws JsonProcessingException {
- String decryptedToken = RSAKey.decrypt(fileToken);
- ObjectMapper obj = new ObjectMapper();
- FileToken token = obj.readValue(decryptedToken, FileToken.class);
+ public Response getFileFromToken(String fileToken, @HeaderParam("Range") String range) {
+ FileToken token = redisProviders.getRedisDataSource().value(FileToken.class).get(
+ "fileToken-" + fileToken);
String decodedFile = URLDecoder.decode(token.file, StandardCharsets.UTF_8);
if (request.remoteAddress().host().toString().equals(token.ip)
&& System.currentTimeMillis() < token.timestamp + 172800000) {
diff --git a/src/main/java/sh/rhiobet/lalafin/api/UploadPrivateAPI.java b/src/main/java/sh/rhiobet/lalafin/api/UploadPrivateAPI.java
index 708bff0..2345a33 100644
--- a/src/main/java/sh/rhiobet/lalafin/api/UploadPrivateAPI.java
+++ b/src/main/java/sh/rhiobet/lalafin/api/UploadPrivateAPI.java
@@ -1,14 +1,14 @@
package sh.rhiobet.lalafin.api;
-import javax.inject.Inject;
-import javax.ws.rs.Consumes;
-import javax.ws.rs.DELETE;
-import javax.ws.rs.GET;
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.DELETE;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+import jakarta.ws.rs.core.Response;
import org.jboss.resteasy.reactive.MultipartForm;
import io.quarkus.security.Authenticated;
import io.quarkus.security.identity.SecurityIdentity;
diff --git a/src/main/java/sh/rhiobet/lalafin/api/UploadPublicAPI.java b/src/main/java/sh/rhiobet/lalafin/api/UploadPublicAPI.java
index d354b83..5794cc2 100644
--- a/src/main/java/sh/rhiobet/lalafin/api/UploadPublicAPI.java
+++ b/src/main/java/sh/rhiobet/lalafin/api/UploadPublicAPI.java
@@ -1,10 +1,10 @@
package sh.rhiobet.lalafin.api;
-import javax.inject.Inject;
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.QueryParam;
-import javax.ws.rs.core.Response;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.QueryParam;
+import jakarta.ws.rs.core.Response;
import io.quarkus.runtime.annotations.RegisterForReflection;
import sh.rhiobet.lalafin.LalafinConfiguration;
import sh.rhiobet.lalafin.upload.UploadService;
diff --git a/src/main/java/sh/rhiobet/lalafin/api/advent/AdventAccessService.java b/src/main/java/sh/rhiobet/lalafin/api/advent/AdventAccessService.java
index 4486015..f6dc7e4 100644
--- a/src/main/java/sh/rhiobet/lalafin/api/advent/AdventAccessService.java
+++ b/src/main/java/sh/rhiobet/lalafin/api/advent/AdventAccessService.java
@@ -2,9 +2,9 @@ package sh.rhiobet.lalafin.api.advent;
import java.time.LocalDateTime;
import java.util.List;
-import javax.enterprise.context.ApplicationScoped;
-import javax.inject.Inject;
-import javax.ws.rs.core.PathSegment;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.core.PathSegment;
import sh.rhiobet.lalafin.api.advent.AdventConfiguration.AdventEvent;
@ApplicationScoped
diff --git a/src/main/java/sh/rhiobet/lalafin/api/internal/FileTokenProvider.java b/src/main/java/sh/rhiobet/lalafin/api/internal/FileTokenProvider.java
deleted file mode 100644
index eb8412a..0000000
--- a/src/main/java/sh/rhiobet/lalafin/api/internal/FileTokenProvider.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package sh.rhiobet.lalafin.api.internal;
-
-import java.net.URLEncoder;
-import java.nio.charset.StandardCharsets;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import sh.rhiobet.lalafin.api.model.FileToken;
-
-public class FileTokenProvider {
-
- private String username;
- private String ip;
-
- public FileTokenProvider(String username, String ip) {
- this.username = username;
- this.ip = ip;
- }
-
- public String getFileToken(String file) {
- FileToken token = new FileToken(username, System.currentTimeMillis(), ip, file);
- ObjectMapper obj = new ObjectMapper();
- try {
- return URLEncoder.encode(RSAKey.encrypt(obj.writeValueAsString(token)),
- StandardCharsets.UTF_8);
- } catch (JsonProcessingException e) {
- throw new RuntimeException(e);
- }
- }
-
- public String getUsername() {
- return this.username;
- }
-
-}
diff --git a/src/main/java/sh/rhiobet/lalafin/api/internal/RSAKey.java b/src/main/java/sh/rhiobet/lalafin/api/internal/RSAKey.java
deleted file mode 100644
index 432313d..0000000
--- a/src/main/java/sh/rhiobet/lalafin/api/internal/RSAKey.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package sh.rhiobet.lalafin.api.internal;
-
-import java.security.InvalidAlgorithmParameterException;
-import java.security.InvalidKeyException;
-import java.security.NoSuchAlgorithmException;
-import java.security.SecureRandom;
-import java.util.Base64;
-import javax.crypto.BadPaddingException;
-import javax.crypto.Cipher;
-import javax.crypto.IllegalBlockSizeException;
-import javax.crypto.KeyGenerator;
-import javax.crypto.NoSuchPaddingException;
-import javax.crypto.SecretKey;
-import javax.crypto.spec.IvParameterSpec;
-
-public class RSAKey {
-
- private static volatile SecretKey secretKey = null;
- private static volatile IvParameterSpec ivParameterSpec = null;
-
-
- private static SecretKey getKey() throws NoSuchAlgorithmException {
- if (secretKey == null) {
- KeyGenerator keyGen = KeyGenerator.getInstance("AES");
- keyGen.init(256);
- secretKey = keyGen.generateKey();
- byte[] iv = new byte[16];
- new SecureRandom().nextBytes(iv);
- ivParameterSpec = new IvParameterSpec(iv);
- }
- return secretKey;
- }
-
- public static String encrypt(String input) {
- try {
- Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
- cipher.init(Cipher.ENCRYPT_MODE, getKey(), ivParameterSpec);
- byte[] cipherText = cipher.doFinal(input.getBytes());
- return Base64.getEncoder().encodeToString(cipherText);
- } catch (NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException
- | IllegalBlockSizeException | BadPaddingException
- | InvalidAlgorithmParameterException e) {
- throw new RuntimeException("Could not create cipher", e);
- // Should never happen tbh
- }
- }
-
- public static String decrypt(String input) {
- try {
- Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
- cipher.init(Cipher.DECRYPT_MODE, getKey(), ivParameterSpec);
- byte[] plainText = cipher.doFinal(Base64.getDecoder().decode(input));
- return new String(plainText);
- } catch (NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException
- | IllegalBlockSizeException | BadPaddingException
- | InvalidAlgorithmParameterException e) {
- throw new RuntimeException("Could not create cipher", e);
- // Should never happen tbh
- }
- }
-
-}
diff --git a/src/main/java/sh/rhiobet/lalafin/api/internal/RedisProviders.java b/src/main/java/sh/rhiobet/lalafin/api/internal/RedisProviders.java
new file mode 100644
index 0000000..20dbc9c
--- /dev/null
+++ b/src/main/java/sh/rhiobet/lalafin/api/internal/RedisProviders.java
@@ -0,0 +1,30 @@
+package sh.rhiobet.lalafin.api.internal;
+
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
+import java.util.UUID;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import io.quarkus.redis.datasource.RedisDataSource;
+import io.quarkus.redis.datasource.value.SetArgs;
+import io.quarkus.redis.datasource.value.ValueCommands;
+import sh.rhiobet.lalafin.api.internal.redis.FileTokenProvider;
+import sh.rhiobet.lalafin.api.model.FileToken;
+
+@ApplicationScoped
+public class RedisProviders {
+
+ @Inject
+ RedisDataSource redisDataSource;
+
+ public FileTokenProvider newFileTokenProvider(String username, String ip) {
+ return new FileTokenProvider(username, ip, this);
+ }
+
+ public RedisDataSource getRedisDataSource() {
+ return this.redisDataSource;
+ }
+
+}
diff --git a/src/main/java/sh/rhiobet/lalafin/api/internal/RoleAccessService.java b/src/main/java/sh/rhiobet/lalafin/api/internal/RoleAccessService.java
index 4a6a650..3ec220b 100644
--- a/src/main/java/sh/rhiobet/lalafin/api/internal/RoleAccessService.java
+++ b/src/main/java/sh/rhiobet/lalafin/api/internal/RoleAccessService.java
@@ -3,9 +3,9 @@ package sh.rhiobet.lalafin.api.internal;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
-import javax.enterprise.context.ApplicationScoped;
-import javax.inject.Inject;
-import javax.ws.rs.core.PathSegment;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.core.PathSegment;
import sh.rhiobet.lalafin.api.configuration.FileApiConfiguration;
import sh.rhiobet.lalafin.api.configuration.FileApiConfiguration.Route;
diff --git a/src/main/java/sh/rhiobet/lalafin/api/internal/redis/FileTokenProvider.java b/src/main/java/sh/rhiobet/lalafin/api/internal/redis/FileTokenProvider.java
new file mode 100644
index 0000000..91c4269
--- /dev/null
+++ b/src/main/java/sh/rhiobet/lalafin/api/internal/redis/FileTokenProvider.java
@@ -0,0 +1,37 @@
+package sh.rhiobet.lalafin.api.internal.redis;
+
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
+import java.util.UUID;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import io.quarkus.redis.datasource.RedisDataSource;
+import io.quarkus.redis.datasource.value.SetArgs;
+import sh.rhiobet.lalafin.api.internal.RedisProviders;
+import sh.rhiobet.lalafin.api.model.FileToken;
+
+public class FileTokenProvider {
+ private String username;
+ private String ip;
+ private RedisProviders redisProviders;
+
+ public FileTokenProvider(String username, String ip, RedisProviders redisProviders) {
+ this.username = username;
+ this.ip = ip;
+ this.redisProviders = redisProviders;
+ }
+
+ public String getFileToken(String file) {
+ FileToken token = new FileToken(username, System.currentTimeMillis(), ip, file);
+ String uniqueID = UUID.randomUUID().toString();
+
+ this.redisProviders.getRedisDataSource().value(FileToken.class).set(
+ "fileToken-" + uniqueID, token, new SetArgs().pxAt(System.currentTimeMillis() + 86400000));
+
+ return uniqueID;
+ }
+
+ public String getUsername() {
+ return this.username;
+ }
+}
diff --git a/src/main/java/sh/rhiobet/lalafin/api/model/UploadForm.java b/src/main/java/sh/rhiobet/lalafin/api/model/UploadForm.java
index 1a2c2c0..2aa41d1 100644
--- a/src/main/java/sh/rhiobet/lalafin/api/model/UploadForm.java
+++ b/src/main/java/sh/rhiobet/lalafin/api/model/UploadForm.java
@@ -1,7 +1,7 @@
package sh.rhiobet.lalafin.api.model;
-import javax.ws.rs.FormParam;
-import javax.ws.rs.core.MediaType;
+import jakarta.ws.rs.FormParam;
+import jakarta.ws.rs.core.MediaType;
import org.jboss.resteasy.reactive.PartType;
import org.jboss.resteasy.reactive.multipart.FileUpload;
diff --git a/src/main/java/sh/rhiobet/lalafin/api/thumbnail/JellyfinThumbnailGenerator.java b/src/main/java/sh/rhiobet/lalafin/api/thumbnail/JellyfinThumbnailGenerator.java
index ee2395d..069ea29 100644
--- a/src/main/java/sh/rhiobet/lalafin/api/thumbnail/JellyfinThumbnailGenerator.java
+++ b/src/main/java/sh/rhiobet/lalafin/api/thumbnail/JellyfinThumbnailGenerator.java
@@ -8,8 +8,8 @@ import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
import java.util.Optional;
-import javax.enterprise.context.ApplicationScoped;
-import javax.inject.Inject;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
import org.eclipse.microprofile.config.inject.ConfigProperty;
import org.im4java.core.ConvertCmd;
import org.im4java.core.IM4JavaException;
diff --git a/src/main/java/sh/rhiobet/lalafin/file/FileInfoService.java b/src/main/java/sh/rhiobet/lalafin/file/FileInfoService.java
index 4626541..5582128 100644
--- a/src/main/java/sh/rhiobet/lalafin/file/FileInfoService.java
+++ b/src/main/java/sh/rhiobet/lalafin/file/FileInfoService.java
@@ -9,13 +9,13 @@ import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
import java.util.stream.Stream;
-import javax.enterprise.context.ApplicationScoped;
-import javax.inject.Inject;
-import javax.ws.rs.core.PathSegment;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.core.PathSegment;
import sh.rhiobet.lalafin.LalafinConfiguration;
import sh.rhiobet.lalafin.api.advent.AdventAccessService;
import sh.rhiobet.lalafin.api.configuration.FileApiConfiguration;
-import sh.rhiobet.lalafin.api.internal.FileTokenProvider;
+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;
diff --git a/src/main/java/sh/rhiobet/lalafin/file/FileResource.java b/src/main/java/sh/rhiobet/lalafin/file/FileResource.java
index f50e79c..92ce714 100644
--- a/src/main/java/sh/rhiobet/lalafin/file/FileResource.java
+++ b/src/main/java/sh/rhiobet/lalafin/file/FileResource.java
@@ -4,19 +4,20 @@ import java.net.URI;
import java.util.ArrayList;
import java.util.List;
-import javax.inject.Inject;
-import javax.ws.rs.GET;
-import javax.ws.rs.HeaderParam;
-import javax.ws.rs.Path;
-import javax.ws.rs.core.Context;
-import javax.ws.rs.core.PathSegment;
-import javax.ws.rs.core.Response;
-import javax.ws.rs.core.UriInfo;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.HeaderParam;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.core.Context;
+import jakarta.ws.rs.core.PathSegment;
+import jakarta.ws.rs.core.Response;
+import jakarta.ws.rs.core.UriInfo;
import io.quarkus.security.Authenticated;
import io.quarkus.security.identity.SecurityIdentity;
import io.vertx.core.http.HttpServerRequest;
import sh.rhiobet.lalafin.api.advent.AdventAccessService;
-import sh.rhiobet.lalafin.api.internal.FileTokenProvider;
+import sh.rhiobet.lalafin.api.internal.RedisProviders;
+import sh.rhiobet.lalafin.api.internal.redis.FileTokenProvider;
import sh.rhiobet.lalafin.api.internal.RoleAccessService;
import sh.rhiobet.lalafin.api.model.FileInfo;
import sh.rhiobet.lalafin.api.model.FileInfoBase;
@@ -46,6 +47,9 @@ public class FileResource {
@Inject
AdventAccessService adventAccessService;
+ @Inject
+ RedisProviders redisProviders;
+
@GET
@Path("/")
public Response serveRoot(@HeaderParam("Range") String range) {
@@ -61,7 +65,7 @@ public class FileResource {
}
FileTokenProvider fileTokenProvider =
- new FileTokenProvider(securityIdentity.getPrincipal().getName(),
+ redisProviders.newFileTokenProvider(securityIdentity.getPrincipal().getName(),
request.remoteAddress().host().toString());
FileInfoBase fileInfoBase = fileInfoService.getInfo(names, fileTokenProvider);
diff --git a/src/main/java/sh/rhiobet/lalafin/file/FileServeService.java b/src/main/java/sh/rhiobet/lalafin/file/FileServeService.java
index b0835b9..5ea844d 100644
--- a/src/main/java/sh/rhiobet/lalafin/file/FileServeService.java
+++ b/src/main/java/sh/rhiobet/lalafin/file/FileServeService.java
@@ -8,10 +8,10 @@ import java.nio.channels.FileChannel;
import java.nio.charset.StandardCharsets;
import java.nio.file.Path;
import java.nio.file.Paths;
-import javax.enterprise.context.ApplicationScoped;
-import javax.inject.Inject;
-import javax.ws.rs.core.Response;
-import javax.ws.rs.core.Response.ResponseBuilder;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.core.Response;
+import jakarta.ws.rs.core.Response.ResponseBuilder;
import io.quarkus.qute.Location;
import io.quarkus.qute.Template;
import sh.rhiobet.lalafin.LalafinConfiguration;
diff --git a/src/main/java/sh/rhiobet/lalafin/file/ThumbnailService.java b/src/main/java/sh/rhiobet/lalafin/file/ThumbnailService.java
index f5d3e86..87a93e7 100644
--- a/src/main/java/sh/rhiobet/lalafin/file/ThumbnailService.java
+++ b/src/main/java/sh/rhiobet/lalafin/file/ThumbnailService.java
@@ -11,9 +11,9 @@ import java.util.Optional;
import java.util.stream.Stream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
-import javax.enterprise.context.ApplicationScoped;
-import javax.enterprise.inject.Instance;
-import javax.inject.Inject;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.enterprise.inject.Instance;
+import jakarta.inject.Inject;
import org.im4java.core.ConvertCmd;
import org.im4java.core.IM4JavaException;
import org.im4java.core.IMOperation;
diff --git a/src/main/java/sh/rhiobet/lalafin/file/ViewerResource.java b/src/main/java/sh/rhiobet/lalafin/file/ViewerResource.java
index 7a79ae7..cd12d99 100644
--- a/src/main/java/sh/rhiobet/lalafin/file/ViewerResource.java
+++ b/src/main/java/sh/rhiobet/lalafin/file/ViewerResource.java
@@ -2,18 +2,19 @@ package sh.rhiobet.lalafin.file;
import java.util.List;
-import javax.inject.Inject;
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.core.Context;
-import javax.ws.rs.core.PathSegment;
-import javax.ws.rs.core.Response;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.core.Context;
+import jakarta.ws.rs.core.PathSegment;
+import jakarta.ws.rs.core.Response;
import io.quarkus.security.Authenticated;
import io.quarkus.security.identity.SecurityIdentity;
import io.vertx.core.http.HttpServerRequest;
import sh.rhiobet.lalafin.api.advent.AdventAccessService;
-import sh.rhiobet.lalafin.api.internal.FileTokenProvider;
+import sh.rhiobet.lalafin.api.internal.RedisProviders;
+import sh.rhiobet.lalafin.api.internal.redis.FileTokenProvider;
import sh.rhiobet.lalafin.api.internal.RoleAccessService;
import sh.rhiobet.lalafin.api.model.FileInfoBase;
@@ -38,6 +39,9 @@ public class ViewerResource {
@Context
HttpServerRequest request;
+ @Inject
+ RedisProviders redisProviders;
+
@GET
@Path("/{names: .+}/{page}")
public Response view(List names, int page) {
@@ -47,7 +51,7 @@ public class ViewerResource {
}
FileTokenProvider fileTokenProvider =
- new FileTokenProvider(securityIdentity.getPrincipal().getName(),
+ redisProviders.newFileTokenProvider(securityIdentity.getPrincipal().getName(),
request.remoteAddress().host().toString());
FileInfoBase fileInfoBase = fileInfoService.getInfo(names, fileTokenProvider);
diff --git a/src/main/java/sh/rhiobet/lalafin/file/ViewerService.java b/src/main/java/sh/rhiobet/lalafin/file/ViewerService.java
index 4496520..37b5333 100644
--- a/src/main/java/sh/rhiobet/lalafin/file/ViewerService.java
+++ b/src/main/java/sh/rhiobet/lalafin/file/ViewerService.java
@@ -13,10 +13,10 @@ import java.util.List;
import java.util.stream.Collectors;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
-import javax.enterprise.context.ApplicationScoped;
-import javax.inject.Inject;
-import javax.ws.rs.core.Response;
-import javax.ws.rs.core.Response.ResponseBuilder;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.core.Response;
+import jakarta.ws.rs.core.Response.ResponseBuilder;
import io.quarkus.qute.Location;
import io.quarkus.qute.Template;
import io.quarkus.qute.TemplateInstance;
diff --git a/src/main/java/sh/rhiobet/lalafin/nzb/NzbResource.java b/src/main/java/sh/rhiobet/lalafin/nzb/NzbResource.java
index a160782..e12b63f 100644
--- a/src/main/java/sh/rhiobet/lalafin/nzb/NzbResource.java
+++ b/src/main/java/sh/rhiobet/lalafin/nzb/NzbResource.java
@@ -1,10 +1,10 @@
package sh.rhiobet.lalafin.nzb;
import io.quarkus.security.Authenticated;
-import javax.inject.Inject;
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.core.Response;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.core.Response;
import sh.rhiobet.lalafin.LalafinConfiguration;
@Authenticated
diff --git a/src/main/java/sh/rhiobet/lalafin/nzb/NzbResultService.java b/src/main/java/sh/rhiobet/lalafin/nzb/NzbResultService.java
index 783e142..065d3e1 100644
--- a/src/main/java/sh/rhiobet/lalafin/nzb/NzbResultService.java
+++ b/src/main/java/sh/rhiobet/lalafin/nzb/NzbResultService.java
@@ -4,9 +4,9 @@ import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
-import javax.enterprise.context.ApplicationScoped;
-import javax.ws.rs.core.Response;
-import javax.ws.rs.core.Response.ResponseBuilder;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.ws.rs.core.Response;
+import jakarta.ws.rs.core.Response.ResponseBuilder;
@ApplicationScoped
public class NzbResultService {
diff --git a/src/main/java/sh/rhiobet/lalafin/upload/UploadResource.java b/src/main/java/sh/rhiobet/lalafin/upload/UploadResource.java
index 7f7bf28..d6461c6 100644
--- a/src/main/java/sh/rhiobet/lalafin/upload/UploadResource.java
+++ b/src/main/java/sh/rhiobet/lalafin/upload/UploadResource.java
@@ -1,9 +1,9 @@
package sh.rhiobet.lalafin.upload;
-import javax.inject.Inject;
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.core.Response;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.core.Response;
import io.quarkus.security.Authenticated;
import io.quarkus.security.identity.SecurityIdentity;
import sh.rhiobet.lalafin.LalafinConfiguration;
diff --git a/src/main/java/sh/rhiobet/lalafin/upload/UploadService.java b/src/main/java/sh/rhiobet/lalafin/upload/UploadService.java
index 1d40a14..d9f3a93 100644
--- a/src/main/java/sh/rhiobet/lalafin/upload/UploadService.java
+++ b/src/main/java/sh/rhiobet/lalafin/upload/UploadService.java
@@ -25,11 +25,11 @@ import javax.crypto.CipherInputStream;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
-import javax.enterprise.context.ApplicationScoped;
-import javax.inject.Inject;
-import javax.ws.rs.core.Response;
-import javax.ws.rs.core.Response.ResponseBuilder;
-import javax.xml.bind.DatatypeConverter;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.core.Response;
+import jakarta.ws.rs.core.Response.ResponseBuilder;
+import jakarta.xml.bind.DatatypeConverter;
import org.jboss.resteasy.reactive.multipart.FileUpload;
import io.quarkus.qute.Location;
import io.quarkus.qute.Template;
diff --git a/src/main/resources/application.yaml.example b/src/main/resources/application.yaml.example
index 111b37d..43b9321 100644
--- a/src/main/resources/application.yaml.example
+++ b/src/main/resources/application.yaml.example
@@ -8,6 +8,7 @@ quarkus:
proxy-address-forwarding: true
native:
+ additional-build-args: --initialize-at-run-time=sun.java2d.Disposer
container-build: true
container-runtime: docker
builder-image: quay.io/quarkus/ubi-quarkus-mandrel:22.3-java17
@@ -25,6 +26,9 @@ quarkus:
token:
refresh-expired: true
+ redis:
+ hosts: redis://localhost/
+
lalafin:
base_url: 127.0.0.1:8910
disabled_services: {}