/// <summary> /// Applies the condition for a source blob to the web request. /// </summary> /// <param name="request">The request to be modified.</param> /// <param name="accessCondition">Access condition to be added to the request.</param> internal static void ApplyAccessConditionToSource(this HttpRequestMessage request, AccessCondition accessCondition) { if (accessCondition != null) { if (!string.IsNullOrEmpty(accessCondition.IfMatchETag)) { request.Headers.Add(Constants.HeaderConstants.SourceIfMatchHeader, accessCondition.IfMatchETag); } if (!string.IsNullOrEmpty(accessCondition.IfNoneMatchETag)) { request.Headers.Add(Constants.HeaderConstants.SourceIfNoneMatchHeader, accessCondition.IfNoneMatchETag); } if (accessCondition.IfModifiedSinceTime.HasValue) { request.Headers.Add( Constants.HeaderConstants.SourceIfModifiedSinceHeader, HttpUtility.ConvertDateTimeToHttpString(accessCondition.IfModifiedSinceTime.Value)); } if (accessCondition.IfNotModifiedSinceTime.HasValue) { request.Headers.Add( Constants.HeaderConstants.SourceIfUnmodifiedSinceHeader, HttpUtility.ConvertDateTimeToHttpString(accessCondition.IfNotModifiedSinceTime.Value)); } if (!string.IsNullOrEmpty(accessCondition.LeaseId)) { throw new InvalidOperationException(SR.LeaseConditionOnSource); } } }
public void SignRequest(HttpWebRequest request, OperationContext operationContext) { string dateString = HttpUtility.ConvertDateTimeToHttpString(DateTime.UtcNow); request.Headers.Add(Constants.HeaderConstants.Date, dateString); if (this.credentials.IsSharedKey) { // Canonicalize request string message = this.canonicalizer.CanonicalizeHttpRequest(request, this.resourceAccountName); // Compute hash string computedBase64Signature = CryptoUtility.ComputeHmac256(this.credentials.KeyValue, message); // Add authorization headers if (!string.IsNullOrEmpty(this.credentials.KeyName)) { request.Headers.Add(Constants.HeaderConstants.KeyNameHeader, this.credentials.KeyName); } request.Headers.Add( "Authorization", string.Format(CultureInfo.InvariantCulture, "{0} {1}:{2}", this.canonicalizer.AuthorizationScheme, this.credentials.AccountName, computedBase64Signature)); } }
protected override Task <HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { string dateString = HttpUtility.ConvertDateTimeToHttpString(DateTimeOffset.UtcNow); request.Headers.Add(Constants.HeaderConstants.Date, dateString); if (this.credentials.IsSharedKey) { string message = this.canonicalizer.CanonicalizeHttpRequest(request, this.accountName); #if RTMD string signature = CryptoUtility.ComputeHmac256(this.credentials.KeyValue, message); #else string signature = CryptoUtility.ComputeHmac256(this.credentials.ExportKey(), message); #endif if (!string.IsNullOrEmpty(this.credentials.KeyName)) { request.Headers.Add(Constants.HeaderConstants.KeyNameHeader, this.credentials.KeyName); } request.Headers.Authorization = new AuthenticationHeaderValue( this.canonicalizer.AuthorizationScheme, string.Format(CultureInfo.InvariantCulture, "{0}:{1}", this.credentials.AccountName, signature)); } return(base.SendAsync(request, cancellationToken)); }
/// <summary> /// Applies the condition to the web request. /// </summary> /// <param name="request">The request to be modified.</param> /// <param name="accessCondition">Access condition to be added to the request.</param> internal static void ApplyAccessCondition(this HttpWebRequest request, AccessCondition accessCondition) { if (accessCondition != null) { if (!string.IsNullOrEmpty(accessCondition.IfMatchETag)) { request.Headers[HttpRequestHeader.IfMatch] = accessCondition.IfMatchETag; } if (!string.IsNullOrEmpty(accessCondition.IfNoneMatchETag)) { request.Headers[HttpRequestHeader.IfNoneMatch] = accessCondition.IfNoneMatchETag; } if (accessCondition.IfModifiedSinceTime.HasValue) { // Not using this property will cause Restricted property exception to be thrown request.IfModifiedSince = accessCondition.IfModifiedSinceTime.Value.UtcDateTime; } if (accessCondition.IfNotModifiedSinceTime.HasValue) { request.Headers[HttpRequestHeader.IfUnmodifiedSince] = HttpUtility.ConvertDateTimeToHttpString(accessCondition.IfNotModifiedSinceTime.Value); } if (!string.IsNullOrEmpty(accessCondition.LeaseId)) { request.Headers[Constants.HeaderConstants.LeaseIdHeader] = accessCondition.LeaseId; } } }