List of usage examples for io.vertx.core.http HttpClientRequest path
String path();
From source file:io.nitor.api.backend.s3.AWSRequestSigner.java
License:Apache License
public void copyHeadersAndSign(HttpServerRequest sreq, HttpClientRequest creq, byte[] body) { MessageDigest sha256 = SHA256_POOL.get(); String contentHash;/*from w w w .j a v a 2 s . c o m*/ if (body == null) { contentHash = UNSIGNED_PAYLOAD; } else { sha256.reset(); contentHash = hexDump(sha256.digest(body)); } MultiMap headers = creq.headers(); String dateTime = dateTimeFormat.format(clock.instant()); String date = dateTime.substring(0, 8); AwsCredentials secrets = secretsProvider.resolveCredentials(); StringBuilder signedHeaders = new StringBuilder(64); StringBuilder sb = new StringBuilder(256); sb.append(creq.method().name()).append('\n'); uriEncode(creq.path(), false, sb); sb.append('\n'); String query = creq.query(); if (query != null) { String[] split = query.split("&"); Arrays.sort(split); query = String.join("&", split); sb.append(query); } sb.append('\n'); putHeader(headers, sb, signedHeaders, "date", sreq); putHeader(headers, sb, signedHeaders, "host", serviceHost); putHeader(headers, sb, signedHeaders, "if-modified-since", sreq); putHeader(headers, sb, signedHeaders, "if-none-match", sreq); putHeader(headers, sb, signedHeaders, "range", sreq); putHeader(headers, sb, signedHeaders, "x-amz-content-sha256", contentHash); putHeader(headers, sb, signedHeaders, "x-amz-date", dateTime); if (secrets instanceof AwsSessionCredentials) { putHeader(headers, sb, signedHeaders, "x-amz-security-token", ((AwsSessionCredentials) secrets).sessionToken()); } putHeader(headers, sb, signedHeaders, "x-amz-storage-class", sreq); signedHeaders.setLength(signedHeaders.length() - 1); sb.append('\n').append(signedHeaders).append('\n'); sb.append(contentHash); sha256.reset(); String hashedCanonicalRequest = hexDump(sha256.digest(sb.toString().getBytes(ISO_8859_1))); sb.setLength(0); sb.append("AWS4-HMAC-SHA256\n").append(dateTime).append('\n').append(date).append(signingRegion) .append('\n').append(hashedCanonicalRequest); Mac hmac = HMACSHA256_POOL.get(); String signature = hexDump(hmacSHA256(hmac, signingKey(hmac, date, secrets), sb.toString())); sb.setLength(0); sb.append("AWS4-HMAC-SHA256 ").append("Credential=").append(secrets.accessKeyId()).append('/').append(date) .append(signingRegion).append(",SignedHeaders=").append(signedHeaders).append(",Signature=") .append(signature); headers.set(AUTHORIZATION, sb.toString()); }