Support Elytron file-based used provider

This commit is contained in:
2022-12-06 17:26:57 +01:00
parent b615e486d6
commit 0d6219f6b6
10 changed files with 77 additions and 17 deletions

View File

@@ -1,7 +1,15 @@
executable: executable:
./mvnw package -Pnative ./mvnw package -Pnative $(EXECUTABLE_ARGS)
image: 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 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

View File

@@ -12,10 +12,10 @@
<maven.compiler.target>11</maven.compiler.target> <maven.compiler.target>11</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<quarkus-plugin.version>2.7.1.Final</quarkus-plugin.version> <quarkus-plugin.version>2.14.2.Final</quarkus-plugin.version>
<quarkus.platform.artifact-id>quarkus-bom</quarkus.platform.artifact-id> <quarkus.platform.artifact-id>quarkus-bom</quarkus.platform.artifact-id>
<quarkus.platform.group-id>io.quarkus</quarkus.platform.group-id> <quarkus.platform.group-id>io.quarkus</quarkus.platform.group-id>
<quarkus.platform.version>2.7.1.Final</quarkus.platform.version> <quarkus.platform.version>2.14.2.Final</quarkus.platform.version>
<surefire-plugin.version>2.22.1</surefire-plugin.version> <surefire-plugin.version>2.22.1</surefire-plugin.version>
</properties> </properties>
<dependencyManagement> <dependencyManagement>
@@ -50,6 +50,10 @@
<groupId>io.quarkus</groupId> <groupId>io.quarkus</groupId>
<artifactId>quarkus-config-yaml</artifactId> <artifactId>quarkus-config-yaml</artifactId>
</dependency> </dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-elytron-security-properties-file</artifactId>
</dependency>
<dependency> <dependency>
<groupId>org.openimaj</groupId> <groupId>org.openimaj</groupId>
<artifactId>core-image</artifactId> <artifactId>core-image</artifactId>

View File

@@ -1,5 +1,7 @@
package sh.rhiobet.lalafin; package sh.rhiobet.lalafin;
import java.util.List;
import java.util.Optional;
import io.smallrye.config.ConfigMapping; import io.smallrye.config.ConfigMapping;
@ConfigMapping(prefix = "lalafin") @ConfigMapping(prefix = "lalafin")
@@ -7,5 +9,6 @@ public interface LalafinConfiguration {
public String base_url(); public String base_url();
public String user_management_url(); public String user_management_url();
public Optional<List<String>> disabled_services();
} }

View File

@@ -13,11 +13,15 @@ import org.jboss.resteasy.reactive.MultipartForm;
import io.quarkus.security.Authenticated; import io.quarkus.security.Authenticated;
import io.quarkus.security.identity.SecurityIdentity; import io.quarkus.security.identity.SecurityIdentity;
import sh.rhiobet.lalafin.api.model.UploadForm; import sh.rhiobet.lalafin.api.model.UploadForm;
import sh.rhiobet.lalafin.LalafinConfiguration;
import sh.rhiobet.lalafin.upload.UploadService; import sh.rhiobet.lalafin.upload.UploadService;
@Authenticated @Authenticated
@Path("/api/private/upload") @Path("/api/private/upload")
public class UploadPrivateAPI { public class UploadPrivateAPI {
@Inject
LalafinConfiguration lalafinConfiguration;
@Inject @Inject
UploadService uploadService; UploadService uploadService;
@@ -28,6 +32,10 @@ public class UploadPrivateAPI {
@Consumes(MediaType.MULTIPART_FORM_DATA) @Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces(MediaType.TEXT_PLAIN) @Produces(MediaType.TEXT_PLAIN)
public Response uploadFile(@MultipartForm UploadForm data) { 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, return uploadService.upload(securityIdentity.getPrincipal().getName(), data.filename,
data.password, data.file); data.password, data.file);
} }
@@ -35,12 +43,20 @@ public class UploadPrivateAPI {
@GET @GET
@Produces(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON)
public Response listUploads() { 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()); return uploadService.list(securityIdentity.getPrincipal().getName());
} }
@DELETE @DELETE
@Path("/{iv}") @Path("/{iv}")
public Response getFile(String 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); return uploadService.delete(securityIdentity.getPrincipal().getName(), iv);
} }
} }

View File

