/// <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 &lt;a href=&quot;https://docs.microsoft.com/en-us/rest/api/storageservices/setting-timeouts-for-queue-service-operations&gt;Setting Timeouts for Queue Service Operations.&lt;/a&gt;. </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);
                }
            }
        }
Example #4
0
        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)));
        }