From 5088adb7eb7b6dacd12420ed22b7cdf302b7a053 Mon Sep 17 00:00:00 2001 From: Mike Primm Date: Mon, 29 Aug 2011 21:33:41 -0500 Subject: [PATCH] Add support for 'http-reponse-headers' attribute to add custom response headers --- src/main/java/org/dynmap/DynmapPlugin.java | 13 +++++++++++++ src/main/java/org/dynmap/web/HttpServer.java | 9 +++++++++ .../java/org/dynmap/web/HttpServerConnection.java | 6 ++++++ src/main/resources/configuration.txt | 5 +++++ 4 files changed, 33 insertions(+) diff --git a/src/main/java/org/dynmap/DynmapPlugin.java b/src/main/java/org/dynmap/DynmapPlugin.java index 1a6b5d1d..804db87b 100644 --- a/src/main/java/org/dynmap/DynmapPlugin.java +++ b/src/main/java/org/dynmap/DynmapPlugin.java @@ -303,6 +303,19 @@ public class DynmapPlugin extends JavaPlugin { boolean checkbannedips = configuration.getBoolean("check-banned-ips", true); int maxconnections = configuration.getInteger("max-sessions", 30); if(maxconnections < 2) maxconnections = 2; + /* Load customized response headers, if any */ + ConfigurationNode custhttp = configuration.getNode("http-response-headers"); + HashMap custhdrs = new HashMap(); + if(custhttp != null) { + for(String k : custhttp.keySet()) { + String v = custhttp.getString(k); + if(v != null) { + custhdrs.put(k, v); + } + } + } + HttpServer.setCustomHeaders(custhdrs); + if(allow_symlinks) Log.verboseinfo("Web server is permitting symbolic links"); else diff --git a/src/main/java/org/dynmap/web/HttpServer.java b/src/main/java/org/dynmap/web/HttpServer.java index 841dc71c..1509c7ff 100644 --- a/src/main/java/org/dynmap/web/HttpServer.java +++ b/src/main/java/org/dynmap/web/HttpServer.java @@ -10,8 +10,10 @@ import java.net.ServerSocket; import java.net.Socket; import java.net.SocketAddress; import java.util.Collections; +import java.util.HashMap; import java.util.HashSet; import java.util.IdentityHashMap; +import java.util.Map; import java.util.SortedMap; import java.util.TreeMap; import java.util.logging.Logger; @@ -34,6 +36,7 @@ public class HttpServer extends Thread { private Object lock = new Object(); private HashSet active_connections = new HashSet(); private HashSet keepalive_connections = new HashSet(); + private static Map headers = new HashMap(); public HttpServer(InetAddress bindAddress, int port, boolean check_banned_ips, int max_sessions) { this.bindAddress = bindAddress; @@ -189,4 +192,10 @@ public class HttpServer extends Thread { } return false; } + public static Map getCustomHeaders() { + return headers; + } + public static void setCustomHeaders(Map hdrs) { + headers = hdrs; + } } diff --git a/src/main/java/org/dynmap/web/HttpServerConnection.java b/src/main/java/org/dynmap/web/HttpServerConnection.java index 5784fafe..a41e9763 100644 --- a/src/main/java/org/dynmap/web/HttpServerConnection.java +++ b/src/main/java/org/dynmap/web/HttpServerConnection.java @@ -111,6 +111,12 @@ public class HttpServerConnection extends Thread { out.append(field.getValue()); out.append("\r\n"); } + for(Entry custom : HttpServer.getCustomHeaders().entrySet()) { + out.append(custom.getKey()); + out.append(": "); + out.append(custom.getValue()); + out.append("\r\n"); + } out.append("\r\n"); out.flush(); } diff --git a/src/main/resources/configuration.txt b/src/main/resources/configuration.txt index daac4053..ee397ffd 100644 --- a/src/main/resources/configuration.txt +++ b/src/main/resources/configuration.txt @@ -263,6 +263,11 @@ showplayerfacesinmenu: true # Set sidebaropened: 'true' to pin menu sidebar opened permanently, 'pinned' to default the sidebar to pinned, but allow it to unpin #sidebaropened: true +# Customized HTTP response headers - add 'id: value' pairs to all HTTP response headers (internal web server only) +#http-response-headers: +# Access-Control-Allow-Origin: "my-domain.com" +# X-Custom-Header-Of-Mine: "MyHeaderValue" + joinmessage: "%playername% joined" quitmessage: "%playername% quit" spammessage: "You may only chat once every %interval% seconds."