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: {}