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