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