configuration.setProperty("httpclient.retry-max", String.valueOf(0)); configuration.setProperty("storage-service.internal-error-retry-max", String.valueOf(0)); configuration.setProperty("storage-service.request-signature-version", authenticationHeaderSignatureVersion.toString()); configuration.setProperty("storage-service.disable-live-md5", String.valueOf(true)); configuration.setProperty("storage-service.default-region", host.getRegion());
@Override public void authorizeHttpRequest(final HttpUriRequest httpMethod, final HttpContext context, final String forceRequestSignatureVersion) throws ServiceException { if(forceRequestSignatureVersion != null) { final S3Protocol.AuthenticationHeaderSignatureVersion authenticationHeaderSignatureVersion = S3Protocol.AuthenticationHeaderSignatureVersion.valueOf(StringUtils.remove(forceRequestSignatureVersion, "-")); log.warn(String.format("Switched authentication signature version to %s", forceRequestSignatureVersion)); session.setSignatureVersion(authenticationHeaderSignatureVersion); } if(session.authorize(httpMethod, this.getProviderCredentials())) { return; } super.authorizeHttpRequest(httpMethod, context, forceRequestSignatureVersion); }
signature = S3Protocol.AuthenticationHeaderSignatureVersion.getDefault(host.getProtocol()); signature.toString(), region, "GET", bucket, key, null, null, expiry / 1000, false, true, false);
@Override public StorageObject upload(final Path file, final Local local, final BandwidthThrottle throttle, final StreamListener listener, final TransferStatus status, final ConnectionCallback callback) throws BackgroundException { final S3Protocol.AuthenticationHeaderSignatureVersion signatureVersion = session.getSignatureVersion(); switch(signatureVersion) { case AWS4HMACSHA256: if(Checksum.NONE == status.getChecksum()) { status.setChecksum(writer.checksum(file).compute(local.getInputStream(), status)); } break; } try { return super.upload(file, local, throttle, listener, status, callback); } catch(InteroperabilityException e) { if(!session.getSignatureVersion().equals(signatureVersion)) { // Retry if upload fails with Header "x-amz-content-sha256" set to the hex-encoded SHA256 hash of the // request payload is required for AWS Version 4 request signing return this.upload(file, local, throttle, listener, status, callback); } throw e; } }
@Override public String getAuthorization() { return S3Protocol.AuthenticationHeaderSignatureVersion.AWS2.name(); } }
public static AuthenticationHeaderSignatureVersion getDefault(final Protocol protocol) { try { return S3Protocol.AuthenticationHeaderSignatureVersion.valueOf(protocol.getAuthorization()); } catch(IllegalArgumentException e) { log.warn(String.format("Unsupported authentication context %s", protocol.getAuthorization())); return S3Protocol.AuthenticationHeaderSignatureVersion.valueOf( PreferencesFactory.get().getProperty("s3.signature.version")); } }
@Override public String getAuthorization() { return S3Protocol.AuthenticationHeaderSignatureVersion.AWS2.name(); } }