Example usage for io.vertx.core.http HttpClientRequest path

List of usage examples for io.vertx.core.http HttpClientRequest path

Introduction

In this page you can find the example usage for io.vertx.core.http HttpClientRequest path.

Prototype

String path();

Source Link

Usage

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());
}