Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
import java.net.InetSocketAddress;
import java.net.UnknownHostException;
import java.nio.file.Path;
import java.util.Map;

@SuppressWarnings({"FieldMayBeFinal", "FieldCanBeLocal"})
@ConfigSerializable
Expand All @@ -47,6 +48,8 @@ public class WebserverConfig {

private LogConfig log = new LogConfig();

private Map<String, String> additionalHeaders = Map.of();

public InetAddress resolveIp() throws UnknownHostException {
if (ip.isEmpty() || ip.equals("0.0.0.0") || ip.equals("::0")) {
return new InetSocketAddress(0).getAddress();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -218,7 +218,7 @@ private void load(@Nullable ResourcePack preloadedResourcePack) throws IOExcepti
this.webRequestHandler = new RoutingRequestHandler();

// default route
webRequestHandler.register(".*", new FileRequestHandler(webroot));
webRequestHandler.register(".*", new BlueMapResponseModifier(new FileRequestHandler(webroot), webserverConfig.getAdditionalHeaders()));

// map route
for (var mapConfigEntry : configManager.getMapConfigs().entrySet()) {
Expand All @@ -242,7 +242,7 @@ private void load(@Nullable ResourcePack preloadedResourcePack) throws IOExcepti
webRequestHandler.register(
"maps/" + Pattern.quote(id) + "/(.*)",
"$1",
new BlueMapResponseModifier(mapRequestHandler)
new BlueMapResponseModifier(mapRequestHandler, webserverConfig.getAdditionalHeaders())
);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,16 +32,19 @@
import lombok.Getter;
import lombok.NonNull;
import lombok.Setter;
import java.util.Map;

@Getter @Setter
public class BlueMapResponseModifier implements HttpRequestHandler {

private @NonNull HttpRequestHandler delegate;
private @NonNull String serverName;
private @NonNull Map<String, String> additionalHeaders;

public BlueMapResponseModifier(HttpRequestHandler delegate) {
public BlueMapResponseModifier(HttpRequestHandler delegate, Map<String, String> additionalHeaders) {
this.delegate = delegate;
this.serverName = "BlueMap/" + BlueMap.VERSION;
this.additionalHeaders = additionalHeaders;
}

@Override
Expand All @@ -55,6 +58,8 @@ public HttpResponse handle(HttpRequest request) {

response.addHeader("Server", this.serverName);

additionalHeaders.forEach(response::setHeader);

return response;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -135,13 +135,12 @@ private HttpResponse generateResponse(HttpRequest request) throws IOException {

//create response
HttpResponse response = new HttpResponse(HttpStatusCode.OK);

response.addHeader("ETag", eTag);
if (lastModified > 0) response.addHeader("Last-Modified", DateTimeFormatter.RFC_1123_DATE_TIME.format(Instant
.ofEpochMilli(lastModified)
.atOffset(ZoneOffset.UTC)
));
response.addHeader("Cache-Control", "public");
response.addHeader("Cache-Control", "max-age=" + TimeUnit.DAYS.toSeconds(1));

//add content type header
String filetype = filePath.getFileName().toString();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@
import com.flowpowered.math.vector.Vector2i;

import java.io.Closeable;
import java.io.IOException;
import java.util.function.Consumer;
import java.util.function.Supplier;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -85,9 +85,6 @@ public HttpResponse handle(HttpRequest request) {
if (in == null) return new HttpResponse(HttpStatusCode.NO_CONTENT);

HttpResponse response = new HttpResponse(HttpStatusCode.OK);
response.addHeader("Cache-Control", "public");
response.addHeader("Cache-Control", "max-age=" + TimeUnit.DAYS.toSeconds(1));

if (lod == 0) response.addHeader("Content-Type", "application/octet-stream");
else response.addHeader("Content-Type", "image/png");

Expand All @@ -105,8 +102,6 @@ public HttpResponse handle(HttpRequest request) {
};
if (in != null){
HttpResponse response = new HttpResponse(HttpStatusCode.OK);
response.addHeader("Cache-Control", "public");
response.addHeader("Cache-Control", "max-age=" + TimeUnit.DAYS.toSeconds(1));
response.addHeader("Content-Type", ContentTypeRegistry.fromFileName(path));
writeToResponse(in, response, request, requestGzipped);
return response;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,10 @@ default void addHeader(String name, String... values) {
getHeaders().put(name.toLowerCase(Locale.ROOT), new HttpHeader(name, values));
}

default void setHeader(String name, String... values) {
getHeaders().put(name.toLowerCase(Locale.ROOT), new HttpHeader(name, values));
}

default HttpHeader getHeader(String key) {
return getHeaders().get(key.toLowerCase(Locale.ROOT));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ log: {
# Default is false (overwrite the file).
append: false

# The format of the webserver acivity logs.
# The format of the webserver activity logs.
# The syntax is the Java String formatting syntax, see: https://docs.oracle.com/javase/8/docs/api/java/util/Formatter.html
# Possible Arguments: | Example output
# 1 - the source address (ignoring any xff headers). | 10.10.10.10
Expand All @@ -47,3 +47,13 @@ log: {
# Default is "%1$s \"%3$s %4$s %5$s\" %6$s %7$s" | 10.10.10.10 "GET /assets/file.png HTTP/1.1" 200 OK
format: "%1$s \"%3$s %4$s %5$s\" %6$s %7$s"
}

# Additional headers to include in the responses for static files.
additional-headers: {
"Cache-Control": "public, max-age=86400"
# "Content-Security-Policy": "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data: blob: https:; object-src 'none';"
"X-Frame-Options": "SAMEORIGIN"
"X-Content-Type-Options": "nosniff"
"Referrer-Policy": "strict-origin-when-cross-origin"
"Permissions-Policy": "accelerometer=(), ambient-light-sensor=(), autoplay=(), battery=(), camera=(), cross-origin-isolated=(), display-capture=(), document-domain=(), encrypted-media=(), execution-while-not-rendered=(), execution-while-out-of-viewport=(), fullscreen=(self), geolocation=(), gyroscope=(), keyboard-map=(), magnetometer=(), microphone=(), midi=(), navigation-override=(), payment=(), picture-in-picture=(), publickey-credentials-get=(), screen-wake-lock=(self), sync-xhr=(), usb=(), web-share=(), xr-spatial-tracking=()"
}
Original file line number Diff line number Diff line change
Expand Up @@ -311,7 +311,7 @@ public void startWebserver(BlueMapService blueMap, boolean verbose) throws IOExc
));
}

HttpRequestHandler handler = new BlueMapResponseModifier(routingRequestHandler);
HttpRequestHandler handler = new BlueMapResponseModifier(routingRequestHandler, config.getAdditionalHeaders());
handler = new LoggingRequestHandler(
handler,
config.getLog().getFormat(),
Expand Down
Loading