From 3e5025b46ea02fc16263307580a2cd0dfd0e5cac Mon Sep 17 00:00:00 2001 From: CalDescent Date: Mon, 20 Dec 2021 20:03:16 +0000 Subject: [PATCH] Domain map handling moved from RenderResource to a dedicated DomainMapResource Including this as part of the rendering class was a bit of a hack; it's much cleaner to have a dedicated class. --- .../java/org/qortal/api/DomainMapService.java | 5 +- .../domainmap/resource/DomainMapResource.java | 58 +++++++++++++++++++ .../qortal/api/resource/RenderResource.java | 18 ------ 3 files changed, 59 insertions(+), 22 deletions(-) create mode 100644 src/main/java/org/qortal/api/domainmap/resource/DomainMapResource.java diff --git a/src/main/java/org/qortal/api/DomainMapService.java b/src/main/java/org/qortal/api/DomainMapService.java index 263c8444..ba0fa067 100644 --- a/src/main/java/org/qortal/api/DomainMapService.java +++ b/src/main/java/org/qortal/api/DomainMapService.java @@ -38,7 +38,7 @@ public class DomainMapService { private DomainMapService() { this.config = new ResourceConfig(); - this.config.packages("org.qortal.api.resource"); + this.config.packages("org.qortal.api.domainmap.resource"); this.config.register(OpenApiResource.class); this.config.register(ApiDefinition.class); this.config.register(AnnotationPostProcessor.class); @@ -149,9 +149,6 @@ public class DomainMapService { apiServlet.setInitOrder(1); context.addServlet(apiServlet, "/*"); - // Rewrite URLs - rewriteHandler.addRule(new RewritePatternRule("/*", "/render/domainmap/")); // rewrite / as /site/domainmap/ - // Start server this.server.start(); } catch (Exception e) { diff --git a/src/main/java/org/qortal/api/domainmap/resource/DomainMapResource.java b/src/main/java/org/qortal/api/domainmap/resource/DomainMapResource.java new file mode 100644 index 00000000..27770449 --- /dev/null +++ b/src/main/java/org/qortal/api/domainmap/resource/DomainMapResource.java @@ -0,0 +1,58 @@ +package org.qortal.api.domainmap.resource; + +import io.swagger.v3.oas.annotations.tags.Tag; +import org.qortal.arbitrary.ArbitraryDataFile.ResourceIdType; +import org.qortal.arbitrary.ArbitraryDataRenderer; +import org.qortal.arbitrary.misc.Service; +import org.qortal.settings.Settings; + +import javax.servlet.ServletContext; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.core.Context; +import java.util.Map; + + +@Path("/") +@Tag(name = "Gateway") +public class DomainMapResource { + + @Context HttpServletRequest request; + @Context HttpServletResponse response; + @Context ServletContext context; + + + @GET + public HttpServletResponse getIndexByDomainMap() { + return this.getDomainMap("/"); + } + + @GET + @Path("{path:.*}") + public HttpServletResponse getPathByDomainMap(@PathParam("path") String inPath) { + return this.getDomainMap(inPath); + } + + private HttpServletResponse getDomainMap(String inPath) { + Map domainMap = Settings.getInstance().getSimpleDomainMap(); + if (domainMap != null && domainMap.containsKey(request.getServerName())) { + // Build synchronously, so that we don't need to make the summary API endpoints available over + // the domain map server. This means that there will be no loading screen, but this is potentially + // preferred in this situation anyway (e.g. to avoid confusing search engine robots). + return this.get(domainMap.get(request.getServerName()), ResourceIdType.NAME, Service.WEBSITE, inPath, null, "", false, false); + } + return ArbitraryDataRenderer.getResponse(response, 404, "Error 404: File Not Found"); + } + + private HttpServletResponse get(String resourceId, ResourceIdType resourceIdType, Service service, String inPath, + String secret58, String prefix, boolean usePrefix, boolean async) { + + ArbitraryDataRenderer renderer = new ArbitraryDataRenderer(resourceId, resourceIdType, service, inPath, + secret58, prefix, usePrefix, async, request, response, context); + return renderer.render(); + } + +} diff --git a/src/main/java/org/qortal/api/resource/RenderResource.java b/src/main/java/org/qortal/api/resource/RenderResource.java index 78235cbc..9f5913ce 100644 --- a/src/main/java/org/qortal/api/resource/RenderResource.java +++ b/src/main/java/org/qortal/api/resource/RenderResource.java @@ -172,25 +172,7 @@ public class RenderResource { return this.get(name, ResourceIdType.NAME, service, "/", null, prefix, true, true); } - @GET - @Path("/domainmap") - public HttpServletResponse getIndexByDomainMap() { - return this.getDomainMap("/"); - } - @GET - @Path("/domainmap/{path:.*}") - public HttpServletResponse getPathByDomainMap(@PathParam("path") String inPath) { - return this.getDomainMap(inPath); - } - - private HttpServletResponse getDomainMap(String inPath) { - Map domainMap = Settings.getInstance().getSimpleDomainMap(); - if (domainMap != null && domainMap.containsKey(request.getServerName())) { - return this.get(domainMap.get(request.getServerName()), ResourceIdType.NAME, Service.WEBSITE, inPath, null, "", false, true); - } - return ArbitraryDataRenderer.getResponse(response, 404, "Error 404: File Not Found"); - } private HttpServletResponse get(String resourceId, ResourceIdType resourceIdType, Service service, String inPath, String secret58, String prefix, boolean usePrefix, boolean async) {