Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright 2010-2015 Amazon.com, Inc. or its affiliates. All Rights Reserved.
   *
   * Portions copyright 2006-2009 James Murty. Please see LICENSE.txt
   * for applicable license terms and NOTICE.txt for applicable notices.
   *
   * Licensed under the Apache License, Version 2.0 (the "License").
   * You may not use this file except in compliance with the License.
   * A copy of the License is located at
  *
  *  http://aws.amazon.com/apache2.0
  *
  * or in the "license" file accompanying this file. This file is distributed
  * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
  * express or implied. See the License for the specific language governing
  * permissions and limitations under the License.
  */
 package com.amazonaws.services.s3.internal;
 
 import java.util.List;
 import java.util.Map;
 
Utilities useful for REST/HTTP S3Service implementations.
 
 public class RestUtils {

    
The set of request parameters which must be included in the canonical string to sign.
 
     private static final List<StringSIGNED_PARAMETERS = Arrays.asList(new String[] {
             "acl""torrent""logging""location""policy""requestPayment""versioning",
             "versions""versionId""notification""uploadId""uploads""partNumber""website",
             "delete""lifecycle""tagging""cors""restore""replication",
     });

    
Calculate the canonical string for a REST/HTTP request to S3 by only including query parameters that are mentioned in SIGNED_PARAMETERS.

 
     public static <T> String makeS3CanonicalString(String method,
             String resourceSignableRequest<T> requestString expires) {
         return makeS3CanonicalString(methodresourcerequestexpiresnull);
     }

    
Calculate the canonical string for a REST/HTTP request to S3.

Parameters:
method The HTTP verb.
resource The HTTP-encoded resource path.
request The request to be canonicalized.
expires When expires is non-null, it will be used instead of the Date header.
additionalQueryParamsToSign A collection of user-specified query parameters that should be included in the canonical request, in addition to those default parameters that are always signed.
Returns:
The canonical string representation for the given S3 request.
 
     public static <T> String makeS3CanonicalString(String method,
             String resourceSignableRequest<T> requestString expires,
             Collection<StringadditionalQueryParamsToSign) {
 
         StringBuilder buf = new StringBuilder();
         buf.append(method + "\n");
 
         // Add all interesting headers to a list, then sort them.  "Interesting"
         // is defined as Content-MD5, Content-Type, Date, and x-amz-
         Map<StringStringheadersMap = request.getHeaders();
         SortedMap<StringStringinterestingHeaders = new TreeMap<StringString>();
         if (headersMap != null && headersMap.size() > 0) {
             Iterator<Map.Entry<StringString>> headerIter = headersMap.entrySet().iterator();
             while (headerIter.hasNext()) {
                 Map.Entry<StringStringentry = (Map.Entry<StringString>) headerIter.next();
                 String key = entry.getKey();
                String value = entry.getValue();
                if (key == nullcontinue;
                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(.))
                {
                    interestingHeaders.put(lkvalue);
                }
            }
        }
        // Remove default date timestamp if "x-amz-date" is set.
        if (interestingHeaders.containsKey(.)) {
            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<StringStringparameterrequest.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- ;-))
        for (Iterator<Map.Entry<StringString>> i = interestingHeaders.entrySet().iterator(); i.hasNext(); ) {
            Map.Entry<StringStringentry = (Map.Entry<StringString>) i.next();
            String key = (Stringentry.getKey();
            String value = entry.getValue();
            if (key.startsWith(.)) {
                buf.append(key).append(':');
                if (value != null) {
                    buf.append(value);
                }
            } else if (value != null) {
                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) {
            if ( !.contains(parameterName)
                 &&
                 (additionalQueryParamsToSign == null ||
                 !additionalQueryParamsToSign.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();
    }
New to GrepCode? Check out our FAQ X