/// <summary> Retrieves details about any stored access policies specified on the table that may be used wit Shared Access Signatures. </summary> /// <param name="async">Determines whether execution will occur asynchronously.</param> /// <param name="table"> The name of the table. </param> /// <param name="timeout"> The The timeout parameter is expressed in seconds. For more information, see <a href="https://docs.microsoft.com/en-us/rest/api/storageservices/setting-timeouts-for-queue-service-operations>Setting Timeouts for Queue Service Operations.</a>. </param> /// <param name="requestId"> Provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage analytics logging is enabled. </param> /// <param name="cancellationToken"> The cancellation token to use. </param> private async ValueTask <ResponseWithHeaders <ReadOnlyCollection <SignedIdentifier>, TableInternalGetAccessPolicyHeaders> > GetAccessPolicyInternalAsync(bool async, string table, int?timeout = null, string requestId = null, CancellationToken cancellationToken = default) { if (table == null) { throw new ArgumentNullException(nameof(table)); } using var scope = _clientDiagnostics.CreateScope("TableInternalClient.GetAccessPolicy"); scope.Start(); try { using var message = CreateGetAccessPolicyRequest(table, timeout, requestId); if (async) { await _pipeline.SendAsync(message, cancellationToken).ConfigureAwait(false); } else { _pipeline.Send(message, cancellationToken); } var headers = new TableInternalGetAccessPolicyHeaders(message.Response); switch (message.Response.Status) { case 200: { List <SignedIdentifier> value = default; var document = XDocument.Load(message.Response.ContentStream, LoadOptions.PreserveWhitespace); if (document.Element("SignedIdentifiers") is XElement signedIdentifiersElement) { var array = new List <SignedIdentifier>(); foreach (var e in signedIdentifiersElement.Elements("SignedIdentifier")) { array.Add(SignedIdentifier.DeserializeSignedIdentifier(e)); } value = array; } return(ResponseWithHeaders.FromValue(value.AsReadOnly(), headers, message.Response)); } default: if (async) { throw await _clientDiagnostics.CreateRequestFailedExceptionAsync(message.Response).ConfigureAwait(false); } else { throw _clientDiagnostics.CreateRequestFailedException(message.Response); } } } catch (Exception e) { scope.Failed(e); throw; } }
public async Task FileShareAccessPolicy() { //update storage account to v2 StorageAccountUpdateParameters updateParameters = new StorageAccountUpdateParameters() { Kind = Kind.StorageV2 }; await _storageAccount.UpdateAsync(updateParameters); //create share string fileShareName = Recording.GenerateAssetName("testfileshare"); FileShare share = (await _fileShareCollection.CreateOrUpdateAsync(true, fileShareName, new FileShareData())).Value; // Prepare signedIdentifiers to set List <SignedIdentifier> sigs = new List <SignedIdentifier>(); DateTimeOffset datenow = Recording.Now; DateTimeOffset start1 = datenow.ToUniversalTime(); DateTimeOffset end1 = datenow.AddHours(2).ToUniversalTime(); DateTimeOffset start2 = datenow.AddMinutes(1).ToUniversalTime(); DateTimeOffset end2 = datenow.AddMinutes(40).ToUniversalTime(); var updateParameters2 = new FileShareData(); SignedIdentifier sig1 = new SignedIdentifier("testSig1", new AccessPolicy(startTime: start1, expiryTime: end1, permission: "rw")); SignedIdentifier sig2 = new SignedIdentifier("testSig2", new AccessPolicy(startTime: start2, expiryTime: end2, permission: "rwdl")); updateParameters2.SignedIdentifiers.Add(sig1); updateParameters2.SignedIdentifiers.Add(sig2); // Update share share = await share.UpdateAsync(updateParameters2); Assert.AreEqual(2, share.Data.SignedIdentifiers.Count); Assert.AreEqual("testSig1", share.Data.SignedIdentifiers[0].Id); Assert.AreEqual("rw", share.Data.SignedIdentifiers[0].AccessPolicy.Permission); }
public void FileShareAccessPolicy() { var handler = new RecordedDelegatingHandler { StatusCodeToReturn = HttpStatusCode.OK }; using (MockContext context = MockContext.Start(this.GetType().FullName)) { var resourcesClient = StorageManagementTestUtilities.GetResourceManagementClient(context, handler); var storageMgmtClient = StorageManagementTestUtilities.GetStorageManagementClient(context, handler); // Create resource group var rgName = StorageManagementTestUtilities.CreateResourceGroup(resourcesClient); // Create storage account string accountName = TestUtilities.GenerateName("sto"); var parameters = new StorageAccountCreateParameters { Location = "eastus2euap", Kind = Kind.StorageV2, Sku = new Sku { Name = SkuName.StandardLRS } }; var account = storageMgmtClient.StorageAccounts.Create(rgName, accountName, parameters); // implement case try { // create share string shareName = TestUtilities.GenerateName("share"); FileShare share = storageMgmtClient.FileShares.Create(rgName, accountName, shareName, new FileShare());; // Prepare signedIdentifiers to set List <SignedIdentifier> sigs = new List <SignedIdentifier>(); DateTime datenow = DateTime.Now; datenow = new DateTime(datenow.Year, datenow.Month, datenow.Day, datenow.Hour, datenow.Minute, datenow.Second); DateTime start1 = datenow; DateTime end1 = datenow.AddHours(2); DateTime start2 = datenow.AddMinutes(1); DateTime end2 = datenow.AddMinutes(40); SignedIdentifier sig1 = new SignedIdentifier("testSig1", new AccessPolicy(startTime: start1, expiryTime: end1, permission: "rw")); SignedIdentifier sig2 = new SignedIdentifier("testSig2", new AccessPolicy(startTime: start2, expiryTime: end2, permission: "rwdl")); sigs.Add(sig1); sigs.Add(sig2); // Update share share = storageMgmtClient.FileShares.Update(rgName, accountName, shareName, new FileShare(signedIdentifiers: sigs)); Assert.Equal(2, share.SignedIdentifiers.Count); Assert.Equal("testSig1", share.SignedIdentifiers[0].Id); //Assert.Equal(start1, share.SignedIdentifiers[0].AccessPolicy.Start); //Assert.Equal(end1, share.SignedIdentifiers[0].AccessPolicy.Expiry); Assert.Equal("rw", share.SignedIdentifiers[0].AccessPolicy.Permission); // Get share share = storageMgmtClient.FileShares.Get(rgName, accountName, shareName); Assert.Equal(2, share.SignedIdentifiers.Count); Assert.Equal("testSig1", share.SignedIdentifiers[0].Id); //Assert.Equal(start1, share.SignedIdentifiers[0].AccessPolicy.Start); //Assert.Equal(end1, share.SignedIdentifiers[0].AccessPolicy.Expiry); Assert.Equal("rw", share.SignedIdentifiers[0].AccessPolicy.Permission); // delete share storageMgmtClient.FileShares.Delete(rgName, accountName, shareName); } finally { // clean up storageMgmtClient.StorageAccounts.Delete(rgName, accountName); resourcesClient.ResourceGroups.Delete(rgName); } } }
internal static FileShareData DeserializeFileShareData(JsonElement element) { Optional <string> etag = default; ResourceIdentifier id = default; string name = default; ResourceType type = default; SystemData systemData = default; Optional <DateTimeOffset> lastModifiedTime = default; Optional <IDictionary <string, string> > metadata = default; Optional <int> shareQuota = default; Optional <EnabledProtocols> enabledProtocols = default; Optional <RootSquashType> rootSquash = default; Optional <string> version = default; Optional <bool> deleted = default; Optional <DateTimeOffset> deletedTime = default; Optional <int> remainingRetentionDays = default; Optional <ShareAccessTier> accessTier = default; Optional <DateTimeOffset> accessTierChangeTime = default; Optional <string> accessTierStatus = default; Optional <long> shareUsageBytes = default; Optional <LeaseStatus> leaseStatus = default; Optional <LeaseState> leaseState = default; Optional <LeaseDuration> leaseDuration = default; Optional <IList <SignedIdentifier> > signedIdentifiers = default; Optional <DateTimeOffset> snapshotTime = default; foreach (var property in element.EnumerateObject()) { if (property.NameEquals("etag")) { etag = property.Value.GetString(); continue; } if (property.NameEquals("id")) { id = new ResourceIdentifier(property.Value.GetString()); continue; } if (property.NameEquals("name")) { name = property.Value.GetString(); continue; } if (property.NameEquals("type")) { type = new ResourceType(property.Value.GetString()); continue; } if (property.NameEquals("systemData")) { systemData = JsonSerializer.Deserialize <SystemData>(property.Value.ToString()); continue; } if (property.NameEquals("properties")) { if (property.Value.ValueKind == JsonValueKind.Null) { property.ThrowNonNullablePropertyIsNull(); continue; } foreach (var property0 in property.Value.EnumerateObject()) { if (property0.NameEquals("lastModifiedTime")) { if (property0.Value.ValueKind == JsonValueKind.Null) { property0.ThrowNonNullablePropertyIsNull(); continue; } lastModifiedTime = property0.Value.GetDateTimeOffset("O"); continue; } if (property0.NameEquals("metadata")) { if (property0.Value.ValueKind == JsonValueKind.Null) { property0.ThrowNonNullablePropertyIsNull(); continue; } Dictionary <string, string> dictionary = new Dictionary <string, string>(); foreach (var property1 in property0.Value.EnumerateObject()) { dictionary.Add(property1.Name, property1.Value.GetString()); } metadata = dictionary; continue; } if (property0.NameEquals("shareQuota")) { if (property0.Value.ValueKind == JsonValueKind.Null) { property0.ThrowNonNullablePropertyIsNull(); continue; } shareQuota = property0.Value.GetInt32(); continue; } if (property0.NameEquals("enabledProtocols")) { if (property0.Value.ValueKind == JsonValueKind.Null) { property0.ThrowNonNullablePropertyIsNull(); continue; } enabledProtocols = new EnabledProtocols(property0.Value.GetString()); continue; } if (property0.NameEquals("rootSquash")) { if (property0.Value.ValueKind == JsonValueKind.Null) { property0.ThrowNonNullablePropertyIsNull(); continue; } rootSquash = new RootSquashType(property0.Value.GetString()); continue; } if (property0.NameEquals("version")) { version = property0.Value.GetString(); continue; } if (property0.NameEquals("deleted")) { if (property0.Value.ValueKind == JsonValueKind.Null) { property0.ThrowNonNullablePropertyIsNull(); continue; } deleted = property0.Value.GetBoolean(); continue; } if (property0.NameEquals("deletedTime")) { if (property0.Value.ValueKind == JsonValueKind.Null) { property0.ThrowNonNullablePropertyIsNull(); continue; } deletedTime = property0.Value.GetDateTimeOffset("O"); continue; } if (property0.NameEquals("remainingRetentionDays")) { if (property0.Value.ValueKind == JsonValueKind.Null) { property0.ThrowNonNullablePropertyIsNull(); continue; } remainingRetentionDays = property0.Value.GetInt32(); continue; } if (property0.NameEquals("accessTier")) { if (property0.Value.ValueKind == JsonValueKind.Null) { property0.ThrowNonNullablePropertyIsNull(); continue; } accessTier = new ShareAccessTier(property0.Value.GetString()); continue; } if (property0.NameEquals("accessTierChangeTime")) { if (property0.Value.ValueKind == JsonValueKind.Null) { property0.ThrowNonNullablePropertyIsNull(); continue; } accessTierChangeTime = property0.Value.GetDateTimeOffset("O"); continue; } if (property0.NameEquals("accessTierStatus")) { accessTierStatus = property0.Value.GetString(); continue; } if (property0.NameEquals("shareUsageBytes")) { if (property0.Value.ValueKind == JsonValueKind.Null) { property0.ThrowNonNullablePropertyIsNull(); continue; } shareUsageBytes = property0.Value.GetInt64(); continue; } if (property0.NameEquals("leaseStatus")) { if (property0.Value.ValueKind == JsonValueKind.Null) { property0.ThrowNonNullablePropertyIsNull(); continue; } leaseStatus = new LeaseStatus(property0.Value.GetString()); continue; } if (property0.NameEquals("leaseState")) { if (property0.Value.ValueKind == JsonValueKind.Null) { property0.ThrowNonNullablePropertyIsNull(); continue; } leaseState = new LeaseState(property0.Value.GetString()); continue; } if (property0.NameEquals("leaseDuration")) { if (property0.Value.ValueKind == JsonValueKind.Null) { property0.ThrowNonNullablePropertyIsNull(); continue; } leaseDuration = new LeaseDuration(property0.Value.GetString()); continue; } if (property0.NameEquals("signedIdentifiers")) { if (property0.Value.ValueKind == JsonValueKind.Null) { property0.ThrowNonNullablePropertyIsNull(); continue; } List <SignedIdentifier> array = new List <SignedIdentifier>(); foreach (var item in property0.Value.EnumerateArray()) { array.Add(SignedIdentifier.DeserializeSignedIdentifier(item)); } signedIdentifiers = array; continue; } if (property0.NameEquals("snapshotTime")) { if (property0.Value.ValueKind == JsonValueKind.Null) { property0.ThrowNonNullablePropertyIsNull(); continue; } snapshotTime = property0.Value.GetDateTimeOffset("O"); continue; } } continue; } } return(new FileShareData(id, name, type, systemData, etag.Value, Optional.ToNullable(lastModifiedTime), Optional.ToDictionary(metadata), Optional.ToNullable(shareQuota), Optional.ToNullable(enabledProtocols), Optional.ToNullable(rootSquash), version.Value, Optional.ToNullable(deleted), Optional.ToNullable(deletedTime), Optional.ToNullable(remainingRetentionDays), Optional.ToNullable(accessTier), Optional.ToNullable(accessTierChangeTime), accessTierStatus.Value, Optional.ToNullable(shareUsageBytes), Optional.ToNullable(leaseStatus), Optional.ToNullable(leaseState), Optional.ToNullable(leaseDuration), Optional.ToList(signedIdentifiers), Optional.ToNullable(snapshotTime))); }