FolderUpdateResponse IEasConnection.FolderUpdate(FolderUpdateRequest folderUpdateRequest) { FolderUpdateCommand folderUpdateCommand = new FolderUpdateCommand(this.EasConnectionSettings); return(folderUpdateCommand.Execute(folderUpdateRequest)); }
public static async Task <FolderNode> FolderUpdate(this VaultOnline vault, string folderUid, string folderName, SharedFolderOptions sharedFolderOptions = null) { if (string.IsNullOrEmpty(folderName) && sharedFolderOptions == null) { throw new VaultException("Folder name cannot be empty"); } var folder = vault.GetFolder(folderUid); if (string.IsNullOrEmpty(folderName)) { folderName = folder.Name; } var parent = vault.RootFolder; if (!string.IsNullOrEmpty(folder.ParentUid)) { vault.TryGetFolder(folder.ParentUid, out parent); } var nameExists = parent.Subfolders .Select(x => vault.TryGetFolder(x, out var v) ? v : null) .Any(x => x != null && x.FolderUid != folderUid && string.Compare(x.Name, folderName, StringComparison.InvariantCultureIgnoreCase) == 0); if (nameExists) { throw new VaultException($"Folder with name {folderName} already exists in {parent.Name}"); } var request = new FolderUpdateCommand { FolderUid = folder.FolderUid, FolderType = folder.FolderType.GetFolderTypeText(), ParentUid = string.IsNullOrEmpty(folder.ParentUid) ? null : folder.ParentUid, SharedFolderUid = string.IsNullOrEmpty(folder.SharedFolderUid) ? null : folder.SharedFolderUid, }; var existingRecord = vault.Storage.Folders.GetEntity(folderUid); var data = string.IsNullOrEmpty(existingRecord?.Data) ? new FolderData() : JsonUtils.ParseJson <FolderData>(existingRecord.Data.Base64UrlDecode()); data.name = folderName; var dataBytes = JsonUtils.DumpJson(data); var encryptionKey = vault.Auth.AuthContext.DataKey; if (folder.FolderType == FolderType.SharedFolderFolder) { encryptionKey = vault.GetSharedFolder(folder.SharedFolderUid).SharedFolderKey; } request.Data = CryptoUtils.EncryptAesV1(dataBytes, encryptionKey).Base64UrlEncode(); if (folder.FolderType != FolderType.UserFolder) { var sharedFolderUid = folder.FolderType == FolderType.UserFolder ? folder.FolderUid : folder.SharedFolderUid; var perm = vault.ResolveSharedFolderAccessPath(vault.Auth.Username, sharedFolderUid, true, true); if (perm != null) { if (perm.UserType == UserType.Team) { request.TeamUid = perm.UserId; } } else { throw new VaultException($"You don't have permissions to modify shared folder ({sharedFolderUid})"); } } if (sharedFolderOptions != null && folder.FolderType == FolderType.SharedFolder) { if (!vault.TryGetSharedFolder(folder.FolderUid, out var sharedFolder)) { request.Name = CryptoUtils.EncryptAesV1(Encoding.UTF8.GetBytes(folderName), sharedFolder.SharedFolderKey).Base64UrlEncode(); } request.ManageUsers = sharedFolderOptions.ManageUsers; request.ManageRecords = sharedFolderOptions.ManageRecords; request.CanEdit = sharedFolderOptions.CanEdit; request.CanShare = sharedFolderOptions.CanShare; } await vault.Auth.ExecuteAuthCommand(request); await vault.ScheduleSyncDown(TimeSpan.FromSeconds(0)); return(vault.TryGetFolder(request.FolderUid, out var f) ? f : null); }