Example usage for com.amazonaws.services.s3 Headers AMAZON_PREFIX

List of usage examples for com.amazonaws.services.s3 Headers AMAZON_PREFIX

Introduction

In this page you can find the example usage for com.amazonaws.services.s3 Headers AMAZON_PREFIX.

Prototype

String AMAZON_PREFIX

To view the source code for com.amazonaws.services.s3 Headers AMAZON_PREFIX.

Click Source Link

Document

Prefix for general Amazon headers: x-amz-

Usage

From source file:com.emc.vipr.services.s3.ViPRS3Signer.java

License:Open Source License

/**
 * Calculate the canonical string for a REST/HTTP request to S3.
 * <p/>// ww w.ja  va2 s. c  om
 * When expires is non-null, it will be used instead of the Date header.
 */
protected String makeS3CanonicalString(String method, String resource, Request<?> request, String expires) {
    StringBuilder buf = new StringBuilder();
    buf.append(method).append("\n");

    // Add all interesting headers to a list, then sort them.  "Interesting"
    // is defined as Content-MD5, Content-Type, Date, and x-amz- and x-emc-
    Map<String, String> headersMap = request.getHeaders();
    SortedMap<String, String> interestingHeaders = new TreeMap<String, String>();
    if (headersMap != null && headersMap.size() > 0) {
        for (Map.Entry<String, String> entry : headersMap.entrySet()) {
            String key = entry.getKey();
            String value = entry.getValue();

            if (key == null)
                continue;
            String lk = key.toLowerCase(Locale.getDefault());

            // Ignore any headers that are not particularly interesting.
            if (lk.equals("content-type") || lk.equals("content-md5") || lk.equals("date")
                    || lk.startsWith(Headers.AMAZON_PREFIX) || lk.startsWith(ViPRConstants.EMC_PREFIX)) {
                interestingHeaders.put(lk, value);
            }
        }
    }

    // Remove default date timestamp if "x-amz-date" is set.
    if (interestingHeaders.containsKey(Headers.S3_ALTERNATE_DATE)) {
        interestingHeaders.put("date", "");
    }

    // Use the expires value as the timestamp if it is available. This trumps both the default
    // "date" timestamp, and the "x-amz-date" header.
    if (expires != null) {
        interestingHeaders.put("date", expires);
    }

    // These headers require that we still put a new line in after them,
    // even if they don't exist.
    if (!interestingHeaders.containsKey("content-type")) {
        interestingHeaders.put("content-type", "");
    }
    if (!interestingHeaders.containsKey("content-md5")) {
        interestingHeaders.put("content-md5", "");
    }

    // Any parameters that are prefixed with "x-amz-" need to be included
    // in the headers section of the canonical string to sign
    for (Map.Entry<String, String> parameter : request.getParameters().entrySet()) {
        if (parameter.getKey().startsWith("x-amz-")) {
            interestingHeaders.put(parameter.getKey(), parameter.getValue());
        }
    }

    // Add all the interesting headers (i.e.: all that startwith x-amz- or x-emc- ;-))
    for (Map.Entry<String, String> entry : interestingHeaders.entrySet()) {
        String key = entry.getKey();
        Object value = entry.getValue();

        if (key.startsWith(Headers.AMAZON_PREFIX) || key.startsWith(ViPRConstants.EMC_PREFIX)) {
            buf.append(key).append(':').append(value);
        } else {
            buf.append(value);
        }
        buf.append("\n");
    }

    // Add all the interesting parameters
    buf.append(resource);
    String[] parameterNames = request.getParameters().keySet()
            .toArray(new String[request.getParameters().size()]);
    Arrays.sort(parameterNames);
    char separator = '?';
    for (String parameterName : parameterNames) {
        // Skip any parameters that aren't part of the canonical signed string
        if (!SIGNED_PARAMETERS.contains(parameterName))
            continue;

        buf.append(separator);
        buf.append(parameterName);
        String parameterValue = request.getParameters().get(parameterName);
        if (parameterValue != null) {
            buf.append("=").append(parameterValue);
        }

        separator = '&';
    }

    return buf.toString();
}