StorageClientOptions
Defines the client configuration options for connecting to Azure
Storage.
using Azure.Core;
using Azure.Core.Pipeline;
using Azure.Storage.Common;
using Azure.Storage.Shared;
using System;
namespace Azure.Storage
{
internal static class StorageClientOptions
{
private const string StorageScope = "https://storage.azure.com/.default";
public static void Initialize(this ClientOptions options)
{
options.get_Retry().set_MaxRetries(5);
}
public static HttpPipelinePolicy (this StorageSharedKeyCredential credential)
{
if (credential == null)
throw Errors.ArgumentNull("credential");
return new StorageSharedKeyPipelinePolicy(credential);
}
public static HttpPipelinePolicy AsPolicy<TUriBuilder>(this AzureSasCredential credential, Uri resourceUri)
{
Argument.AssertNotNull(resourceUri, "resourceUri");
Argument.AssertNotNull<AzureSasCredential>(credential, "credential");
if (resourceUri.GetQueryParameters().ContainsKey("sig"))
throw Errors.SasCredentialRequiresUriWithoutSas<TUriBuilder>(resourceUri);
return new AzureSasCredentialSynchronousPolicy(credential);
}
public static HttpPipelinePolicy AsPolicy(this TokenCredential credential, string scope, ClientOptions options)
{
if (credential == null)
throw Errors.ArgumentNull("credential");
return new StorageBearerTokenChallengeAuthorizationPolicy(credential, scope ?? "https://storage.azure.com/.default", (options as ISupportsTenantIdChallenges)?.EnableTenantDiscovery ?? false);
}
public static HttpPipelinePolicy GetAuthenticationPolicy(object credentials = null, string scope = null, ClientOptions options = null)
{
if (credentials is SharedAccessSignatureCredentials || credentials == null)
return null;
StorageSharedKeyCredential val = credentials as StorageSharedKeyCredential;
if (val != null)
return val.AsPolicy();
TokenCredential val2 = credentials as TokenCredential;
if (val2 != null)
return val2.AsPolicy(scope, options);
throw Errors.InvalidCredentials(credentials.GetType().FullName);
}
public static HttpPipeline Build(this ClientOptions options, HttpPipelinePolicy authentication = null, Uri geoRedundantSecondaryStorageUri = null, Request100ContinueOptions expectContinue = null)
{
StorageResponseClassifier storageResponseClassifier = new StorageResponseClassifier();
HttpPipelineOptions val = new HttpPipelineOptions(options);
val.get_PerCallPolicies().Add(StorageServerTimeoutPolicy.Shared);
val.get_PerRetryPolicies().Add(StorageTelemetryPolicy.Shared);
val.set_ResponseClassifier(storageResponseClassifier);
val.set_RequestFailedDetailsParser(new StorageRequestFailedDetailsParser());
HttpPipelineOptions val2 = val;
if (geoRedundantSecondaryStorageUri != (Uri)null) {
val2.get_PerRetryPolicies().Add(new GeoRedundantReadPolicy(geoRedundantSecondaryStorageUri));
storageResponseClassifier.SecondaryStorageUri = geoRedundantSecondaryStorageUri;
}
if (expectContinue != null) {
Request100ContinueMode mode = expectContinue.get_Mode();
switch ((int)mode) {
case 0:
val2.get_PerCallPolicies().Add(new ExpectContinueOnThrottlePolicy {
ThrottleInterval = expectContinue.get_AutoInterval(),
ContentLengthThreshold = expectContinue.get_ContentLengthThreshold().GetValueOrDefault()
});
break;
case 1:
val2.get_PerCallPolicies().Add(new ExpectContinuePolicy {
ContentLengthThreshold = expectContinue.get_ContentLengthThreshold().GetValueOrDefault()
});
break;
}
} else
val2.get_PerCallPolicies().Add(new ExpectContinueOnThrottlePolicy {
ThrottleInterval = TimeSpan.FromMinutes(1)
});
val2.get_PerRetryPolicies().Add(new StorageRequestValidationPipelinePolicy());
val2.get_PerRetryPolicies().Add(authentication);
return HttpPipelineBuilder.Build(val2);
}
public static HttpPipeline Build(this ClientOptions options, object credentials, Uri geoRedundantSecondaryStorageUri = null, Request100ContinueOptions expectContinue = null)
{
return options.Build(GetAuthenticationPolicy(credentials, null, null), geoRedundantSecondaryStorageUri, expectContinue);
}
}
}