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); }
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; } } }