コード例 #1
0
        internal static SharedFolder Load(this ISharedFolder sf, IEnumerable <IRecordMetadata> records,
                                          IEnumerable <ISharedFolderPermission> users, byte[] sharedFolderKey)
        {
            var sharedFolder = new SharedFolder
            {
                Uid  = sf.SharedFolderUid,
                Name = Encoding.UTF8.GetString(CryptoUtils.DecryptAesV1(sf.Name.Base64UrlDecode(), sharedFolderKey)),
                DefaultManageRecords = sf.DefaultManageRecords,
                DefaultManageUsers   = sf.DefaultManageUsers,
                DefaultCanEdit       = sf.DefaultCanEdit,
                DefaultCanShare      = sf.DefaultCanShare,
                SharedFolderKey      = sharedFolderKey,
            };

            if (users != null)
            {
                foreach (var u in users)
                {
                    sharedFolder.UsersPermissions.Add(new SharedFolderPermission
                    {
                        UserId        = u.UserId,
                        UserType      = (UserType)u.UserType,
                        ManageRecords = u.ManageRecords,
                        ManageUsers   = u.ManageUsers
                    });
                }
            }

            if (records != null)
            {
                foreach (var r in records)
                {
                    sharedFolder.RecordPermissions.Add(new SharedFolderRecord
                    {
                        RecordUid = r.RecordUid,
                        CanEdit   = r.CanEdit,
                        CanShare  = r.CanShare
                    });
                }
            }

            return(sharedFolder);
        }
コード例 #2
0
 public bool TryGetSharedFolder(string sharedFolderUid, out SharedFolder sharedFolder)
 {
     return(keeperSharedFolders.TryGetValue(sharedFolderUid, out sharedFolder));
 }
コード例 #3
0
        public static async Task <FolderNode> AddFolder <T>(this VaultOnline vault, string folderName, string parentFolderUid = null, T sharedFolderOptions = null)
            where T : class, ISharedFolderUserOptions, ISharedFolderRecordOptions
        {
            var        parent = vault.GetFolder(parentFolderUid);
            FolderType folderType;

            if (sharedFolderOptions != null)
            {
                if (parent.FolderType != FolderType.UserFolder)
                {
                    throw new VaultException($"Shared folder cannot be created");
                }

                folderType = FolderType.SharedFolder;
            }
            else
            {
                folderType = parent.FolderType == FolderType.UserFolder ? FolderType.UserFolder : FolderType.SharedFolderFolder;
            }

            var          encryptionKey = vault.Auth.AuthContext.DataKey;
            SharedFolder sharedFolder  = null;

            if (folderType == FolderType.SharedFolderFolder)
            {
                var sharedFolderUid = parent.FolderType == FolderType.SharedFolder ? parent.FolderUid : parent.SharedFolderUid;
                sharedFolder  = vault.GetSharedFolder(sharedFolderUid);
                encryptionKey = sharedFolder.SharedFolderKey;
            }

            var data = new FolderData
            {
                name = folderName ?? "",
            };
            var dataBytes = JsonUtils.DumpJson(data);

            var folderKey = CryptoUtils.GenerateEncryptionKey();

            var request = new FolderAddCommand
            {
                FolderUid       = CryptoUtils.GenerateUid(),
                FolderType      = folderType.GetFolderTypeText(),
                Key             = CryptoUtils.EncryptAesV1(folderKey, encryptionKey).Base64UrlEncode(),
                Data            = CryptoUtils.EncryptAesV1(dataBytes, folderKey).Base64UrlEncode(),
                ParentUid       = string.IsNullOrEmpty(parent.FolderUid) || parent.FolderType == FolderType.SharedFolder ? null : parent.FolderUid,
                SharedFolderUid = sharedFolder?.Uid,
            };

            if (sharedFolderOptions != null)
            {
                request.Name          = CryptoUtils.EncryptAesV1(Encoding.UTF8.GetBytes(folderName), folderKey).Base64UrlEncode();
                request.ManageUsers   = sharedFolderOptions.ManageUsers ?? false;
                request.ManageRecords = sharedFolderOptions.ManageRecords ?? false;
                request.CanEdit       = sharedFolderOptions.CanEdit ?? false;
                request.CanShare      = sharedFolderOptions.CanShare ?? false;
            }

            _ = await vault.Auth.ExecuteAuthCommand <FolderAddCommand, AddFolderResponse>(request);

            await vault.ScheduleSyncDown(TimeSpan.FromSeconds(0));

            return(vault.TryGetFolder(request.FolderUid, out var f) ? f : null);
        }