Beispiel #1
0
        public string CanonicalizeHttpRequest(HttpRequestMessage request, string accountName)
        {
            // Start with x-ms-date or Date
            string dateValue = HttpResponseMessageUtils.GetHeaderSingleValueOrDefault(request.Headers, Constants.HeaderConstants.Date);

            if (string.IsNullOrEmpty(dateValue))
            {
                dateValue = CommonUtils.GetDateTimeValueOrDefault(request.Headers.Date);
            }

            CanonicalizedString canonicalizedString = new CanonicalizedString(dateValue);

            // And we only need the canonicalized resource in addition to date
            canonicalizedString.AppendCanonicalizedElement(CanonicalizationHelper.GetCanonicalizedResourceForSharedKeyLite(request.RequestUri, accountName));

            return(canonicalizedString.Value);
        }
Beispiel #2
0
        private static void PopulateRequestResult(RequestResult reqResult, HttpResponseMessage response)
        {
            reqResult.HttpStatusMessage = response.ReasonPhrase;
            reqResult.HttpStatusCode    = (int)response.StatusCode;
#if !WINDOWS_RT
            if (response.Headers != null)
            {
                reqResult.ServiceRequestID = HttpResponseMessageUtils.GetHeaderSingleValueOrDefault(response.Headers, Constants.HeaderConstants.RequestIdHeader);
                reqResult.RequestDate      = response.Headers.Date.HasValue ? response.Headers.Date.Value.UtcDateTime.ToString("R", CultureInfo.InvariantCulture) : null;
                reqResult.Etag             = response.Headers.ETag?.ToString();
                reqResult.ErrorCode        = HttpResponseMessageUtils.GetHeaderSingleValueOrDefault(response.Headers, Constants.HeaderConstants.StorageErrorCodeHeader);
            }

            if (response.Content != null && response.Content.Headers != null)
            {
                reqResult.ContentMd5 = response.Content.Headers.ContentMD5 != null?Convert.ToBase64String(response.Content.Headers.ContentMD5) : null;

                reqResult.IngressBytes += response.Content.Headers.ContentLength.HasValue ? (long)response.Content.Headers.ContentLength : 0;
            }
#endif
        }
        public string CanonicalizeHttpRequest(HttpRequestMessage request, string accountName)
        {
            // The first element should be the Method of the request.
            // I.e. GET, POST, PUT, or HEAD.
            CanonicalizedString canonicalizedString = new CanonicalizedString(request.Method.Method);

            // The next elements are Content*
            // If any element is missing it may be empty.
            if (request.Content != null)
            {
                canonicalizedString.AppendCanonicalizedElement(HttpUtility.CombineHttpHeaderValues(request.Content.Headers.ContentEncoding));
                canonicalizedString.AppendCanonicalizedElement(HttpUtility.CombineHttpHeaderValues(request.Content.Headers.ContentLanguage));

                long contentLength = request.Content.Headers.ContentLength.HasValue ? request.Content.Headers.ContentLength.Value : -1;
                canonicalizedString.AppendCanonicalizedElement(contentLength == -1 ? string.Empty : contentLength.ToString());

                canonicalizedString.AppendCanonicalizedElement((request.Content.Headers.ContentMD5 == null) ? string.Empty :
                                                               Convert.ToBase64String(request.Content.Headers.ContentMD5));
                canonicalizedString.AppendCanonicalizedElement((request.Content.Headers.ContentType == null) ? string.Empty :
                                                               request.Content.Headers.ContentType.ToString());
            }
            else
            {
                canonicalizedString.AppendCanonicalizedElement(string.Empty);
                canonicalizedString.AppendCanonicalizedElement(string.Empty);
                if ((request.Method == HttpMethod.Put) ||
                    (request.Method == HttpMethod.Delete))
                {
                    canonicalizedString.AppendCanonicalizedElement("0");
                }
                else
                {
                    canonicalizedString.AppendCanonicalizedElement(string.Empty);
                }

                canonicalizedString.AppendCanonicalizedElement(string.Empty);
                canonicalizedString.AppendCanonicalizedElement(string.Empty);
            }

            // If x-ms-date header exists, Date should be empty string
            string dateValue = HttpResponseMessageUtils.GetHeaderSingleValueOrDefault(request.Headers, Constants.HeaderConstants.Date);

            if (!string.IsNullOrEmpty(dateValue))
            {
                dateValue = string.Empty;
            }
            else
            {
                dateValue = CommonUtils.GetDateTimeValueOrDefault(request.Headers.Date);
            }

            canonicalizedString.AppendCanonicalizedElement(dateValue);

            // Conditionals and range
            canonicalizedString.AppendCanonicalizedElement(CommonUtils.GetDateTimeValueOrDefault(request.Headers.IfModifiedSince));
            canonicalizedString.AppendCanonicalizedElement(CommonUtils.GetSingleValueOrDefault(request.Headers.IfMatch));
            canonicalizedString.AppendCanonicalizedElement(CommonUtils.GetSingleValueOrDefault(request.Headers.IfNoneMatch));
            canonicalizedString.AppendCanonicalizedElement(CommonUtils.GetDateTimeValueOrDefault(request.Headers.IfUnmodifiedSince));
            canonicalizedString.AppendCanonicalizedElement((request.Headers.Range == null) ? string.Empty :
                                                           CommonUtils.GetSingleValueOrDefault(request.Headers.Range.Ranges));

            // Rest of the headers
            CanonicalizationHelper.AddCanonicalizedHeaders(request, canonicalizedString);

            // Now we append the canonicalized resource element
            canonicalizedString.AppendCanonicalizedElement(CanonicalizationHelper.GetCanonicalizedResourceForSharedKey(request.RequestUri, accountName));

            return(canonicalizedString.Value);
        }