Support Elytron file-based used provider
This commit is contained in:
14
Makefile
14
Makefile
@@ -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
|
||||||
|
|||||||
8
pom.xml
8
pom.xml
@@ -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>
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 = "";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -115,10 +115,15 @@ 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;
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
Reference in New Issue
Block a user