Add property to include permissive CORS response

References #142.
pull/144/head
Andrew Gaul 2016-07-01 18:21:08 -07:00
rodzic fcbc14780b
commit 01f956052e
4 zmienionych plików z 24 dodań i 2 usunięć

Wyświetl plik

@ -126,6 +126,8 @@ public final class Main {
S3ProxyConstants.PROPERTY_V4_MAX_NON_CHUNKED_REQUEST_SIZE);
String ignoreUnknownHeaders = properties.getProperty(
S3ProxyConstants.PROPERTY_IGNORE_UNKNOWN_HEADERS);
String corsAllowAll = properties.getProperty(
S3ProxyConstants.PROPERTY_CORS_ALLOW_ALL);
BlobStore blobStore = createBlobStore(properties);
@ -186,6 +188,10 @@ public final class Main {
s3ProxyBuilder.ignoreUnknownHeaders(Boolean.parseBoolean(
ignoreUnknownHeaders));
}
if (corsAllowAll != null) {
s3ProxyBuilder.corsAllowAll(Boolean.parseBoolean(
corsAllowAll));
}
s3Proxy = s3ProxyBuilder.build();
} catch (IllegalArgumentException | IllegalStateException e) {
System.err.println(e.getMessage());

Wyświetl plik

@ -104,7 +104,7 @@ public final class S3Proxy {
handler = new S3ProxyHandler(builder.blobStore, builder.identity,
builder.credential, Optional.fromNullable(builder.virtualHost),
builder.v4MaxNonChunkedRequestSize,
builder.ignoreUnknownHeaders);
builder.ignoreUnknownHeaders, builder.corsAllowAll);
server.setHandler(handler);
}
@ -119,6 +119,7 @@ public final class S3Proxy {
private String virtualHost;
private long v4MaxNonChunkedRequestSize = 32 * 1024 * 1024;
private boolean ignoreUnknownHeaders;
private boolean corsAllowAll;
Builder() {
}
@ -174,6 +175,11 @@ public final class S3Proxy {
this.ignoreUnknownHeaders = ignoreUnknownHeaders;
return this;
}
public Builder corsAllowAll(boolean corsAllowAll) {
this.corsAllowAll = corsAllowAll;
return this;
}
}
public static Builder builder() {

Wyświetl plik

@ -25,6 +25,9 @@ public final class S3ProxyConstants {
"s3proxy.authorization";
public static final String PROPERTY_IDENTITY =
"s3proxy.identity";
/** When true, include "Access-Control-Allow-Origin: *" in all responses. */
public static final String PROPERTY_CORS_ALLOW_ALL =
"s3proxy.cors-allow-all";
public static final String PROPERTY_CREDENTIAL =
"s3proxy.credential";
public static final String PROPERTY_IGNORE_UNKNOWN_HEADERS =

Wyświetl plik

@ -197,6 +197,7 @@ final class S3ProxyHandler extends AbstractHandler {
private final Optional<String> virtualHost;
private final long v4MaxNonChunkedRequestSize;
private final boolean ignoreUnknownHeaders;
private final boolean corsAllowAll;
private final XMLOutputFactory xmlOutputFactory =
XMLOutputFactory.newInstance();
private BlobStoreLocator blobStoreLocator;
@ -216,7 +217,8 @@ final class S3ProxyHandler extends AbstractHandler {
S3ProxyHandler(final BlobStore blobStore, final String identity,
final String credential, Optional<String> virtualHost,
long v4MaxNonChunkedRequestSize, boolean ignoreUnknownHeaders) {
long v4MaxNonChunkedRequestSize, boolean ignoreUnknownHeaders,
boolean corsAllowAll) {
if (identity != null) {
anonymousIdentity = false;
blobStoreLocator = new BlobStoreLocator() {
@ -244,6 +246,7 @@ final class S3ProxyHandler extends AbstractHandler {
this.virtualHost = requireNonNull(virtualHost);
this.v4MaxNonChunkedRequestSize = v4MaxNonChunkedRequestSize;
this.ignoreUnknownHeaders = ignoreUnknownHeaders;
this.corsAllowAll = corsAllowAll;
this.defaultBlobStore = blobStore;
xmlOutputFactory.setProperty("javax.xml.stream.isRepairingNamespaces",
Boolean.FALSE);
@ -1448,6 +1451,10 @@ final class S3ProxyHandler extends AbstractHandler {
response.setStatus(status);
if (corsAllowAll) {
response.addHeader(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN, "*");
}
addMetadataToResponse(request, response, blob.getMetadata());
// TODO: handles only a single range due to jclouds limitations
Collection<String> contentRanges =