internal string SetAzureContainerStoredAccessPolicy(IStorageBlobManagement localChannel, string containerName, string policyName, DateTime?startTime, DateTime?expiryTime, string permission, bool noStartTime, bool noExpiryTime)
        {
            //Get container instance, Get existing permissions
            CloudBlobContainer                 container_Track1  = Channel.GetContainerReference(containerName);
            BlobContainerClient                container         = AzureStorageContainer.GetTrack2BlobContainerClient(container_Track1, Channel.StorageContext, ClientOptions);
            BlobContainerAccessPolicy          accessPolicy      = container.GetAccessPolicy(cancellationToken: CmdletCancellationToken).Value;
            IEnumerable <BlobSignedIdentifier> signedIdentifiers = accessPolicy.SignedIdentifiers;

            //Set the policy with new value
            BlobSignedIdentifier signedIdentifier = null;

            foreach (BlobSignedIdentifier identifier in signedIdentifiers)
            {
                if (identifier.Id == policyName)
                {
                    signedIdentifier = identifier;
                }
            }

            if (signedIdentifier == null)
            {
                throw new ArgumentException(string.Format(CultureInfo.CurrentCulture, Resources.PolicyNotFound, policyName));
            }
            if (noStartTime)
            {
                signedIdentifier.AccessPolicy.PolicyStartsOn = DateTimeOffset.MinValue;
            }

            else if (startTime != null)
            {
                signedIdentifier.AccessPolicy.PolicyStartsOn = StartTime.Value.ToUniversalTime();
            }
            if (noExpiryTime)
            {
                signedIdentifier.AccessPolicy.PolicyExpiresOn = DateTimeOffset.MinValue;
            }
            else if (ExpiryTime != null)
            {
                signedIdentifier.AccessPolicy.PolicyExpiresOn = ExpiryTime.Value.ToUniversalTime();
            }

            if (this.Permission != null)
            {
                signedIdentifier.AccessPolicy.Permissions = this.Permission;
                signedIdentifier.AccessPolicy.Permissions = AccessPolicyHelper.OrderBlobPermission(this.Permission);
            }

            //Set permissions back to container
            container.SetAccessPolicy(accessPolicy.BlobPublicAccess, signedIdentifiers, BlobRequestConditions, CmdletCancellationToken);
            WriteObject(AccessPolicyHelper.ConstructPolicyOutputPSObject <BlobSignedIdentifier>(signedIdentifier));
            return(policyName);
        }
        internal string CreateAzureContainerStoredAccessPolicy(IStorageBlobManagement localChannel, string containerName, string policyName, DateTime?startTime, DateTime?expiryTime, string permission)
        {
            if (!NameUtil.IsValidStoredAccessPolicyName(policyName))
            {
                throw new ArgumentException(String.Format(CultureInfo.CurrentCulture, Resources.InvalidAccessPolicyName, policyName));
            }

            //Get container instance, Get existing permissions
            CloudBlobContainer                 container_Track1  = Channel.GetContainerReference(containerName);
            BlobContainerClient                container         = AzureStorageContainer.GetTrack2BlobContainerClient(container_Track1, Channel.StorageContext, ClientOptions);
            BlobContainerAccessPolicy          accessPolicy      = container.GetAccessPolicy(cancellationToken: CmdletCancellationToken).Value;
            IEnumerable <BlobSignedIdentifier> signedIdentifiers = accessPolicy.SignedIdentifiers;

            //Add new policy
            foreach (BlobSignedIdentifier identifier in signedIdentifiers)
            {
                if (identifier.Id == policyName)
                {
                    throw new ResourceAlreadyExistException(String.Format(CultureInfo.CurrentCulture, Resources.PolicyAlreadyExists, policyName));
                }
            }
            BlobSignedIdentifier signedIdentifier = new BlobSignedIdentifier();

            signedIdentifier.Id           = policyName;
            signedIdentifier.AccessPolicy = new BlobAccessPolicy();
            if (StartTime != null)
            {
                signedIdentifier.AccessPolicy.PolicyStartsOn = StartTime.Value.ToUniversalTime();
            }
            if (ExpiryTime != null)
            {
                signedIdentifier.AccessPolicy.PolicyExpiresOn = ExpiryTime.Value.ToUniversalTime();
            }
            signedIdentifier.AccessPolicy.Permissions = AccessPolicyHelper.OrderBlobPermission(this.Permission);
            var newsignedIdentifiers = new List <BlobSignedIdentifier>(signedIdentifiers);

            newsignedIdentifiers.Add(signedIdentifier);

            //Set permissions back to container
            container.SetAccessPolicy(accessPolicy.BlobPublicAccess, newsignedIdentifiers, BlobRequestConditions, CmdletCancellationToken);
            return(policyName);
        }