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