Пример #1
0
        private void HandlePendingMissingFileKeys(ApiMissingFileKeys missingFileKeys, UserPrivateKey thisUserPrivateKey)
        {
            if (missingFileKeys == null || missingFileKeys.Items.Count == 0)
            {
                return;
            }

            Dictionary <long, UserPublicKey> userPublicKeys         = UserMapper.ConvertApiUserIdPublicKeys(missingFileKeys.UserPublicKey);
            Dictionary <long, PlainFileKey>  plainFileKeys          = GeneratePlainFileKeyMap(missingFileKeys.FileKeys, thisUserPrivateKey);
            ApiSetUserFileKeysRequest        setUserFileKeysRequest = new ApiSetUserFileKeysRequest {
                Items = new List <ApiSetUserFileKey>(missingFileKeys.UserPublicKey.Count)
            };

            foreach (ApiUserIdFileId currentMissingFileKey in missingFileKeys.Items)
            {
                UserPublicKey currentUsersPublicKey = userPublicKeys[currentMissingFileKey.UserId];
                PlainFileKey  currentPlainFileKey   = plainFileKeys[currentMissingFileKey.FileId];

                EncryptedFileKey currentEncryptedFileKey = EncryptFileKey(currentPlainFileKey, currentUsersPublicKey, currentMissingFileKey.FileId);

                ApiSetUserFileKey newRequestEntry = new ApiSetUserFileKey {
                    FileId  = currentMissingFileKey.FileId,
                    UserId  = currentMissingFileKey.UserId,
                    FileKey = FileMapper.ToApiFileKey(currentEncryptedFileKey)
                };
                setUserFileKeysRequest.Items.Add(newRequestEntry);
            }

            IRestRequest restRequest = _client.Builder.PostMissingFileKeys(setUserFileKeysRequest);

            _client.Executor.DoSyncApiCall <VoidResponse>(restRequest, RequestType.PostMissingFileKeys);
        }
Пример #2
0
        public void GenerateMissingFileKeys(long?nodeId = null, int limit = int.MaxValue)
        {
            _client.Executor.CheckApiServerVersion();

            #region Parameter Validation

            nodeId.NullableMustPositive(nameof(nodeId));
            limit.MustPositive(nameof(limit));

            #endregion

            UserKeyPair userKeyPair        = _client.AccountImpl.GetAndCheckUserKeyPair();
            int         currentBatchOffset = 0;
            const int   batchLimit         = 10;
            while (currentBatchOffset < limit)
            {
                IRestRequest       currentBatchRequest = _client.Builder.GetMissingFileKeys(nodeId, batchLimit, currentBatchOffset);
                ApiMissingFileKeys missingFileKeys     =
                    _client.Executor.DoSyncApiCall <ApiMissingFileKeys>(currentBatchRequest, RequestType.GetMissingFileKeys);
                HandlePendingMissingFileKeys(missingFileKeys, userKeyPair.UserPrivateKey);
                currentBatchOffset += missingFileKeys.Items.Count;
                if (missingFileKeys.Items.Count < batchLimit)
                {
                    break;
                }
            }
        }