/// <summary> /// set the access level of specified container /// </summary> /// <param name="name">container name</param> /// <param name="accessLevel">access level in ("off", "blob", "container")</param> internal async Task SetContainerAcl(long taskId, IStorageBlobManagement localChannel, string name, BlobContainerPublicAccessType accessLevel) { if (!NameUtil.IsValidContainerName(name)) { throw new ArgumentException(String.Format(Resources.InvalidContainerName, name)); } BlobContainerPermissions permissions = new BlobContainerPermissions(); permissions.PublicAccess = accessLevel; BlobRequestOptions requestOptions = RequestOptions; AccessCondition accessCondition = null; CloudBlobContainer container = localChannel.GetContainerReference(name); if (!await localChannel.DoesContainerExistAsync(container, requestOptions, OperationContext, CmdletCancellationToken).ConfigureAwait(false)) { throw new ResourceNotFoundException(String.Format(Resources.ContainerNotFound, name)); } await localChannel.SetContainerPermissionsAsync(container, permissions, accessCondition, requestOptions, OperationContext, CmdletCancellationToken).ConfigureAwait(false); if (PassThru) { WriteCloudContainerObject(taskId, localChannel, container, permissions); } }
/// <summary> /// get the CloudBlobContainer object by name if container exists /// </summary> /// <param name="containerName">container name</param> /// <returns>return CloudBlobContianer object if specified container exists, otherwise throw an exception</returns> internal async Task <CloudBlobContainer> GetCloudBlobContainerByName(IStorageBlobManagement localChannel, string containerName, bool skipCheckExists = false) { if (!NameUtil.IsValidContainerName(containerName)) { throw new ArgumentException(String.Format(Resources.InvalidContainerName, containerName)); } BlobRequestOptions requestOptions = RequestOptions; CloudBlobContainer container = localChannel.GetContainerReference(containerName); if (!skipCheckExists && container.ServiceClient.Credentials.IsSharedKey && !await localChannel.DoesContainerExistAsync(container, requestOptions, OperationContext, CmdletCancellationToken).ConfigureAwait(false)) { throw new ArgumentException(String.Format(Resources.ContainerNotFound, containerName)); } return(container); }
/// <summary> /// remove azure container by container name /// </summary> /// <param name="name">container name</param> internal async Task RemoveAzureContainer(long taskId, IStorageBlobManagement localChannel, string name) { if (!NameUtil.IsValidContainerName(name)) { throw new ArgumentException(String.Format(Resources.InvalidContainerName, name)); } BlobRequestOptions requestOptions = RequestOptions; AccessCondition accessCondition = null; CloudBlobContainer container = localChannel.GetContainerReference(name); if (!await localChannel.DoesContainerExistAsync(container, requestOptions, OperationContext, CmdletCancellationToken).ConfigureAwait(false)) { throw new ResourceNotFoundException(String.Format(Resources.ContainerNotFound, name)); } string result = string.Empty; bool removed = false; if (force || ContainerIsEmpty(container) || OutputStream.ConfirmAsync(String.Format("Remove container and all content in it: {0}", name)).Result) { await localChannel.DeleteContainerAsync(container, accessCondition, requestOptions, OperationContext, CmdletCancellationToken).ConfigureAwait(false); result = String.Format(Resources.RemoveContainerSuccessfully, name); removed = true; } else { result = String.Format(Resources.RemoveContainerCancelled, name); } OutputStream.WriteVerbose(taskId, result); if (PassThru) { OutputStream.WriteObject(taskId, removed); } }
/// <summary> /// remove azure container by container name /// </summary> /// <param name="name">container name</param> internal async Task RemoveAzureContainer(long taskId, IStorageBlobManagement localChannel, string name) { if (!NameUtil.IsValidContainerName(name)) { throw new ArgumentException(String.Format(Resources.InvalidContainerName, name)); } BlobRequestOptions requestOptions = RequestOptions; AccessCondition accessCondition = null; CloudBlobContainer container = localChannel.GetContainerReference(name); if (!await localChannel.DoesContainerExistAsync(container, requestOptions, OperationContext, CmdletCancellationToken)) { throw new ResourceNotFoundException(String.Format(Resources.ContainerNotFound, name)); } string result = string.Empty; bool removed = false; if (force || await OutputStream.ConfirmAsync(name)) { await localChannel.DeleteContainerAsync(container, accessCondition, requestOptions, OperationContext, CmdletCancellationToken); result = String.Format(Resources.RemoveContainerSuccessfully, name); removed = true; } else { result = String.Format(Resources.RemoveContainerCancelled, name); } OutputStream.WriteVerbose(taskId, result); if (PassThru) { OutputStream.WriteObject(taskId, removed); } }
/// <summary> /// get the CloudBlobContainer object by name if container exists /// </summary> /// <param name="containerName">container name</param> /// <returns>return CloudBlobContianer object if specified container exists, otherwise throw an exception</returns> internal async Task<CloudBlobContainer> GetCloudBlobContainerByName(IStorageBlobManagement localChannel, string containerName, bool skipCheckExists = false) { if (!NameUtil.IsValidContainerName(containerName)) { throw new ArgumentException(String.Format(Resources.InvalidContainerName, containerName)); } BlobRequestOptions requestOptions = RequestOptions; CloudBlobContainer container = localChannel.GetContainerReference(containerName); if (!skipCheckExists && container.ServiceClient.Credentials.IsSharedKey && !await localChannel.DoesContainerExistAsync(container, requestOptions, OperationContext, CmdletCancellationToken)) { throw new ArgumentException(String.Format(Resources.ContainerNotFound, containerName)); } return container; }
/// <summary> /// set the access level of specified container /// </summary> /// <param name="name">container name</param> /// <param name="accessLevel">access level in ("off", "blob", "container")</param> internal async Task SetContainerAcl(long taskId, IStorageBlobManagement localChannel, string name, BlobContainerPublicAccessType accessLevel) { if (!NameUtil.IsValidContainerName(name)) { throw new ArgumentException(String.Format(Resources.InvalidContainerName, name)); } BlobContainerPermissions permissions = new BlobContainerPermissions(); permissions.PublicAccess = accessLevel; BlobRequestOptions requestOptions = RequestOptions; AccessCondition accessCondition = null; CloudBlobContainer container = localChannel.GetContainerReference(name); if (!await localChannel.DoesContainerExistAsync(container, requestOptions, OperationContext, CmdletCancellationToken)) { throw new ResourceNotFoundException(String.Format(Resources.ContainerNotFound, name)); } await localChannel.SetContainerPermissionsAsync(container, permissions, accessCondition, requestOptions, OperationContext, CmdletCancellationToken); if (PassThru) { WriteCloudContainerObject(taskId, localChannel, container, permissions); } }