more required parameters needed for signing

allows s3cmd info s3://bucket/ to work
pull/21/merge
Ka-Hing Cheung 2014-11-18 14:19:14 -08:00 zatwierdzone przez Andrew Gaul
rodzic 04ac43c2f2
commit e5c12c1777
1 zmienionych plików z 20 dodań i 4 usunięć

Wyświetl plik

@ -44,6 +44,7 @@ import com.google.common.base.Preconditions;
import com.google.common.base.Strings; import com.google.common.base.Strings;
import com.google.common.base.Throwables; import com.google.common.base.Throwables;
import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.SortedSetMultimap; import com.google.common.collect.SortedSetMultimap;
import com.google.common.collect.TreeMultimap; import com.google.common.collect.TreeMultimap;
import com.google.common.hash.HashCode; import com.google.common.hash.HashCode;
@ -97,6 +98,11 @@ final class S3ProxyHandler extends AbstractHandler {
Pattern.compile("<LocationConstraint>(.*?)</LocationConstraint>"); Pattern.compile("<LocationConstraint>(.*?)</LocationConstraint>");
private static final Pattern MULTI_DELETE_KEY_PATTERN = private static final Pattern MULTI_DELETE_KEY_PATTERN =
Pattern.compile("<Key>(.*?)</Key>"); Pattern.compile("<Key>(.*?)</Key>");
private static final Set<String> SIGNED_SUBRESOURCES = ImmutableSet.of(
"acl", "lifecycle", "location", "logging", "notification",
"partNumber", "policy", "requestPayment", "torrent", "uploadId",
"uploads", "versionId", "versioning", "versions", "website"
);
private final BlobStore blobStore; private final BlobStore blobStore;
private final String identity; private final String identity;
@ -997,11 +1003,21 @@ final class S3ProxyHandler extends AbstractHandler {
.append(entry.getValue()).append('\n'); .append(entry.getValue()).append('\n');
} }
builder.append(uri); builder.append(uri);
if ("".equals(request.getParameter("acl"))) {
builder.append("?acl"); char separator = '?';
} else if ("".equals(request.getParameter("delete"))) { for (String subresource : Collections.list(
builder.append("?delete"); request.getParameterNames())) {
if (SIGNED_SUBRESOURCES.contains(subresource)) {
builder.append(separator).append(subresource);
String value = request.getParameter(subresource);
if (!"".equals(value)) {
builder.append('=').append(value);
} }
separator = '&';
}
}
String stringToSign = builder.toString(); String stringToSign = builder.toString();
logger.trace("stringToSign: {}", stringToSign); logger.trace("stringToSign: {}", stringToSign);