@@ -6,11 +6,15 @@ import javax.ws.rs.Path;
import javax.ws.rs.QueryParam; import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Response; import javax.ws.rs.core.Response;
import io.quarkus.runtime.annotations.RegisterForReflection; import io.quarkus.runtime.annotations.RegisterForReflection;
import sh.rhiobet.lalafin.LalafinConfiguration;
import sh.rhiobet.lalafin.upload.UploadService; import sh.rhiobet.lalafin.upload.UploadService;
@RegisterForReflection @RegisterForReflection
@Path("/api/public/upload") @Path("/api/public/upload")
public class UploadPublicAPI { public class UploadPublicAPI {
@Inject
LalafinConfiguration lalafinConfiguration;
@Inject @Inject
UploadService uploadService; UploadService uploadService;
@@ -18,6 +22,10 @@ public class UploadPublicAPI {
@Path("/{user}/{iv}") @Path("/{user}/{iv}")
public Response getFile(String user, String iv, public Response getFile(String user, String iv,
@QueryParam("password") String password) { @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) { if (password == null) {
password = ""; password = "";
} }

View File

@@ -8,7 +8,7 @@ import io.smallrye.config.ConfigMapping;
public interface FileApiConfiguration { public interface FileApiConfiguration {
public String directory(); public String directory();
public List<String> ignored(); public Optional<List<String>> ignored();
public List<Route> routes(); public List<Route> routes();
public static interface Route { public static interface Route {

View File

@@ -115,9 +115,14 @@ public class FileInfoService {
String fileName = p.getFileName().toString(); String fileName = p.getFileName().toString();
String fileUri = URLEncoder.encode(fileName, StandardCharsets.UTF_8) String fileUri = URLEncoder.encode(fileName, StandardCharsets.UTF_8)
.replace("+", "%20"); .replace("+", "%20");
for (String ignoreString : fileApiConfiguration.ignored()) { if (fileName.startsWith(".")) {
if (fileName.startsWith(".") || fileName.endsWith(ignoreString)) { return;
return; }
if (fileApiConfiguration.ignored().isPresent()) {
for (String ignoreString : fileApiConfiguration.ignored().get()) {
if (fileName.endsWith(ignoreString)) {
return;
}
} }
} }
Path thumbPath = null; Path thumbPath = null;

View File

@@ -1,14 +1,17 @@
package sh.rhiobet.lalafin.nzb; package sh.rhiobet.lalafin.nzb;
import javax.annotation.security.RolesAllowed; import io.quarkus.security.Authenticated;
import javax.inject.Inject; import javax.inject.Inject;
import javax.ws.rs.GET; import javax.ws.rs.GET;
import javax.ws.rs.Path; import javax.ws.rs.Path;
import javax.ws.rs.core.Response; import javax.ws.rs.core.Response;
import sh.rhiobet.lalafin.LalafinConfiguration;
@RolesAllowed("japan7") @Authenticated
@Path("/nzb") @Path("/nzb")
public class NzbResource { public class NzbResource {
@Inject
LalafinConfiguration lalafinConfiguration;
@Inject @Inject
NzbResultService resultService; NzbResultService resultService;
@@ -16,6 +19,10 @@ public class NzbResource {
@GET @GET
@Path("/id/{id}") @Path("/id/{id}")
public Response getResult(String 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); return resultService.getResult(id);
} }

View File

@@ -6,10 +6,14 @@ import javax.ws.rs.Path;
import javax.ws.rs.core.Response; import javax.ws.rs.core.Response;
import io.quarkus.security.Authenticated; import io.quarkus.security.Authenticated;
import io.quarkus.security.identity.SecurityIdentity; import io.quarkus.security.identity.SecurityIdentity;
import sh.rhiobet.lalafin.LalafinConfiguration;
@Authenticated @Authenticated
@Path("/upload") @Path("/upload")
public class UploadResource { public class UploadResource {
@Inject
LalafinConfiguration lalafinConfiguration;
@Inject @Inject
SecurityIdentity securityIdentity; SecurityIdentity securityIdentity;
@@ -19,6 +23,10 @@ public class UploadResource {
@GET @GET
@Path("/") @Path("/")
public Response serveIndex() { 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()); return fileUploadService.index(securityIdentity.getPrincipal().getName());
} }

View File

@@ -24,9 +24,10 @@ quarkus:
token: token:
refresh-expired: true refresh-expired: true
# lalafin: lalafin:
# base_url: <url> base_url: 127.0.0.1:8910
# user_management_url: <url> disabled_services: {}
user_management_url: 127.0.0.1:8910
api: api:
file: file: