From c150bb38cee27297c6fbabfeeb57b800683673df Mon Sep 17 00:00:00 2001
From: Timm Fitschen <timm.fitschen@ds.mpg.de>
Date: Wed, 28 Aug 2019 13:36:08 +0200
Subject: [PATCH] EHN: Cache-Control header for webui components

---
 conf/core/server.conf                               |  2 ++
 src/main/java/caosdb/server/ServerProperties.java   |  2 ++
 .../java/caosdb/server/resource/Webinterface.java   | 13 ++++++++++++-
 3 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/conf/core/server.conf b/conf/core/server.conf
index 686cf100..4264b374 100644
--- a/conf/core/server.conf
+++ b/conf/core/server.conf
@@ -67,3 +67,5 @@ GLOBAL_ENTITY_PERMISSIONS_FILE=./conf/core/global_entity_permissions.xml
 CERTIFICATES_KEY_PASSWORD=
 CERTIFICATES_KEY_STORE_PATH=
 CERTIFICATES_KEY_STORE_PASSWORD=
+
+WEBUI_HTTP_HEADER_CACHE_MAX_AGE=28800
\ No newline at end of file
diff --git a/src/main/java/caosdb/server/ServerProperties.java b/src/main/java/caosdb/server/ServerProperties.java
index 10ede003..5e295ae5 100644
--- a/src/main/java/caosdb/server/ServerProperties.java
+++ b/src/main/java/caosdb/server/ServerProperties.java
@@ -129,6 +129,8 @@ public class ServerProperties extends Properties {
 
   public static final String KEY_GLOBAL_ENTITY_PERMISSIONS_FILE = "GLOBAL_ENTITY_PERMISSIONS_FILE";
   public static final String KEY_TIMEZONE = "TIMEZONE";
+  public static final String KEY_WEBUI_HTTP_HEADER_CACHE_MAX_AGE =
+      "WEBUI_HTTP_HEADER_CACHE_MAX_AGE";
 
   /**
    * Read the config files and initialize the server properties.
diff --git a/src/main/java/caosdb/server/resource/Webinterface.java b/src/main/java/caosdb/server/resource/Webinterface.java
index 334f55f0..7343fc5f 100644
--- a/src/main/java/caosdb/server/resource/Webinterface.java
+++ b/src/main/java/caosdb/server/resource/Webinterface.java
@@ -22,8 +22,13 @@
  */
 package caosdb.server.resource;
 
+import caosdb.server.CaosDBServer;
+import caosdb.server.ServerProperties;
 import java.io.File;
 import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import org.restlet.data.CacheDirective;
 import org.restlet.data.Header;
 import org.restlet.data.MediaType;
 import org.restlet.data.Status;
@@ -42,7 +47,7 @@ public class Webinterface extends ServerResource {
     super.doInit();
   }
 
-  private final File PUBLIC_DIRECTORY = new File("caosdb-webui/public/").getAbsoluteFile();
+  private static final File PUBLIC_DIRECTORY = new File("caosdb-webui/public/").getAbsoluteFile();
 
   @Get
   public Representation deliver() throws IOException {
@@ -86,6 +91,12 @@ public class Webinterface extends ServerResource {
 
     final FileRepresentation ret = new FileRepresentation(file, mt);
 
+    List<CacheDirective> cacheDirectives = new ArrayList<>();
+    cacheDirectives.add(
+        new CacheDirective(
+            HeaderConstants.CACHE_MAX_AGE,
+            CaosDBServer.getServerProperty(ServerProperties.KEY_WEBUI_HTTP_HEADER_CACHE_MAX_AGE)));
+    getResponse().setCacheDirectives(cacheDirectives);
     return ret;
   }
 }
-- 
GitLab