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

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

Introduction

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

Prototype

String query();

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;//www  .j a  v a2s.  c  om
    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());
}