public override void ExecuteCmdlet() { if (String.IsNullOrEmpty(ShareName) || String.IsNullOrEmpty(Policy)) { return; } NamingUtil.ValidateShareName(this.ShareName, false); if (!NameUtil.IsValidStoredAccessPolicyName(this.Policy)) { throw new ArgumentException(String.Format(CultureInfo.CurrentCulture, Resources.InvalidAccessPolicyName, this.Policy)); } //Get existing permissions CloudFileShare fileShare = this.Channel.GetShareReference(this.ShareName); FileSharePermissions fileSharePermissions = fileShare.GetPermissionsAsync().Result; //Add new policy if (fileSharePermissions.SharedAccessPolicies.Keys.Contains(this.Policy)) { throw new ResourceAlreadyExistException(String.Format(CultureInfo.CurrentCulture, Resources.PolicyAlreadyExists, this.Policy)); } SharedAccessFilePolicy policy = new SharedAccessFilePolicy(); AccessPolicyHelper.SetupAccessPolicy <SharedAccessFilePolicy>(policy, this.StartTime, this.ExpiryTime, this.Permission); fileSharePermissions.SharedAccessPolicies.Add(this.Policy, policy); //Set permissions back to container Task.Run(() => fileShare.SetPermissionsAsync(fileSharePermissions)).Wait(); WriteObject(Policy); }
public async Task <string> cleanupAndGetPolicyToUse() { FileSharePermissions permissions = await share.GetPermissionsAsync(); List <string> policiesToDelete = permissions.SharedAccessPolicies.TakeWhile(x => x.Value.SharedAccessExpiryTime < DateTime.UtcNow).Select(x => x.Key).ToList(); foreach (var policy in policiesToDelete) { permissions.SharedAccessPolicies.Remove(policy); } string policyNameToUse = permissions.SharedAccessPolicies.Where(x => x.Value.SharedAccessExpiryTime > DateTime.UtcNow.AddSeconds(10)).Select(x => x.Key).FirstOrDefault(); if (policyNameToUse == null) { // Create a new shared access policy and define its constraints. SharedAccessFilePolicy sharedPolicy = new SharedAccessFilePolicy() { SharedAccessExpiryTime = DateTime.UtcNow.AddMinutes(1), Permissions = SharedAccessFilePermissions.Read }; policyNameToUse = "UniquePolicy" + DateTime.UtcNow.Ticks; permissions.SharedAccessPolicies.Add(policyNameToUse, sharedPolicy); } await share.SetPermissionsAsync(permissions); return(policyNameToUse); }
public void SetSharePermissions(CloudFileShare share, FileSharePermissions permissions, AccessCondition accessCondition = null, FileRequestOptions options = null, OperationContext operationContext = null) { try { Task.Run(() => share.SetPermissionsAsync(permissions, accessCondition, options, operationContext)).Wait(); } catch (AggregateException e) when(e.InnerException is StorageException) { throw e.InnerException; } }
public void UploadFileStream(Stream stream, string connectionString, FileInfo outputFile) { connectionString.ThrowExceptionIfNullOrEmpty(); CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connectionString); CloudFileClient fileClient = storageAccount.CreateCloudFileClient(); CloudFileShare fileShare = fileClient.GetShareReference("h2h"); if (Task.Run(async() => await fileShare.ExistsAsync()).Result) { string policyName = "DemoPolicy" + new Random().Next(50); FileSharePermissions fileSharePermissions = Task.Run(async() => await fileShare.GetPermissionsAsync()).Result; // define policy SharedAccessFilePolicy sharedAccessFilePolicy = new SharedAccessFilePolicy() { SharedAccessExpiryTime = DateTime.UtcNow.AddHours(1), //Permissions = SharedAccessFilePermissions.Read Permissions = SharedAccessFilePermissions.Write }; fileSharePermissions.SharedAccessPolicies.Add(policyName, sharedAccessFilePolicy); // set permissions of file share Task.Run(async() => await fileShare.SetPermissionsAsync(fileSharePermissions)); // generate SAS token based on policy and use to create a new file CloudFileDirectory rootDirectory = fileShare.GetRootDirectoryReference(); if (Task.Run(async() => await rootDirectory.ExistsAsync()).Result) { CloudFileDirectory customDirectory = rootDirectory.GetDirectoryReference("HyperArchive"); if (Task.Run(async() => await customDirectory.ExistsAsync()).Result) { CloudFile file = customDirectory.GetFileReference(outputFile.Name); string sasToken = file.GetSharedAccessSignature(null, policyName); //generate URL of file with SAS token Uri fileSASUrl = new Uri(file.StorageUri.PrimaryUri.ToString() + sasToken); CloudFile newFile = new CloudFile(fileSASUrl); var taskResult = Task.Run(async() => await newFile.UploadFromStreamAsync(stream)); } } } }
public void WriteFilesIntoFileService() { CloudStorageAccount storageAccount = CloudStorageAccount.Parse(_configuration.ReadKeyFromFilePath(Constants.ConnectionStringPathKey)); CloudFileClient fileClient = storageAccount.CreateCloudFileClient(); CloudFileShare fileShare = fileClient.GetShareReference("h2h"); if (Task.Run(async() => await fileShare.ExistsAsync()).Result) { string policyName = "DemoPolicy" + new Random().Next(50); FileSharePermissions fileSharePermissions = Task.Run(async() => await fileShare.GetPermissionsAsync()).Result; // define policy SharedAccessFilePolicy sharedAccessFilePolicy = new SharedAccessFilePolicy() { SharedAccessExpiryTime = DateTime.UtcNow.AddHours(1), //Permissions = SharedAccessFilePermissions.Read Permissions = SharedAccessFilePermissions.Write }; fileSharePermissions.SharedAccessPolicies.Add(policyName, sharedAccessFilePolicy); // set permissions of file share Task.Run(async() => await fileShare.SetPermissionsAsync(fileSharePermissions)); // generate SAS token based on policy and use to create a new file CloudFileDirectory rootDirectory = fileShare.GetRootDirectoryReference(); if (Task.Run(async() => await rootDirectory.ExistsAsync()).Result) { CloudFileDirectory customDirectory = rootDirectory.GetDirectoryReference("Output"); if (Task.Run(async() => await customDirectory.ExistsAsync()).Result) { CloudFile file = customDirectory.GetFileReference(_globalNotesPdf.Name); string sasToken = file.GetSharedAccessSignature(null, policyName); //generate URL of file with SAS token Uri fileSASUrl = new Uri(file.StorageUri.PrimaryUri.ToString() + sasToken); CloudFile newFile = new CloudFile(fileSASUrl); Task.Run(async() => await newFile.UploadFromFileAsync(_globalNotesPdf.FullName)); } } } }
public void SetSharePermissions(CloudFileShare share, FileSharePermissions permissions, AccessCondition accessCondition = null, FileRequestOptions options = null, OperationContext operationContext = null) { Task.Run(() => share.SetPermissionsAsync(permissions, accessCondition, options, operationContext)).Wait(); }
public static void SetPermissions(this CloudFileShare share, FileSharePermissions permissions, AccessCondition accessCondition = null, FileRequestOptions options = null, OperationContext operationContext = null) { share.SetPermissionsAsync(permissions, accessCondition, options, operationContext).GetAwaiter().GetResult(); }