@Override public HashCode getContentMD5AsHashCode() { return delegate.getContentMD5AsHashCode(); }
@Override public HashCode getContentMD5AsHashCode() { return delegate.getContentMD5AsHashCode(); }
@Override public HashCode getContentMD5AsHashCode() { return delegate.getContentMD5AsHashCode(); }
@Override public HashCode getContentMD5AsHashCode() { return delegate.getContentMD5AsHashCode(); }
@Override protected HttpUriRequest convert(HttpRequest request) throws IOException { HttpUriRequest returnVal = apacheHCUtils.convertToApacheRequest(request); if (request.getPayload() != null && request.getPayload().getContentMetadata().getContentMD5() != null) { String md5 = base64().encode(request.getPayload().getContentMetadata().getContentMD5AsHashCode().asBytes()); returnVal.addHeader("Content-MD5", md5); } if (!returnVal.containsHeader(HttpHeaders.USER_AGENT)) { returnVal.addHeader(HttpHeaders.USER_AGENT, userAgent); } return returnVal; }
@Override public String putBlob(final String containerName, final Blob blob) throws IOException { byte[] payload; HashCode actualHashCode; HashingInputStream input = new HashingInputStream(Hashing.md5(), blob.getPayload().openStream()); try { payload = ByteStreams.toByteArray(input); long actualSize = payload.length; Long expectedSize = blob.getMetadata().getContentMetadata().getContentLength(); if (expectedSize != null && actualSize != expectedSize) { throw new IOException("Content-Length mismatch, actual: " + actualSize + " expected: " + expectedSize); } actualHashCode = input.hash(); HashCode expectedHashCode = blob.getPayload().getContentMetadata().getContentMD5AsHashCode(); if (expectedHashCode != null && !actualHashCode.equals(expectedHashCode)) { throw new IOException("MD5 hash code mismatch, actual: " + actualHashCode + " expected: " + expectedHashCode); } } finally { Closeables2.closeQuietly(input); } Blob newBlob = createUpdatedCopyOfBlobInContainer(containerName, blob, payload, actualHashCode); Map<String, Blob> map = containerToBlobs.get(containerName); String blobName = newBlob.getMetadata().getName(); map.put(blobName, newBlob); containerToBlobAccess.get(containerName).put(blobName, BlobAccess.PRIVATE); return base16().lowerCase().encode(actualHashCode.asBytes()); }
@Override protected HttpUriRequest convert(HttpRequest request) throws IOException { HttpUriRequest returnVal = apacheHCUtils.convertToApacheRequest(request); if (request.getPayload() != null && request.getPayload().getContentMetadata().getContentMD5() != null) { String md5 = base64().encode(request.getPayload().getContentMetadata().getContentMD5AsHashCode().asBytes()); returnVal.addHeader("Content-MD5", md5); } if (!returnVal.containsHeader(HttpHeaders.USER_AGENT)) { returnVal.addHeader(HttpHeaders.USER_AGENT, userAgent); } return returnVal; }
@Override public String putBlob(final String containerName, final Blob blob) throws IOException { byte[] payload; HashCode actualHashCode; HashingInputStream input = new HashingInputStream(Hashing.md5(), blob.getPayload().openStream()); try { payload = ByteStreams.toByteArray(input); long actualSize = payload.length; Long expectedSize = blob.getMetadata().getContentMetadata().getContentLength(); if (expectedSize != null && actualSize != expectedSize) { throw new IOException("Content-Length mismatch, actual: " + actualSize + " expected: " + expectedSize); } actualHashCode = input.hash(); HashCode expectedHashCode = blob.getPayload().getContentMetadata().getContentMD5AsHashCode(); if (expectedHashCode != null && !actualHashCode.equals(expectedHashCode)) { throw new IOException("MD5 hash code mismatch, actual: " + actualHashCode + " expected: " + expectedHashCode); } } finally { Closeables2.closeQuietly(input); } Blob newBlob = createUpdatedCopyOfBlobInContainer(containerName, blob, payload, actualHashCode); Map<String, Blob> map = containerToBlobs.get(containerName); String blobName = newBlob.getMetadata().getName(); map.put(blobName, newBlob); containerToBlobAccess.get(containerName).put(blobName, BlobAccess.PRIVATE); return base16().lowerCase().encode(actualHashCode.asBytes()); }
HashCode md5 = payload.getContentMetadata().getContentMD5AsHashCode(); if (md5 != null) {
@Override public String putBlob(final String containerName, final Blob blob) throws IOException { byte[] payload; HashCode actualHashCode; HashingInputStream input = new HashingInputStream(Hashing.md5(), blob.getPayload().openStream()); try { payload = ByteStreams.toByteArray(input); long actualSize = payload.length; Long expectedSize = blob.getMetadata().getContentMetadata().getContentLength(); if (expectedSize != null && actualSize != expectedSize) { throw new IOException("Content-Length mismatch, actual: " + actualSize + " expected: " + expectedSize); } actualHashCode = input.hash(); HashCode expectedHashCode = blob.getPayload().getContentMetadata().getContentMD5AsHashCode(); if (expectedHashCode != null && !actualHashCode.equals(expectedHashCode)) { throw new IOException("MD5 hash code mismatch, actual: " + actualHashCode + " expected: " + expectedHashCode); } } finally { Closeables2.closeQuietly(input); } Blob newBlob = createUpdatedCopyOfBlobInContainer(containerName, blob, payload, actualHashCode); Map<String, Blob> map = containerToBlobs.get(containerName); String blobName = newBlob.getMetadata().getName(); map.put(blobName, newBlob); containerToBlobAccess.get(containerName).put(blobName, BlobAccess.PRIVATE); return base16().lowerCase().encode(actualHashCode.asBytes()); }
HashCode md5 = payload.getContentMetadata().getContentMD5AsHashCode(); if (md5 != null) {
@Override public String putBlob(String container, Blob blob, PutOptions options) { long length = checkNotNull(blob.getPayload().getContentMetadata().getContentLength()); if (length != 0 && (options.isMultipart() || !blob.getPayload().isRepeatable())) { // JCLOUDS-912 prevents using single-part uploads with InputStream payloads. // Work around this with multi-part upload which buffers parts in-memory. return putMultipartBlob(container, blob, options); } else { ObjectTemplate template = blobMetadataToObjectTemplate.apply(blob.getMetadata()); HashCode md5 = blob.getMetadata().getContentMetadata().getContentMD5AsHashCode(); if (md5 != null) { template.md5Hash(base64().encode(md5.asBytes())); } if (options.getBlobAccess() == BlobAccess.PUBLIC_READ) { ObjectAccessControls controls = ObjectAccessControls.builder() .entity("allUsers") .bucket(container) .role(READER) .build(); template.addAcl(controls); } return api.getObjectApi().multipartUpload(container, template, blob.getPayload()).etag(); } }
@Override public String putBlob(String container, Blob blob, PutOptions options) { if (options.isMultipart() || !blob.getPayload().isRepeatable()) { // JCLOUDS-912 prevents using single-part uploads with InputStream payloads. // Work around this with multi-part upload which buffers parts in-memory. return putMultipartBlob(container, blob, options); } else { checkNotNull(blob.getPayload().getContentMetadata().getContentLength()); ObjectTemplate template = blobMetadataToObjectTemplate.apply(blob.getMetadata()); HashCode md5 = blob.getMetadata().getContentMetadata().getContentMD5AsHashCode(); if (md5 != null) { template.md5Hash(base64().encode(md5.asBytes())); } if (options.getBlobAccess() == BlobAccess.PUBLIC_READ) { ObjectAccessControls controls = ObjectAccessControls.builder() .entity("allUsers") .bucket(container) .role(READER) .build(); template.addAcl(controls); } return api.getObjectApi().multipartUpload(container, template, blob.getPayload()).etag(); } }
@Override public String putBlob(String container, Blob blob, PutOptions options) { long length = checkNotNull(blob.getPayload().getContentMetadata().getContentLength()); if (length != 0 && (options.isMultipart() || !blob.getPayload().isRepeatable())) { // JCLOUDS-912 prevents using single-part uploads with InputStream payloads. // Work around this with multi-part upload which buffers parts in-memory. return putMultipartBlob(container, blob, options); } else { ObjectTemplate template = blobMetadataToObjectTemplate.apply(blob.getMetadata()); HashCode md5 = blob.getMetadata().getContentMetadata().getContentMD5AsHashCode(); if (md5 != null) { template.md5Hash(base64().encode(md5.asBytes())); } if (options.getBlobAccess() == BlobAccess.PUBLIC_READ) { ObjectAccessControls controls = ObjectAccessControls.builder() .entity("allUsers") .bucket(container) .role(READER) .build(); template.addAcl(controls); } return api.getObjectApi().multipartUpload(container, template, blob.getPayload()).etag(); } }
public void testSignPutBlob() throws ArrayIndexOutOfBoundsException, SecurityException, IllegalArgumentException, NoSuchMethodException, IOException { HashCode hashCode = HashCode.fromBytes(new byte[16]); Blob blob = blobFactory.get().name(blobName).forSigning().contentLength(2L).contentMD5(hashCode) .contentType("text/plain").build(); assertEquals(blob.getPayload().getContentMetadata().getContentMD5AsHashCode(), hashCode); HttpRequest request = signer.signPutBlob(containerName, blob); assertRequestLineEquals(request, "PUT " + fullUrl + " HTTP/1.1"); assertNonPayloadHeadersEqual( request, "Authorization: Basic aWRlbnRpdHk6Y3JlZGVudGlhbA==\n" + "Content-Length: 2\n" + "Content-MD5: AAAAAAAAAAAAAAAAAAAAAA==\n" + "Content-Type: text/plain\n"); assertContentHeadersEqual(request, "text/plain", null, null, null, 2L, hashCode.asBytes(), null); assertEquals(request.getFilters().size(), 0); }
/** upper-cases first char, and lower-cases rest!! **/ public void testGetWithoutKnowingServerMessesWithMetadataKeyCaseFormat() throws Exception { MockWebServer server = mockOpenStackServer(); server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json")))); server.enqueue(addCommonHeaders(objectResponse() // note silly casing .addHeader(OBJECT_METADATA_PREFIX + "Apiname", "swift") .addHeader(OBJECT_METADATA_PREFIX + "Apiversion", "v1.1"))); try { SwiftApi api = api(server.getUrl("/").toString(), "openstack-swift"); SwiftObject object = api.getObjectApi("DFW", "myContainer").getWithoutBody("myObject"); assertEquals(object.getName(), "myObject"); assertEquals(object.getETag(), "8a964ee2a5e88be344f36c22562a6486"); // Check MD5 is parsed from the ETag header. assertEquals(base16().lowerCase().decode(object.getETag()), object.getPayload().getContentMetadata().getContentMD5AsHashCode().asBytes()); assertEquals(object.getLastModified(), dates.rfc822DateParse("Fri, 12 Jun 2010 13:40:18 GMT")); for (Entry<String, String> entry : object.getMetadata().entrySet()) { assertEquals(object.getMetadata().get(entry.getKey().toLowerCase()), entry.getValue()); } assertEquals(object.getPayload().getContentMetadata().getContentType(), "text/plain; charset=UTF-8"); assertEquals(toStringAndClose(object.getPayload().openStream()), ""); assertEquals(server.getRequestCount(), 2); assertAuthentication(server); assertRequest(server.takeRequest(), "HEAD", "/v1/MossoCloudFS_5bcf396e-39dd-45ff-93a1-712b9aba90a9/myContainer/myObject"); } finally { server.shutdown(); } }
public void testList() throws Exception { MockWebServer server = mockOpenStackServer(); server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json")))); server.enqueue(addCommonHeaders(containerResponse() .addHeader(CONTAINER_READ, CONTAINER_ACL_ANYBODY_READ) .setBody(stringFromResource("/object_list.json")))); try { SwiftApi api = api(server.getUrl("/").toString(), "openstack-swift"); ObjectList objects = api.getObjectApi("DFW", "myContainer").list(); assertEquals(objects, parsedObjectsForUrl(server.getUrl("/").toString())); assertEquals(objects.getContainer().getName(), "myContainer"); assertTrue(objects.getContainer().getAnybodyRead().get()); // Check MD5 is parsed from the ETag header. SwiftObject object1 = objects.get(1); assertEquals(base16().lowerCase().decode(object1.getETag()), object1.getPayload().getContentMetadata().getContentMD5AsHashCode().asBytes()); assertEquals(server.getRequestCount(), 2); assertAuthentication(server); assertRequest(server.takeRequest(), "GET", "/v1/MossoCloudFS_5bcf396e-39dd-45ff-93a1-712b9aba90a9/myContainer?format=json"); } finally { server.shutdown(); } }
@Override public MutableBlobMetadata apply(SwiftObject from) { if (from == null) return null; MutableBlobMetadata to = new MutableBlobMetadataImpl(); to.setContainer(container.getName()); if (container.getAnybodyRead().isPresent()) { to.setPublicUri(from.getUri()); } String eTag = from.getETag(); to.setUri(from.getUri()); to.setETag(eTag); to.setName(from.getName()); to.setLastModified(from.getLastModified()); to.setContentMetadata(from.getPayload().getContentMetadata()); to.getContentMetadata().setContentMD5(from.getPayload().getContentMetadata().getContentMD5AsHashCode()); to.getContentMetadata().setExpires(from.getPayload().getContentMetadata().getExpires()); to.setUserMetadata(from.getMetadata()); if (eTag != null && eTag.equals(ParseObjectListFromResponse.SUBDIR_ETAG)) { to.setType(StorageType.FOLDER); } else { to.setType(StorageType.BLOB); } to.setSize(from.getPayload().getContentMetadata().getContentLength()); return to; }
@Override public MutableBlobMetadata apply(SwiftObject from) { if (from == null) return null; MutableBlobMetadata to = new MutableBlobMetadataImpl(); to.setContainer(container.getName()); if (container.getAnybodyRead().isPresent()) { to.setPublicUri(from.getUri()); } String eTag = from.getETag(); to.setUri(from.getUri()); to.setETag(eTag); to.setName(from.getName()); to.setLastModified(from.getLastModified()); to.setContentMetadata(from.getPayload().getContentMetadata()); to.getContentMetadata().setContentMD5(from.getPayload().getContentMetadata().getContentMD5AsHashCode()); to.getContentMetadata().setExpires(from.getPayload().getContentMetadata().getExpires()); to.setUserMetadata(from.getMetadata()); if (eTag != null && eTag.equals(ParseObjectListFromResponse.SUBDIR_ETAG)) { to.setType(StorageType.FOLDER); } else { to.setType(StorageType.BLOB); } to.setSize(from.getPayload().getContentMetadata().getContentLength()); to.setTier(Tier.STANDARD); return to; }
@Override public MutableBlobMetadata apply(SwiftObject from) { if (from == null) return null; MutableBlobMetadata to = new MutableBlobMetadataImpl(); to.setContainer(container.getName()); if (container.getAnybodyRead().isPresent()) { to.setPublicUri(from.getUri()); } String eTag = from.getETag(); to.setUri(from.getUri()); to.setETag(eTag); to.setName(from.getName()); to.setLastModified(from.getLastModified()); to.setContentMetadata(from.getPayload().getContentMetadata()); to.getContentMetadata().setContentMD5(from.getPayload().getContentMetadata().getContentMD5AsHashCode()); to.getContentMetadata().setExpires(from.getPayload().getContentMetadata().getExpires()); to.setUserMetadata(from.getMetadata()); if (eTag != null && eTag.equals(ParseObjectListFromResponse.SUBDIR_ETAG)) { to.setType(StorageType.FOLDER); } else { to.setType(StorageType.BLOB); } to.setSize(from.getPayload().getContentMetadata().getContentLength()); to.setTier(Tier.STANDARD); return to; }