diff --git a/Makefile b/Makefile index 9f7e29c..ce993ee 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,15 @@ executable: - ./mvnw package -Pnative + ./mvnw package -Pnative $(EXECUTABLE_ARGS) image: - docker build -t rhiobet/lalafin . -f src/main/docker/Dockerfile.native + docker build -t rhiobet/lalafin$(IMAGE_TAG) . -f src/main/docker/Dockerfile.native -all: executable image \ No newline at end of file +file: + $(MAKE) EXECUTABLE_ARGS="-Dquarkus.oidc.enabled=false -Dquarkus.security.users.file.enabled=true -Dquarkus.security.users.file.users=config/users.properties -Dquarkus.security.users.file.roles=config/roles.properties" executable + $(MAKE) IMAGE_TAG=":file" image + +oidc: + $(MAKE) executable + $(MAKE) IMAGE_TAG=":oidc" image + +all: file oidc diff --git a/pom.xml b/pom.xml index 0538bb8..c3e3ac4 100644 --- a/pom.xml +++ b/pom.xml @@ -12,10 +12,10 @@ 11 UTF-8 UTF-8 - 2.7.1.Final + 2.14.2.Final quarkus-bom io.quarkus - 2.7.1.Final + 2.14.2.Final 2.22.1 @@ -50,6 +50,10 @@ io.quarkus quarkus-config-yaml + + io.quarkus + quarkus-elytron-security-properties-file + org.openimaj core-image diff --git a/src/main/java/sh/rhiobet/lalafin/LalafinConfiguration.java b/src/main/java/sh/rhiobet/lalafin/LalafinConfiguration.java index 2e0a010..ad22ed2 100644 --- a/src/main/java/sh/rhiobet/lalafin/LalafinConfiguration.java +++ b/src/main/java/sh/rhiobet/lalafin/LalafinConfiguration.java @@ -1,5 +1,7 @@ package sh.rhiobet.lalafin; +import java.util.List; +import java.util.Optional; import io.smallrye.config.ConfigMapping; @ConfigMapping(prefix = "lalafin") @@ -7,5 +9,6 @@ public interface LalafinConfiguration { public String base_url(); public String user_management_url(); + public Optional> disabled_services(); -} \ No newline at end of file +} diff --git a/src/main/java/sh/rhiobet/lalafin/api/UploadPrivateAPI.java b/src/main/java/sh/rhiobet/lalafin/api/UploadPrivateAPI.java index 9569f30..708bff0 100644 --- a/src/main/java/sh/rhiobet/lalafin/api/UploadPrivateAPI.java +++ b/src/main/java/sh/rhiobet/lalafin/api/UploadPrivateAPI.java @@ -13,11 +13,15 @@ import org.jboss.resteasy.reactive.MultipartForm; import io.quarkus.security.Authenticated; import io.quarkus.security.identity.SecurityIdentity; import sh.rhiobet.lalafin.api.model.UploadForm; +import sh.rhiobet.lalafin.LalafinConfiguration; import sh.rhiobet.lalafin.upload.UploadService; @Authenticated @Path("/api/private/upload") public class UploadPrivateAPI { + @Inject + LalafinConfiguration lalafinConfiguration; + @Inject UploadService uploadService; @@ -28,6 +32,10 @@ public class UploadPrivateAPI { @Consumes(MediaType.MULTIPART_FORM_DATA) @Produces(MediaType.TEXT_PLAIN) public Response uploadFile(@MultipartForm UploadForm data) { + if (lalafinConfiguration.disabled_services().isPresent() + && lalafinConfiguration.disabled_services().get().contains("upload")) { + return Response.status(Response.Status.NOT_FOUND).build(); + } return uploadService.upload(securityIdentity.getPrincipal().getName(), data.filename, data.password, data.file); } @@ -35,12 +43,20 @@ public class UploadPrivateAPI { @GET @Produces(MediaType.APPLICATION_JSON) public Response listUploads() { + if (lalafinConfiguration.disabled_services().isPresent() + && lalafinConfiguration.disabled_services().get().contains("upload")) { + return Response.status(Response.Status.NOT_FOUND).build(); + } return uploadService.list(securityIdentity.getPrincipal().getName()); } @DELETE @Path("/{iv}") public Response getFile(String iv) { + if (lalafinConfiguration.disabled_services().isPresent() + && lalafinConfiguration.disabled_services().get().contains("upload")) { + return Response.status(Response.Status.NOT_FOUND).build(); + } return uploadService.delete(securityIdentity.getPrincipal().getName(), iv); } } diff --git a/src/main/java/sh/rhiobet/lalafin/api/UploadPublicAPI.java b/src/main/java/sh/rhiobet/lalafin/api/UploadPublicAPI.java index ab787e5..d354b83 100644 --- a/src/main/java/sh/rhiobet/lalafin/api/UploadPublicAPI.java +++ b/src/main/java/sh/rhiobet/lalafin/api/UploadPublicAPI.java @@ -6,11 +6,15 @@ import javax.ws.rs.Path; import javax.ws.rs.QueryParam; import javax.ws.rs.core.Response; import io.quarkus.runtime.annotations.RegisterForReflection; +import sh.rhiobet.lalafin.LalafinConfiguration; import sh.rhiobet.lalafin.upload.UploadService; @RegisterForReflection @Path("/api/public/upload") public class UploadPublicAPI { + @Inject + LalafinConfiguration lalafinConfiguration; + @Inject UploadService uploadService; @@ -18,6 +22,10 @@ public class UploadPublicAPI { @Path("/{user}/{iv}") public Response getFile(String user, String iv, @QueryParam("password") String password) { + if (lalafinConfiguration.disabled_services().isPresent() + && lalafinConfiguration.disabled_services().get().contains("upload")) { + return Response.status(Response.Status.NOT_FOUND).build(); + } if (password == null) { password = ""; } diff --git a/src/main/java/sh/rhiobet/lalafin/api/configuration/FileApiConfiguration.java b/src/main/java/sh/rhiobet/lalafin/api/configuration/FileApiConfiguration.java index 84470ad..4ae12df 100644 --- a/src/main/java/sh/rhiobet/lalafin/api/configuration/FileApiConfiguration.java +++ b/src/main/java/sh/rhiobet/lalafin/api/configuration/FileApiConfiguration.java @@ -8,7 +8,7 @@ import io.smallrye.config.ConfigMapping; public interface FileApiConfiguration { public String directory(); - public List ignored(); + public Optional> ignored(); public List routes(); public static interface Route { @@ -16,4 +16,4 @@ public interface FileApiConfiguration { public Optional> roles(); } -} \ No newline at end of file +} diff --git a/src/main/java/sh/rhiobet/lalafin/file/FileInfoService.java b/src/main/java/sh/rhiobet/lalafin/file/FileInfoService.java index 3bce9db..4626541 100644 --- a/src/main/java/sh/rhiobet/lalafin/file/FileInfoService.java +++ b/src/main/java/sh/rhiobet/lalafin/file/FileInfoService.java @@ -115,9 +115,14 @@ public class FileInfoService { String fileName = p.getFileName().toString(); String fileUri = URLEncoder.encode(fileName, StandardCharsets.UTF_8) .replace("+", "%20"); - for (String ignoreString : fileApiConfiguration.ignored()) { - if (fileName.startsWith(".") || fileName.endsWith(ignoreString)) { - return; + if (fileName.startsWith(".")) { + return; + } + if (fileApiConfiguration.ignored().isPresent()) { + for (String ignoreString : fileApiConfiguration.ignored().get()) { + if (fileName.endsWith(ignoreString)) { + return; + } } } Path thumbPath = null; diff --git a/src/main/java/sh/rhiobet/lalafin/nzb/NzbResource.java b/src/main/java/sh/rhiobet/lalafin/nzb/NzbResource.java index 277125c..a160782 100644 --- a/src/main/java/sh/rhiobet/lalafin/nzb/NzbResource.java +++ b/src/main/java/sh/rhiobet/lalafin/nzb/NzbResource.java @@ -1,14 +1,17 @@ package sh.rhiobet.lalafin.nzb; -import javax.annotation.security.RolesAllowed; +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 sh.rhiobet.lalafin.LalafinConfiguration; -@RolesAllowed("japan7") +@Authenticated @Path("/nzb") public class NzbResource { + @Inject + LalafinConfiguration lalafinConfiguration; @Inject NzbResultService resultService; @@ -16,6 +19,10 @@ public class NzbResource { @GET @Path("/id/{id}") public Response getResult(String id) { + if (lalafinConfiguration.disabled_services().isPresent() + && lalafinConfiguration.disabled_services().get().contains("nzb")) { + return Response.status(Response.Status.NOT_FOUND).build(); + } return resultService.getResult(id); } diff --git a/src/main/java/sh/rhiobet/lalafin/upload/UploadResource.java b/src/main/java/sh/rhiobet/lalafin/upload/UploadResource.java index a37a560..7f7bf28 100644 --- a/src/main/java/sh/rhiobet/lalafin/upload/UploadResource.java +++ b/src/main/java/sh/rhiobet/lalafin/upload/UploadResource.java @@ -6,10 +6,14 @@ import javax.ws.rs.Path; import javax.ws.rs.core.Response; import io.quarkus.security.Authenticated; import io.quarkus.security.identity.SecurityIdentity; +import sh.rhiobet.lalafin.LalafinConfiguration; @Authenticated @Path("/upload") public class UploadResource { + @Inject + LalafinConfiguration lalafinConfiguration; + @Inject SecurityIdentity securityIdentity; @@ -19,6 +23,10 @@ public class UploadResource { @GET @Path("/") public Response serveIndex() { + if (lalafinConfiguration.disabled_services().isPresent() + && lalafinConfiguration.disabled_services().get().contains("upload")) { + return Response.status(Response.Status.NOT_FOUND).build(); + } return fileUploadService.index(securityIdentity.getPrincipal().getName()); } diff --git a/src/main/resources/application.yaml.example b/src/main/resources/application.yaml.example index 99a04f6..45a84ac 100644 --- a/src/main/resources/application.yaml.example +++ b/src/main/resources/application.yaml.example @@ -24,9 +24,10 @@ quarkus: token: refresh-expired: true -# lalafin: -# base_url: -# user_management_url: +lalafin: + base_url: 127.0.0.1:8910 + disabled_services: {} + user_management_url: 127.0.0.1:8910 api: file: @@ -46,4 +47,4 @@ api: # events: # - path: / # year: 2021 - # month: 12 \ No newline at end of file + # month: 12