@Override protected StorageOwner getAccountOwnerImpl() throws ServiceException { if(log.isDebugEnabled()) { log.debug("Looking up owner of S3 account via the ListAllBuckets response: " + getProviderCredentials().getAccessKey()); } String bucketName = ""; // Root path of S3 service lists the user's buckets. HttpResponse httpResponse = performRestGet(bucketName, null, null, null); String contentType = httpResponse.getFirstHeader("Content-Type").getValue(); if(!isXmlContentType(contentType)) { throw new ServiceException("Expected XML document response from S3 but received content type " + contentType); } return getXmlResponseSaxParser() .parseListMyBucketsResponse( new HttpMethodReleaseInputStream(httpResponse)).getOwner(); }
throws ServiceException { HttpUriRequest postMethod = setupConnection( HTTP_METHOD.POST, bucketName, requestParameters); Map<String, Object> renamedMetadata = renameMetadataKeys(metadata); addMetadataToHeaders(postMethod, renamedMetadata); HttpResponse result = performRequest(postMethod, new int[]{200}); releaseConnection(result);
/** * Performs an HTTP HEAD request using the {@link #performRequest} method. * * @param bucketName the bucket's name * @param objectKey the object's key name, may be null if the operation is on a bucket only. * @param requestParameters parameters to add to the request URL as GET params * @param requestHeaders headers to add to the request * @return the HTTP method object used to perform the request * @throws org.jets3t.service.ServiceException * */ protected HttpResponse performRestHead(String bucketName, String objectKey, Map<String, String> requestParameters, Map<String, Object> requestHeaders) throws ServiceException { HttpUriRequest httpMethod = setupConnection( HTTP_METHOD.HEAD, bucketName, objectKey, requestParameters); // Add all request headers. addRequestHeadersToConnection(httpMethod, requestHeaders); return performRequest(httpMethod, new int[]{200}); }
prepareStorageClass(metadata, storageClass, true, objectKey); prepareServerSideEncryption(metadata, serverSideEncryptionAlgorithm, objectKey); boolean isExtraAclPutRequired = !prepareRESTHeaderAcl(metadata, acl); HttpResponseAndByteCount methodAndByteCount = performRestPut( bucketName, objectKey, metadata, requestParams, requestEntity, true); map.putAll(convertHeadersToMap(httpResponse.getAllHeaders())); map.put(StorageObject.METADATA_HEADER_CONTENT_LENGTH, String.valueOf(methodAndByteCount.getByteCount())); map = ServiceUtils.cleanRestMetadataMap( map, this.getRestHeaderPrefix(), this.getRestMetadataPrefix()); log.debug("Creating object with a non-canned ACL using REST, so an extra ACL Put is required"); putAclImpl(bucketName, objectKey, acl, null);
HttpPut putMethod = new HttpPut(signedPutUrl); Map<String, Object> renamedMetadata = renameMetadataKeys(object.getMetadataMap()); addMetadataToHeaders(putMethod, renamedMetadata); boolean isLiveMD5HashingRequired = isLiveMD5HashingRequired(object); String s3Endpoint = this.getEndpoint(); getJetS3tProperties(), isLiveMD5HashingRequired); HttpResponse httpResponse = performRequest(putMethod, new int[]{200}); releaseConnection(httpResponse); try { object.closeDataInputStream(); map.putAll(convertHeadersToMap(httpResponse.getAllHeaders())); uploadedObject.replaceAllMetadata(ServiceUtils.cleanRestMetadataMap( map, this.getRestHeaderPrefix(), this.getRestMetadataPrefix())); verifyExpectedAndActualETagValues(hexMD5OfUploadedData, uploadedObject);
if(getProviderCredentials() != null) { if(log.isDebugEnabled()) { log.debug("Adding authorization for Access Key '" + getProviderCredentials().getAccessKey() + "'."); ServiceUtils.formatRfc822Date(getCurrentTimeWithOffset())); requestURI, this.getEndpoint()); String requestSignatureVersion = this.getJetS3tProperties() .getStringProperty( "storage-service.request-signature-version", "AWS2") this.getProviderCredentials(), requestPayloadHexSHA256Hash, region); } else if ("AWS2".equalsIgnoreCase(forceRequestSignatureVersion) requestURI, getEndpoint()); if (bucketName != null && requestURI.getHost().startsWith(bucketName)) { fullUrl = "/" + bucketName + fullUrl; httpMethod.getMethod(), fullUrl, convertHeadersToMap(httpMethod.getAllHeaders()), null, getRestHeaderPrefix(), getResourceParameterNames()); if(log.isDebugEnabled()) { log.debug("Canonical string ('|' is a newline): " + canonicalString.replace('\n', '|'));
boolean disableDnsBuckets = this.getDisableDnsBuckets(); String endPoint = this.getEndpoint(); String hostname = ServiceUtils.generateS3HostnameForBucket( bucketName, disableDnsBuckets, endPoint); String virtualPath = this.getVirtualPath(); if(isHttpsOnly()) { int securePort = this.getHttpsPort(); url = "https://" + hostname + ":" + securePort + virtualPath + resourceString; int insecurePort = this.getHttpPort(); url = "http://" + hostname + ":" + insecurePort + virtualPath + resourceString; url = addRequestParametersToUrlPath(url, requestParameters); ServiceUtils.formatRfc822Date(getCurrentTimeWithOffset()));
httpResponse = performRestHead(bucketName, objectKey, requestParameters, requestHeaders); httpResponse = performRestGet(bucketName, objectKey, requestParameters, requestHeaders); map.putAll(convertHeadersToMap(httpResponse.getAllHeaders())); StorageObject responseObject = newObject(); responseObject.setKey(objectKey); if(!headOnly) { map, this.getRestHeaderPrefix(), this.getRestMetadataPrefix())); responseObject.setMetadataComplete(true); // Flag this object as having the complete metadata set. if(!headOnly) { log.debug("Releasing HttpMethod after HEAD"); releaseConnection(httpResponse);
int retryMaxCount = getJetS3tProperties().getIntProperty("httpclient.retry-max", 5); authorizeHttpRequest(httpMethod, context, forceRequestSignatureVersion); log.debug("Error response xml: " + isXmlContentType(contentType)); log.debug("Error response entity: " + response.getEntity()); log.debug("Error response entity length: " + if (isXmlContentType(contentType) && response.getEntity() != null && response.getEntity().getContentLength() != 0) sleepOnInternalError(++internalErrorCount, exception); && "NoSuchKey".equals(exception.getErrorCode()) && httpMethod.getFirstHeader(getRestHeaderPrefix() + "copy-source") == null) { sleepOnInternalError(++internalErrorCount, exception); if(log.isDebugEnabled()) { log.debug("Ignoring NoSuchKey/404 error on PUT to: " + httpMethod.getURI().toString()); else if((responseCode == 403 || responseCode == 401) && this.isRecoverable403(httpMethod, exception)) { originalURI, this.getEndpoint()); this.regionEndpointCache.putRegionForBucketName( bucketName, expectedRegion);
private S3Object getObjectWithSignedUrlImpl(String signedGetOrHeadUrl, boolean headOnly) throws ServiceException { String s3Endpoint = this.getEndpoint(); HttpResponse httpResponse = performRequest(httpMethod, new int[]{200}); map.putAll(convertHeadersToMap(httpResponse.getAllHeaders())); map, this.getRestHeaderPrefix(), this.getRestMetadataPrefix())); responseObject.setMetadataComplete(true); // Flag this object as having the complete metadata set. if(!headOnly) { log.debug("Releasing HttpMethod after HEAD"); releaseConnection(httpResponse);
protected void putObjectWithRequestEntityImpl(String bucketName, StorageObject object, HttpEntity requestEntity, Map<String, String> requestParams) throws ServiceException { Map<String, Object> map = createObjectImpl(bucketName, object.getKey(), object.getContentType(), requestEntity, object.getMetadataMap(), requestParams, object.getAcl(), object.getStorageClass(), boolean md5Verify = isLiveMD5HashingRequired(object) && requestEntity instanceof RepeatableRequestEntity; if(log.isTraceEnabled()) { verifyExpectedAndActualETagValues(hexMD5OfUploadedData, object);
Map<String, Object> map = createObjectImpl(bucketName, null, null, requestEntity, metadata, null, acl, null, null); StorageBucket bucket = newBucket(); bucket.setName(bucketName); bucket.setLocation(location);
@Override public Credentials getCredentials() { return new Credentials(client.getProviderCredentials().getAccessKey(), client.getProviderCredentials().getSecretKey()); }
@Override public S3Bucket getBucket(String bucketName) throws S3ServiceException { try { return (S3Bucket) super.getBucket(bucketName); } catch (ServiceException se) { throw new S3ServiceException(se); } }
protected StorageBucket createBucketImpl(String bucketName, String location, AccessControlList acl, String projectId) throws ServiceException { if(null == projectId) { return super.createBucketImpl(bucketName, location, acl); } return super.createBucketImpl(bucketName, location, acl, Collections.<String, Object>singletonMap("x-goog-project-id", projectId)); }
@Override public GSBucket createBucket(String bucketName) throws ServiceException { return (GSBucket) super.createBucket(bucketName); }
httpMethod.setHeader("x-goog-api-version", "2"); } else { super.authorizeHttpRequest(httpMethod, context, ignoredForceRequestSignatureVersion);
prepareStorageClass(metadata, storageClass, true, objectKey); prepareServerSideEncryption(metadata, serverSideEncryptionAlgorithm, objectKey); boolean isExtraAclPutRequired = !prepareRESTHeaderAcl(metadata, acl); HttpResponseAndByteCount methodAndByteCount = performRestPut( bucketName, objectKey, metadata, requestParams, requestEntity, true); map.putAll(convertHeadersToMap(httpResponse.getAllHeaders())); map.put(StorageObject.METADATA_HEADER_CONTENT_LENGTH, String.valueOf(methodAndByteCount.getByteCount())); map = ServiceUtils.cleanRestMetadataMap( map, this.getRestHeaderPrefix(), this.getRestMetadataPrefix()); log.debug("Creating object with a non-canned ACL using REST, so an extra ACL Put is required"); putAclImpl(bucketName, objectKey, acl, null);
HttpPut putMethod = new HttpPut(signedPutUrl); Map<String, Object> renamedMetadata = renameMetadataKeys(object.getMetadataMap()); addMetadataToHeaders(putMethod, renamedMetadata); boolean isLiveMD5HashingRequired = isLiveMD5HashingRequired(object); String s3Endpoint = this.getEndpoint(); getJetS3tProperties(), isLiveMD5HashingRequired); HttpResponse httpResponse = performRequest(putMethod, new int[]{200}); releaseConnection(httpResponse); try { object.closeDataInputStream(); map.putAll(convertHeadersToMap(httpResponse.getAllHeaders())); uploadedObject.replaceAllMetadata(ServiceUtils.cleanRestMetadataMap( map, this.getRestHeaderPrefix(), this.getRestMetadataPrefix())); verifyExpectedAndActualETagValues(hexMD5OfUploadedData, uploadedObject);
if(getProviderCredentials() != null) { if(log.isDebugEnabled()) { log.debug("Adding authorization for Access Key '" + getProviderCredentials().getAccessKey() + "'."); ServiceUtils.formatRfc822Date(getCurrentTimeWithOffset())); requestURI, this.getEndpoint()); String requestSignatureVersion = this.getJetS3tProperties() .getStringProperty( "storage-service.request-signature-version", "AWS2") this.getProviderCredentials(), requestPayloadHexSHA256Hash, region); } else if ("AWS2".equalsIgnoreCase(forceRequestSignatureVersion) requestURI, getEndpoint()); if (bucketName != null && requestURI.getHost().startsWith(bucketName)) { fullUrl = "/" + bucketName + fullUrl; httpMethod.getMethod(), fullUrl, convertHeadersToMap(httpMethod.getAllHeaders()), null, getRestHeaderPrefix(), getResourceParameterNames()); if(log.isDebugEnabled()) { log.debug("Canonical string ('|' is a newline): " + canonicalString.replace('\n', '|'));