From d4c448fd303312bf19a269a3cb4daab6eb44d4a6 Mon Sep 17 00:00:00 2001 From: Timm Fitschen <t.fitschen@indiscale.com> Date: Fri, 29 Jan 2021 21:56:41 +0000 Subject: [PATCH] f-x-forwarded-proto -> dev --- .../resource/AbstractCaosDBServerResource.java | 4 ++-- .../org/caosdb/server/resource/Webinterface.java | 2 +- .../server/resource/WebinterfaceBuildNumber.java | 2 +- .../caosdb/server/utils/WebinterfaceUtils.java | 16 +++++++++++----- .../TestAbstractCaosDBServerResource.java | 6 ++++++ 5 files changed, 21 insertions(+), 9 deletions(-) diff --git a/src/main/java/org/caosdb/server/resource/AbstractCaosDBServerResource.java b/src/main/java/org/caosdb/server/resource/AbstractCaosDBServerResource.java index c7ecd4de..876b43a1 100644 --- a/src/main/java/org/caosdb/server/resource/AbstractCaosDBServerResource.java +++ b/src/main/java/org/caosdb/server/resource/AbstractCaosDBServerResource.java @@ -117,7 +117,7 @@ public abstract class AbstractCaosDBServerResource extends ServerResource { getRequest().setEntity(r); } - this.utils = WebinterfaceUtils.getInstance(getHostRef()); + this.utils = WebinterfaceUtils.getInstance(getRequest()); this.timestamp = getRequest().getDate().getTime(); @@ -177,7 +177,7 @@ public abstract class AbstractCaosDBServerResource extends ServerResource { retRoot.setAttribute("crid", this.getCRID()); } retRoot.setAttribute("timestamp", getTimestamp().toString()); - retRoot.setAttribute("baseuri", getRootRef().toString()); + retRoot.setAttribute("baseuri", getUtils().getServerRootURI()); return retRoot; } diff --git a/src/main/java/org/caosdb/server/resource/Webinterface.java b/src/main/java/org/caosdb/server/resource/Webinterface.java index bba1fb09..adba714a 100644 --- a/src/main/java/org/caosdb/server/resource/Webinterface.java +++ b/src/main/java/org/caosdb/server/resource/Webinterface.java @@ -47,7 +47,7 @@ public class Webinterface extends ServerResource { @Override protected void doInit() throws ResourceException { - this.utils = WebinterfaceUtils.getInstance(getHostRef()); + this.utils = WebinterfaceUtils.getInstance(getRequest()); super.doInit(); } diff --git a/src/main/java/org/caosdb/server/resource/WebinterfaceBuildNumber.java b/src/main/java/org/caosdb/server/resource/WebinterfaceBuildNumber.java index 0fe186a0..22f1a46e 100644 --- a/src/main/java/org/caosdb/server/resource/WebinterfaceBuildNumber.java +++ b/src/main/java/org/caosdb/server/resource/WebinterfaceBuildNumber.java @@ -39,7 +39,7 @@ public class WebinterfaceBuildNumber extends ServerResource { @Override protected void doInit() throws ResourceException { super.doInit(); - this.utils = WebinterfaceUtils.getInstance(getHostRef()); + this.utils = WebinterfaceUtils.getInstance(getRequest()); } /** diff --git a/src/main/java/org/caosdb/server/utils/WebinterfaceUtils.java b/src/main/java/org/caosdb/server/utils/WebinterfaceUtils.java index 1aff4de3..375d6b5e 100644 --- a/src/main/java/org/caosdb/server/utils/WebinterfaceUtils.java +++ b/src/main/java/org/caosdb/server/utils/WebinterfaceUtils.java @@ -33,6 +33,7 @@ import org.caosdb.server.CaosDBServer; import org.caosdb.server.ServerProperties; import org.caosdb.server.resource.AbstractCaosDBServerResource; import org.caosdb.server.resource.Webinterface; +import org.restlet.Request; import org.restlet.data.Reference; /** @@ -61,14 +62,19 @@ public class WebinterfaceUtils { private static final Map<String, WebinterfaceUtils> instances = new HashMap<>(); /** - * Retrieve an instance of {@link WebinterfaceUtils} for the host. The instance can be shared with - * other callers. + * Retrieve an instance of {@link WebinterfaceUtils} for the request. The instance can be shared + * with other callers. * - * @param host + * @param request * @return a shared instance of {@link WebinterfaceUtils}. */ - public static WebinterfaceUtils getInstance(Reference host) { - return getInstance(host.getHostIdentifier()); + public static WebinterfaceUtils getInstance(Request request) { + String hostStr = request.getHostRef().getHostIdentifier(); + String scheme = request.getHeaders().getFirstValue("X-Forwarded-Proto", true); + if (scheme != null) { + hostStr = hostStr.replaceFirst("^" + request.getHostRef().getScheme(), scheme); + } + return getInstance(hostStr); } /** diff --git a/src/test/java/org/caosdb/server/resource/TestAbstractCaosDBServerResource.java b/src/test/java/org/caosdb/server/resource/TestAbstractCaosDBServerResource.java index 1dcf71d8..5d81ca73 100644 --- a/src/test/java/org/caosdb/server/resource/TestAbstractCaosDBServerResource.java +++ b/src/test/java/org/caosdb/server/resource/TestAbstractCaosDBServerResource.java @@ -26,6 +26,7 @@ import org.caosdb.server.database.backend.interfaces.RetrieveRoleImpl; import org.caosdb.server.database.exceptions.TransactionException; import org.caosdb.server.database.misc.TransactionBenchmark; import org.caosdb.server.permissions.PermissionRule; +import org.caosdb.server.utils.WebinterfaceUtils; import org.jdom2.Element; import org.junit.BeforeClass; import org.junit.Rule; @@ -125,6 +126,11 @@ public class TestAbstractCaosDBServerResource { // TODO Auto-generated method stub return user; } + + @Override + public WebinterfaceUtils getUtils() { + return WebinterfaceUtils.getInstance(getRootRef().toString()); + } }; provideUserSourcesFile(); Element response = s.generateRootElement(); -- GitLab