diff --git a/src/main/java/org/caosdb/server/resource/AbstractCaosDBServerResource.java b/src/main/java/org/caosdb/server/resource/AbstractCaosDBServerResource.java index c7ecd4deb76117474adc188c3f8a7d0f6064a3b8..876b43a160f673b96a7220a746c9a7dcd4951388 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 bba1fb09c7f2c0a14b95b7314832b6ff174cef6b..adba714a96e5bbb4bc3ea13b8d72ec69a88cb33b 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 0fe186a0426002071e0b6c6a5ebe0b3f234e9b2a..22f1a46e4fd314b0dcaebde7abdcc1d41a9f50f0 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 1aff4de329bf3f32ba599a449c101b7fbe30423f..375d6b5e7bbced84cec5bdcdee26a9e436f0215a 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 1dcf71d8f330ab6807e65bd23022138e941fca1c..5d81ca738d507bcfd75dbe137756135cede3989b 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();