/// <summary> /// Use an account's <see cref="StorageSharedKeyCredential"/> to sign this /// shared access signature values to produce the proper SAS query /// parameters for authenticating requests. /// </summary> /// <param name="sharedKeyCredential"> /// The storage account's <see cref="StorageSharedKeyCredential"/>. /// </param> /// <returns> /// The <see cref="BlobSasQueryParameters"/> used for authenticating /// requests. /// </returns> public BlobSasQueryParameters ToSasQueryParameters(StorageSharedKeyCredential sharedKeyCredential) { sharedKeyCredential = sharedKeyCredential ?? throw Errors.ArgumentNull(nameof(sharedKeyCredential)); EnsureState(); var startTime = SasQueryParameters.FormatTimesForSasSigning(StartsOn); var expiryTime = SasQueryParameters.FormatTimesForSasSigning(ExpiresOn); // See http://msdn.microsoft.com/en-us/library/azure/dn140255.aspx var stringToSign = String.Join("\n", Permissions, startTime, expiryTime, GetCanonicalName(sharedKeyCredential.AccountName, BlobContainerName ?? String.Empty, BlobName ?? String.Empty), Identifier, IPRange.ToString(), Protocol.ToProtocolString(), Version, Resource, Snapshot, CacheControl, ContentDisposition, ContentEncoding, ContentLanguage, ContentType); var signature = sharedKeyCredential.ComputeHMACSHA256(stringToSign); var p = new BlobSasQueryParameters( version: Version, services: default,
/// <summary> /// Use an account's <see cref="TableSharedKeyCredential"/> to sign this /// shared access signature values to produce the proper SAS query /// parameters for authenticating requests. /// </summary> /// <param name="sharedKeyCredential"> /// The storage account's <see cref="TableSharedKeyCredential"/>. /// </param> /// <returns> /// An instance of <see cref="TableSasQueryParameters"/>. /// </returns> public TableSasQueryParameters ToSasQueryParameters(TableSharedKeyCredential sharedKeyCredential) { sharedKeyCredential = sharedKeyCredential ?? throw Errors.ArgumentNull(nameof(sharedKeyCredential)); EnsureState(); var startTime = TableSasExtensions.FormatTimesForSasSigning(StartsOn); var expiryTime = TableSasExtensions.FormatTimesForSasSigning(ExpiresOn); // String to sign: http://msdn.microsoft.com/en-us/library/azure/dn140255.aspx var stringToSign = string.Join("\n", Permissions, startTime, expiryTime, GetCanonicalName(sharedKeyCredential.AccountName, TableName), Identifier, IPRange.ToString(), TableSasExtensions.ToProtocolString(Protocol), Version, PartitionKeyStart, RowKeyStart, PartitionKeyEnd, RowKeyEnd); var signature = TableSharedKeyCredential.ComputeSasSignature(sharedKeyCredential, stringToSign); var p = new TableSasQueryParameters( Version,
/// <summary> /// Use an account's <see cref="StorageSharedKeyCredential"/> to sign this /// shared access signature values to produce the proper SAS query /// parameters for authenticating requests. /// </summary> /// <param name="sharedKeyCredential"> /// The storage account's <see cref="StorageSharedKeyCredential"/>. /// </param> /// <returns> /// The <see cref="DataLakeSasQueryParameters"/> used for authenticating /// requests. /// </returns> public DataLakeSasQueryParameters ToSasQueryParameters(StorageSharedKeyCredential sharedKeyCredential) { sharedKeyCredential = sharedKeyCredential ?? throw Errors.ArgumentNull(nameof(sharedKeyCredential)); EnsureState(); var startTime = SasExtensions.FormatTimesForSasSigning(StartsOn); var expiryTime = SasExtensions.FormatTimesForSasSigning(ExpiresOn); // See http://msdn.microsoft.com/en-us/library/azure/dn140255.aspx var stringToSign = String.Join("\n", Permissions, startTime, expiryTime, GetCanonicalName(sharedKeyCredential.AccountName, FileSystemName ?? String.Empty, Path ?? String.Empty), Identifier, IPRange.ToString(), SasExtensions.ToProtocolString(Protocol), Version, Resource, null, // snapshot CacheControl, ContentDisposition, ContentEncoding, ContentLanguage, ContentType); var signature = StorageSharedKeyCredentialInternals.ComputeSasSignature(sharedKeyCredential, stringToSign); var p = new DataLakeSasQueryParameters( version: Version, services: default,
//public static bool Remove<T>(this ICollection<T> value, Func<T, bool> predicate) //{ // if (value.IsReadOnly) return false; // return value.Where(predicate).ToList().Select(e => value.Remove(e)).All(e => e); //} public static bool SequenceEqual <T, K>(this IEnumerable <T> first, IEnumerable <K> second, Func <T, K, bool> comparer) { if (first == null) { throw Errors.ArgumentNull("first"); } if (second == null) { throw Errors.ArgumentNull("second"); } using (var enumerator = first.GetEnumerator()) { using (var enumerator2 = second.GetEnumerator()) { while (enumerator.MoveNext()) { if (!enumerator2.MoveNext() || !comparer(enumerator.Current, enumerator2.Current)) { return(false); } } if (enumerator2.MoveNext()) { return(false); } } } return(true); }
/// <summary> /// Use an account's <see cref="StorageSharedKeyCredential"/> to sign this /// shared access signature values to produce the proper SAS query /// parameters for authenticating requests. /// </summary> /// <param name="sharedKeyCredential"> /// The storage account's <see cref="StorageSharedKeyCredential"/>. /// </param> /// <returns> /// The <see cref="SasQueryParameters"/> used for authenticating requests. /// </returns> public SasQueryParameters ToSasQueryParameters(StorageSharedKeyCredential sharedKeyCredential) { sharedKeyCredential = sharedKeyCredential ?? throw Errors.ArgumentNull(nameof(sharedKeyCredential)); string resource; if (String.IsNullOrEmpty(this.FilePath)) { // Make sure the permission characters are in the correct order this.Permissions = ShareSasPermissions.Parse(this.Permissions).ToString(); resource = Constants.Sas.Resource.Share; } else { // Make sure the permission characters are in the correct order this.Permissions = FileSasPermissions.Parse(this.Permissions).ToString(); resource = Constants.Sas.Resource.File; } if (String.IsNullOrEmpty(this.Version)) { this.Version = SasQueryParameters.DefaultSasVersion; } var startTime = SasQueryParameters.FormatTimesForSasSigning(this.StartTime); var expiryTime = SasQueryParameters.FormatTimesForSasSigning(this.ExpiryTime); // String to sign: http://msdn.microsoft.com/en-us/library/azure/dn140255.aspx var stringToSign = String.Join("\n", this.Permissions, startTime, expiryTime, GetCanonicalName(sharedKeyCredential.AccountName, this.ShareName ?? String.Empty, this.FilePath ?? String.Empty), this.Identifier, this.IPRange.ToString(), this.Protocol.ToString(), this.Version, this.CacheControl, this.ContentDisposition, this.ContentEncoding, this.ContentLanguage, this.ContentType); var signature = sharedKeyCredential.ComputeHMACSHA256(stringToSign); var p = new SasQueryParameters( version: this.Version, services: null, resourceTypes: null, protocol: this.Protocol, startTime: this.StartTime, expiryTime: this.ExpiryTime, ipRange: this.IPRange, identifier: this.Identifier, resource: resource, permissions: this.Permissions, signature: signature); return(p); }
public GeoRedundantReadPolicy(Uri secondaryStorageUri) { if (secondaryStorageUri == null) { throw Errors.ArgumentNull(nameof(secondaryStorageUri)); } _secondaryStorageHost = secondaryStorageUri.Host; }
/// <summary> /// Use an account's <see cref="StorageSharedKeyCredential"/> to sign this /// shared access signature values to produce the proper SAS query /// parameters for authenticating requests. /// </summary> /// <param name="sharedKeyCredential"> /// The storage account's <see cref="StorageSharedKeyCredential"/>. /// </param> /// <returns> /// The <see cref="DataLakeSasQueryParameters"/> used for authenticating /// requests. /// </returns> public DataLakeSasQueryParameters ToSasQueryParameters(StorageSharedKeyCredential sharedKeyCredential) { sharedKeyCredential = sharedKeyCredential ?? throw Errors.ArgumentNull(nameof(sharedKeyCredential)); EnsureState(); string startTime = SasExtensions.FormatTimesForSasSigning(StartsOn); string expiryTime = SasExtensions.FormatTimesForSasSigning(ExpiresOn); // See http://msdn.microsoft.com/en-us/library/azure/dn140255.aspx string stringToSign; // TODO https://github.com/Azure/azure-sdk-for-net/issues/23369 if (SasQueryParametersInternals.DefaultSasVersionInternal == "2020-12-06") { stringToSign = string.Join("\n", Permissions, startTime, expiryTime, GetCanonicalName(sharedKeyCredential.AccountName, FileSystemName ?? string.Empty, Path ?? string.Empty), Identifier, IPRange.ToString(), SasExtensions.ToProtocolString(Protocol), Version, Resource, null, // snapshot null, // encryption scope CacheControl, ContentDisposition, ContentEncoding, ContentLanguage, ContentType); } else { stringToSign = string.Join("\n", Permissions, startTime, expiryTime, GetCanonicalName(sharedKeyCredential.AccountName, FileSystemName ?? string.Empty, Path ?? string.Empty), Identifier, IPRange.ToString(), SasExtensions.ToProtocolString(Protocol), Version, Resource, null, // snapshot CacheControl, ContentDisposition, ContentEncoding, ContentLanguage, ContentType); } string signature = StorageSharedKeyCredentialInternals.ComputeSasSignature(sharedKeyCredential, stringToSign); DataLakeSasQueryParameters p = new DataLakeSasQueryParameters( version: Version, services: default,
/// <summary> /// Use an account's <see cref="UserDelegationKey"/> to sign this /// shared access signature values to produce the propery SAS query /// parameters for authenticating requests. /// </summary> /// <param name="userDelegationKey"> /// A <see cref="UserDelegationKey"/> returned from /// <see cref="Azure.Storage.Blobs.BlobServiceClient.GetUserDelegationKeyAsync"/>. /// </param> /// <param name="accountName">The name of the storage account.</param> /// <returns> /// The <see cref="BlobSasQueryParameters"/> used for authenticating requests. /// </returns> public BlobSasQueryParameters ToSasQueryParameters(UserDelegationKey userDelegationKey, string accountName) { userDelegationKey = userDelegationKey ?? throw Errors.ArgumentNull(nameof(userDelegationKey)); EnsureState(); var startTime = SasQueryParameters.FormatTimesForSasSigning(StartTime); var expiryTime = SasQueryParameters.FormatTimesForSasSigning(ExpiryTime); var signedStart = SasQueryParameters.FormatTimesForSasSigning(userDelegationKey.SignedStart); var signedExpiry = SasQueryParameters.FormatTimesForSasSigning(userDelegationKey.SignedExpiry); // See http://msdn.microsoft.com/en-us/library/azure/dn140255.aspx var stringToSign = String.Join("\n", Permissions, startTime, expiryTime, GetCanonicalName(accountName, ContainerName ?? String.Empty, BlobName ?? String.Empty), userDelegationKey.SignedOid, userDelegationKey.SignedTid, signedStart, signedExpiry, userDelegationKey.SignedService, userDelegationKey.SignedVersion, IPRange.ToString(), Protocol.ToString(), Version, Resource, Snapshot, CacheControl, ContentDisposition, ContentEncoding, ContentLanguage, ContentType); var signature = ComputeHMACSHA256(userDelegationKey.Value, stringToSign); var p = new BlobSasQueryParameters( version: Version, services: null, resourceTypes: null, protocol: Protocol, startTime: StartTime, expiryTime: ExpiryTime, ipRange: IPRange, identifier: null, resource: Resource, permissions: Permissions, keyOid: userDelegationKey.SignedOid, keyTid: userDelegationKey.SignedTid, keyStart: userDelegationKey.SignedStart, keyExpiry: userDelegationKey.SignedExpiry, keyService: userDelegationKey.SignedService, keyVersion: userDelegationKey.SignedVersion, signature: signature); return(p); }
/// <summary> /// Initializes a new instance of the <see cref="ShareLeaseClient"/> class. /// </summary> /// <param name="client"> /// A <see cref="ShareClient"/> representing the share being leased. /// </param> /// <param name="leaseId"> /// An optional lease ID. If no lease ID is provided, a random lease /// ID will be created. /// </param> public ShareLeaseClient(ShareClient client, string leaseId = null) { _share = client ?? throw Errors.ArgumentNull(nameof(client)); LeaseId = leaseId ?? CreateUniqueLeaseId(); ShareUriBuilder uriBuilder = new ShareUriBuilder(client.Uri) { ShareName = null }; }
/// <summary> /// Parses symbolic permissions string to RolePermissions. /// </summary> /// <param name="s">String to parse.</param> /// <param name="allowStickyBit">If sticky bit is allowed.</param> /// <returns><see cref="RolePermissions"/>.</returns> public static RolePermissions ParseSymbolicRolePermissions(string s, bool allowStickyBit = false) { RolePermissions rolePermissions = RolePermissions.None; ArgumentException argumentException = DataLakeErrors.RolePermissionsSymbolicInvalidCharacter(s); if (s == null) { throw Errors.ArgumentNull(nameof(s)); } if (s.Length != 3) { throw DataLakeErrors.RolePermissionsSymbolicInvalidLength(s); } if (s[0] == 'r') { rolePermissions |= RolePermissions.Read; } else if (s[0] != '-') { throw argumentException; } if (s[1] == 'w') { rolePermissions |= RolePermissions.Write; } else if (s[1] != '-') { throw argumentException; } if (s[2] == 'x') { rolePermissions |= RolePermissions.Execute; } else if (allowStickyBit) { if (s[2] == 't') { rolePermissions |= RolePermissions.Execute; } else if (s[2] != 'T' && s[2] != '-') { throw argumentException; } } else if (s[2] != '-') { throw argumentException; } return(rolePermissions); }
/// <summary> /// Use an account's <see cref="StorageSharedKeyCredential"/> to sign this /// shared access signature values to produce the proper SAS query /// parameters for authenticating requests. /// </summary> /// <param name="sharedKeyCredential"> /// The storage account's <see cref="StorageSharedKeyCredential"/>. /// </param> /// <returns> /// The <see cref="SasQueryParameters"/> used for authenticating requests. /// </returns> public SasQueryParameters ToSasQueryParameters(StorageSharedKeyCredential sharedKeyCredential) { sharedKeyCredential = sharedKeyCredential ?? throw Errors.ArgumentNull(nameof(sharedKeyCredential)); if (ExpiresOn == default) { throw Errors.SasMissingData(nameof(ExpiresOn)); } if (string.IsNullOrEmpty(Permissions)) { throw Errors.SasMissingData(nameof(Permissions)); } string resource; if (string.IsNullOrEmpty(FilePath)) { resource = Constants.Sas.Resource.Share; } else { resource = Constants.Sas.Resource.File; } if (string.IsNullOrEmpty(Version)) { Version = SasQueryParameters.DefaultSasVersion; } var startTime = SasQueryParameters.FormatTimesForSasSigning(StartsOn); var expiryTime = SasQueryParameters.FormatTimesForSasSigning(ExpiresOn); // String to sign: http://msdn.microsoft.com/en-us/library/azure/dn140255.aspx var stringToSign = string.Join("\n", Permissions, startTime, expiryTime, GetCanonicalName(sharedKeyCredential.AccountName, ShareName ?? string.Empty, FilePath ?? string.Empty), Identifier, IPRange.ToString(), Protocol.ToProtocolString(), Version, CacheControl, ContentDisposition, ContentEncoding, ContentLanguage, ContentType); var signature = sharedKeyCredential.ComputeHMACSHA256(stringToSign); var p = new SasQueryParameters( version: Version, services: default,
/// <summary> /// The <see cref="GenerateAccountSasUri(AccountSasBuilder)"/> returns a Uri that /// generates a Service SAS based on the Client properties and builder passed. /// /// For more information, see /// <see href="https://docs.microsoft.com/en-us/rest/api/storageservices/create-account-sas"> /// Constructing a Service SAS</see> /// </summary> /// <param name="builder"> /// Used to generate a Shared Access Signature (SAS). /// </param> /// <returns> /// A <see cref="Uri"/> containing the SAS Uri. /// </returns> /// <remarks> /// A <see cref="Exception"/> will be thrown if /// a failure occurs. /// </remarks> public Uri GenerateAccountSasUri(AccountSasBuilder builder) { builder = builder ?? throw Errors.ArgumentNull(nameof(builder)); if (!builder.Services.HasFlag(AccountSasServices.Queues)) { throw Errors.SasServiceNotMatching( nameof(builder.Services), nameof(builder), nameof(AccountSasServices.Queues)); } QueueUriBuilder sasUri = new QueueUriBuilder(Uri); sasUri.Query = builder.ToSasQueryParameters(ClientConfiguration.SharedKeyCredential).ToString(); return(sasUri.ToUri()); }
/// <summary> /// The <see cref="GenerateAccountSasUri(AccountSasBuilder)"/> returns a <see cref="Uri"/> /// that generates a DataLake Account Shared Access Signature (SAS) /// based on the Client properties and builder passed. /// The SAS is signed by the shared key credential of the client. /// /// To check if the client is able to sign a Service Sas see /// <see cref="CanGenerateAccountSasUri"/>. /// /// For more information, see /// <see href="https://docs.microsoft.com/en-us/rest/api/storageservices/create-account-sas"> /// Constructing an Account SAS</see>. /// </summary> /// <param name="builder"> /// Used to generate a Shared Access Signature (SAS). /// </param> /// <returns> /// A <see cref="Uri"/> containing the SAS Uri. /// </returns> /// <remarks> /// A <see cref="Exception"/> will be thrown if a failure occurs. /// </remarks> public Uri GenerateAccountSasUri( AccountSasBuilder builder) { builder = builder ?? throw Errors.ArgumentNull(nameof(builder)); if (!builder.Services.HasFlag(AccountSasServices.Blobs)) { throw Errors.SasServiceNotMatching( nameof(builder.Services), nameof(builder), nameof(AccountSasServices.Blobs)); } DataLakeUriBuilder sasUri = new DataLakeUriBuilder(Uri); sasUri.Query = builder.ToSasQueryParameters(_storageSharedKeyCredential).ToString(); return(sasUri.ToUri()); }
/// <summary> /// Use an account's <see cref="StorageSharedKeyCredential"/> to sign this /// shared access signature values to produce the proper SAS query /// parameters for authenticating requests. /// </summary> /// <param name="sharedKeyCredential"> /// The storage account's <see cref="StorageSharedKeyCredential"/>. /// </param> /// <returns> /// The <see cref="SasQueryParameters"/> used for authenticating /// requests. /// </returns> public SasQueryParameters ToSasQueryParameters(StorageSharedKeyCredential sharedKeyCredential) { // https://docs.microsoft.com/en-us/rest/api/storageservices/Constructing-an-Account-SAS sharedKeyCredential = sharedKeyCredential ?? throw Errors.ArgumentNull(nameof(sharedKeyCredential)); if (this.ExpiryTime == default || String.IsNullOrEmpty(this.Permissions) || String.IsNullOrEmpty(this.ResourceTypes) || String.IsNullOrEmpty(this.Services)) { throw Errors.AccountSasMissingData(); } if (String.IsNullOrEmpty(this.Version)) { this.Version = SasQueryParameters.DefaultSasVersion; } // Make sure the permission characters are in the correct order this.Permissions = AccountSasPermissions.Parse(this.Permissions).ToString(); var startTime = SasQueryParameters.FormatTimesForSasSigning(this.StartTime); var expiryTime = SasQueryParameters.FormatTimesForSasSigning(this.ExpiryTime); // String to sign: http://msdn.microsoft.com/en-us/library/azure/dn140255.aspx var stringToSign = String.Join("\n", sharedKeyCredential.AccountName, this.Permissions, this.Services, this.ResourceTypes, startTime, expiryTime, this.IPRange.ToString(), this.Protocol.ToString(), this.Version, ""); // That's right, the account SAS requires a terminating extra newline var signature = sharedKeyCredential.ComputeHMACSHA256(stringToSign); var p = new SasQueryParameters( this.Version, this.Services, this.ResourceTypes, this.Protocol, this.StartTime, this.ExpiryTime, this.IPRange, null, // Identifier null, // Resource this.Permissions, signature); return(p); }
/// <summary> /// Use an account's <see cref="StorageSharedKeyCredential"/> to sign this /// shared access signature values to produce the proper SAS query /// parameters for authenticating requests. /// </summary> /// <param name="sharedKeyCredential"> /// The storage account's <see cref="StorageSharedKeyCredential"/>. /// </param> /// <returns> /// The <see cref="SasQueryParameters"/> used for authenticating /// requests. /// </returns> public SasQueryParameters ToSasQueryParameters(StorageSharedKeyCredential sharedKeyCredential) { // https://docs.microsoft.com/en-us/rest/api/storageservices/Constructing-an-Account-SAS sharedKeyCredential = sharedKeyCredential ?? throw Errors.ArgumentNull(nameof(sharedKeyCredential)); if (ExpiresOn == default || string.IsNullOrEmpty(Permissions) || ResourceTypes == default || Services == default) { throw Errors.AccountSasMissingData(); } Version = SasQueryParametersInternals.DefaultSasVersionInternal; string startTime = SasExtensions.FormatTimesForSasSigning(StartsOn); string expiryTime = SasExtensions.FormatTimesForSasSigning(ExpiresOn); // String to sign: http://msdn.microsoft.com/en-us/library/azure/dn140255.aspx string stringToSign = string.Join("\n", sharedKeyCredential.AccountName, Permissions, Services.ToPermissionsString(), ResourceTypes.ToPermissionsString(), startTime, expiryTime, IPRange.ToString(), Protocol.ToProtocolString(), Version, EncryptionScope, string.Empty); // That's right, the account SAS requires a terminating extra newline string signature = sharedKeyCredential.ComputeHMACSHA256(stringToSign); SasQueryParameters p = SasQueryParametersInternals.Create( Version, Services, ResourceTypes, Protocol, StartsOn, ExpiresOn, IPRange, identifier: null, resource: null, Permissions, signature, encryptionScope: EncryptionScope); return(p); }
/// <summary> /// Use an account's <see cref="StorageSharedKeyCredential"/> to sign this /// shared access signature values to produce the proper SAS query /// parameters for authenticating requests. /// </summary> /// <param name="sharedKeyCredential"> /// The storage account's <see cref="StorageSharedKeyCredential"/>. /// </param> /// <returns> /// The <see cref="BlobSasQueryParameters"/> used for authenticating /// requests. /// </returns> public BlobSasQueryParameters ToSasQueryParameters(StorageSharedKeyCredential sharedKeyCredential) { sharedKeyCredential = sharedKeyCredential ?? throw Errors.ArgumentNull(nameof(sharedKeyCredential)); this.EnsureState(); var startTime = SasQueryParameters.FormatTimesForSasSigning(this.StartTime); var expiryTime = SasQueryParameters.FormatTimesForSasSigning(this.ExpiryTime); // See http://msdn.microsoft.com/en-us/library/azure/dn140255.aspx var stringToSign = String.Join("\n", this.Permissions, startTime, expiryTime, GetCanonicalName(sharedKeyCredential.AccountName, this.ContainerName ?? String.Empty, this.BlobName ?? String.Empty), this.Identifier, this.IPRange.ToString(), this.Protocol.ToString(), this.Version, this.Resource, this.Snapshot, this.CacheControl, this.ContentDisposition, this.ContentEncoding, this.ContentLanguage, this.ContentType); var signature = sharedKeyCredential.ComputeHMACSHA256(stringToSign); var p = new BlobSasQueryParameters( version: this.Version, services: null, resourceTypes: null, protocol: this.Protocol, startTime: this.StartTime, expiryTime: this.ExpiryTime, ipRange: this.IPRange, identifier: this.Identifier, resource: this.Resource, permissions: this.Permissions, signature: signature); return(p); }
/// <summary> /// Use an account's <see cref="StorageSharedKeyCredential"/> to sign this /// shared access signature values to produce the proper SAS query /// parameters for authenticating requests. /// </summary> /// <param name="sharedKeyCredential"> /// The storage account's <see cref="StorageSharedKeyCredential"/>. /// </param> /// <returns> /// The <see cref="SasQueryParameters"/> used for authenticating /// requests. /// </returns> public SasQueryParameters ToSasQueryParameters(StorageSharedKeyCredential sharedKeyCredential) { sharedKeyCredential = sharedKeyCredential ?? throw Errors.ArgumentNull(nameof(sharedKeyCredential)); Permissions = QueueAccountSasPermissions.Parse(Permissions).ToString(); if (string.IsNullOrEmpty(Version)) { Version = SasQueryParameters.DefaultSasVersion; } var startTime = SasQueryParameters.FormatTimesForSasSigning(StartTime); var expiryTime = SasQueryParameters.FormatTimesForSasSigning(ExpiryTime); // String to sign: http://msdn.microsoft.com/en-us/library/azure/dn140255.aspx var stringToSign = string.Join("\n", Permissions, startTime, expiryTime, GetCanonicalName(sharedKeyCredential.AccountName, QueueName ?? string.Empty), Identifier, IPRange.ToString(), Protocol.ToString(), Version); var signature = sharedKeyCredential.ComputeHMACSHA256(stringToSign); var p = new SasQueryParameters( version: Version, services: null, resourceTypes: null, protocol: Protocol, startTime: StartTime, expiryTime: ExpiryTime, ipRange: IPRange, identifier: Identifier, resource: null, permissions: Permissions, signature: signature); return(p); }
/// <summary> /// Use an account's <see cref="StorageSharedKeyCredential"/> to sign this /// shared access signature values to produce the proper SAS query /// parameters for authenticating requests. /// </summary> /// <param name="sharedKeyCredential"> /// The storage account's <see cref="StorageSharedKeyCredential"/>. /// </param> /// <returns> /// The <see cref="SasQueryParameters"/> used for authenticating /// requests. /// </returns> public SasQueryParameters ToSasQueryParameters(StorageSharedKeyCredential sharedKeyCredential) { sharedKeyCredential = sharedKeyCredential ?? throw Errors.ArgumentNull(nameof(sharedKeyCredential)); EnsureState(); var startTime = SasExtensions.FormatTimesForSasSigning(StartsOn); var expiryTime = SasExtensions.FormatTimesForSasSigning(ExpiresOn); // String to sign: http://msdn.microsoft.com/en-us/library/azure/dn140255.aspx var stringToSign = string.Join("\n", Permissions, startTime, expiryTime, GetCanonicalName(sharedKeyCredential.AccountName, QueueName ?? string.Empty), Identifier, IPRange.ToString(), SasExtensions.ToProtocolString(Protocol), Version); var signature = StorageSharedKeyCredentialInternals.ComputeSasSignature(sharedKeyCredential, stringToSign); var p = SasQueryParametersInternals.Create( version: Version, services: default,
/// <summary> /// Use an account's <see cref="TableSharedKeyCredential"/> to sign this /// shared access signature values to produce the proper SAS query /// parameters for authenticating requests. /// </summary> /// <param name="sharedKeyCredential"> /// The storage account's <see cref="TableSharedKeyCredential"/>. /// </param> /// <returns> /// An instance of <see cref="TableAccountSasQueryParameters"/>. /// </returns> public TableAccountSasQueryParameters ToSasQueryParameters(TableSharedKeyCredential sharedKeyCredential) { sharedKeyCredential = sharedKeyCredential ?? throw Errors.ArgumentNull(nameof(sharedKeyCredential)); EnsureState(); var startTime = TableSasExtensions.FormatTimesForSasSigning(StartsOn); var expiryTime = TableSasExtensions.FormatTimesForSasSigning(ExpiresOn); // String to sign: https://docs.microsoft.com/en-us/rest/api/storageservices/create-account-sas#constructing-the-signature-string var stringToSign = string.Join("\n", sharedKeyCredential.AccountName, Permissions, TableConstants.Sas.TableAccountServices.Table, ResourceTypes.ToPermissionsString(), startTime, expiryTime, IPRange.ToString(), Protocol.ToProtocolString(), Version, ""); var signature = TableSharedKeyCredential.ComputeSasSignature(sharedKeyCredential, stringToSign); var p = new TableAccountSasQueryParameters( version: Version, resourceTypes: ResourceTypes, protocol: Protocol, startsOn: StartsOn, expiresOn: ExpiresOn, ipRange: IPRange, identifier: Identifier, resource: null, permissions: Permissions, signature: signature); return(p); }
/// <summary> /// Takes encoded query params string, output decoded params map /// </summary> /// <param name="encodedQueryParamString"></param> public UriQueryParamsCollection(string encodedQueryParamString) { encodedQueryParamString = encodedQueryParamString ?? throw Errors.ArgumentNull(nameof(encodedQueryParamString)); if (encodedQueryParamString.StartsWith("?", true, CultureInfo.InvariantCulture)) { encodedQueryParamString = encodedQueryParamString.Substring(1); } var keysAndValues = encodedQueryParamString.Split(new[] { '&' }, StringSplitOptions.RemoveEmptyEntries); foreach (var qp in keysAndValues) { var keyAndValue = qp.Split(new[] { '=' }, 2); if (keyAndValue.Length == 1) { Add(WebUtility.UrlDecode(keyAndValue[0]), default); // The map's keys/values are url-decoded } else { Add(WebUtility.UrlDecode(keyAndValue[0]), WebUtility.UrlDecode(keyAndValue[1])); // The map's keys/values are url-decoded } } }
/// <summary> /// Initializes a new instance of the <see cref="ShareLeaseClient"/> class. /// </summary> /// <param name="client"> /// A <see cref="ShareFileClient"/> representing the file being leased. /// </param> /// <param name="leaseId"> /// An optional lease ID. If no lease ID is provided, a random lease /// ID will be created. /// </param> public ShareLeaseClient(ShareFileClient client, string leaseId = null) { _file = client ?? throw Errors.ArgumentNull(nameof(client)); LeaseId = leaseId ?? CreateUniqueLeaseId(); }
/// <summary> /// Initializes a new instance of the <see cref="ShareLeaseClient"/> class. /// </summary> /// <param name="client"> /// A <see cref="ShareClient"/> representing the share being leased. /// </param> /// <param name="leaseId"> /// An optional lease ID. If no lease ID is provided, a random lease /// ID will be created. /// </param> internal ShareLeaseClient(ShareClient client, string leaseId = null) { _share = client ?? throw Errors.ArgumentNull(nameof(client)); LeaseId = leaseId ?? CreateUniqueLeaseId(); }
/// <summary> /// Initializes a new instance of the <see cref="BlobLeaseClient"/> class. /// </summary> /// <param name="client"> /// A <see cref="BlobClient"/> representing the blob being leased. /// </param> /// <param name="leaseId"> /// An optional lease ID. If no lease ID is provided, a random lease /// ID will be created. /// </param> public BlobLeaseClient(BlobBaseClient client, string leaseId = null) { _blob = client ?? throw Errors.ArgumentNull(nameof(client)); _container = null; LeaseId = leaseId ?? CreateUniqueLeaseId(); }
public ProgressIncrementingStream(Stream stream, AggregatingProgressIncrementer incrementer) { _innerStream = stream ?? throw Errors.ArgumentNull(nameof(stream)); _incrementer = incrementer ?? throw Errors.ArgumentNull(nameof(incrementer)); }
/// <summary> /// Initializes a new instance of the <see cref="LeaseClient"/> class. /// </summary> /// <param name="client"> /// A <see cref="BlobContainerClient"/> representing the container /// being leased. /// </param> /// <param name="leaseId"> /// An optional lease ID. If no lease ID is provided, a random lease /// ID will be created. /// </param> public LeaseClient(BlobContainerClient client, string leaseId = null) { this._blob = null; this._container = client ?? throw Errors.ArgumentNull(nameof(client)); this.LeaseId = leaseId ?? CreateUniqueLeaseId(); }