public async Task ParseResponseBodyAsync(System.IO.Stream responseStream, string contentType) { using (StreamReader sr = new StreamReader(responseStream)) { var content = await sr.ReadToEndAsync(); if (content.Length > 0) { var xDoc = XDocument.Parse(content); var signedIdentifiers = new List<BlobSignedIdentifier>(); foreach (var identifierResponse in xDoc.Root.Elements().Where(e => e.Name.LocalName.Equals("SignedIdentifier"))) { var identifier = new BlobSignedIdentifier(); identifier.AccessPolicy = new BlobAccessPolicy(); foreach (var element in identifierResponse.Elements()) { switch (element.Name.LocalName) { case "Id": identifier.Id = element.Value; break; case "AccessPolicy": foreach (var apElement in element.Elements()) { switch (apElement.Name.LocalName) { case "Permission": identifier.AccessPolicy.Permission = SharedAccessPermissionParse.ParseBlob(apElement.Value); break; case "Start": identifier.AccessPolicy.StartTime = Parsers.ParseUTCDate(apElement.Value); break; case "Expiry": identifier.AccessPolicy.Expiry = Parsers.ParseUTCDate(apElement.Value); break; } } break; } } signedIdentifiers.Add(identifier); } SignedIdentifiers = new ReadOnlyCollection<BlobSignedIdentifier>(signedIdentifiers); } } }
public async Task SetContainerACLAsync_ReadPolicyForValidContainer_SetsPolicyAndPublicAccessOnContainer() { IBlobServiceClient client = new BlobServiceClient(AccountSettings); var containerName = GenerateSampleContainerName(); CreateContainer(containerName); var expectedStartTime = GetTruncatedUtcNow(); var expectedIdentifier = new BlobSignedIdentifier() { Id = "abc-123", AccessPolicy = new BlobAccessPolicy() { StartTime = expectedStartTime, Expiry = expectedStartTime.AddHours(1), Permission = BlobSharedAccessPermissions.Read } }; await client.SetContainerACLAsync(containerName, ContainerAccessType.PublicContainer, new List<BlobSignedIdentifier>() { expectedIdentifier }); var actual = GetContainerPermissions(containerName); Assert.AreEqual(1, actual.SharedAccessPolicies.Count); AssertIdentifierInSharedAccessPolicies(actual.SharedAccessPolicies, expectedIdentifier, Microsoft.WindowsAzure.Storage.Blob.SharedAccessBlobPermissions.Read); }
public void SetContainerACL_NoLeaseForLeasedContainer_SetsPolicySuccesfully() { IBlobServiceClient client = new BlobServiceClient(AccountSettings); var containerName = GenerateSampleContainerName(); CreateContainer(containerName); LeaseContainer(containerName, null, null); var expectedStartTime = GetTruncatedUtcNow(); var expectedIdentifier = new BlobSignedIdentifier() { Id = "abc-123", AccessPolicy = new BlobAccessPolicy() { StartTime = expectedStartTime, Expiry = expectedStartTime.AddHours(1), Permission = BlobSharedAccessPermissions.Read | BlobSharedAccessPermissions.Write | BlobSharedAccessPermissions.Delete | BlobSharedAccessPermissions.List } }; client.SetContainerACL(containerName, ContainerAccessType.PublicContainer, new List<BlobSignedIdentifier>() { expectedIdentifier }); var actual = GetContainerPermissions(containerName); Assert.AreEqual(1, actual.SharedAccessPolicies.Count); }
protected void AssertIdentifierInSharedAccessPolicies(Microsoft.WindowsAzure.Storage.Blob.SharedAccessBlobPolicies sharedAccessPolicies, BlobSignedIdentifier expectedIdentifier, Microsoft.WindowsAzure.Storage.Blob.SharedAccessBlobPermissions permissions) { var policy = sharedAccessPolicies.Where(i => i.Key.Equals(expectedIdentifier.Id, StringComparison.InvariantCultureIgnoreCase)).FirstOrDefault(); Assert.IsNotNull(policy); Assert.AreEqual(expectedIdentifier.AccessPolicy.StartTime, policy.Value.SharedAccessStartTime.Value.UtcDateTime); Assert.AreEqual(expectedIdentifier.AccessPolicy.Expiry, policy.Value.SharedAccessExpiryTime.Value.UtcDateTime); Assert.IsTrue(policy.Value.Permissions.HasFlag(permissions)); }