Exemplo n.º 1
0
        public async Task UploadCipherAttachmentFileAsync(AttachmentUploadDataResponse uploadData,
                                                          EncString encryptedFileName, EncByteArray encryptedFileData)
        {
            try
            {
                switch (uploadData.FileUploadType)
                {
                case FileUploadType.Direct:
                    await _bitwardenFileUploadService.Upload(encryptedFileName.EncryptedString, encryptedFileData,
                                                             fd => _apiService.PostAttachmentFileAsync(uploadData.CipherResponse.Id, uploadData.AttachmentId, fd));

                    break;

                case FileUploadType.Azure:
                    Func <Task <string> > renewalCallback = async() =>
                    {
                        var response = await _apiService.RenewAttachmentUploadUrlAsync(uploadData.CipherResponse.Id, uploadData.AttachmentId);

                        return(response.Url);
                    };
                    await _azureFileUploadService.Upload(uploadData.Url, encryptedFileData, renewalCallback);

                    break;

                default:
                    throw new Exception($"Unkown file upload type: {uploadData.FileUploadType}");
                }
            }
            catch
            {
                await _apiService.DeleteCipherAttachmentAsync(uploadData.CipherResponse.Id, uploadData.AttachmentId);

                throw;
            }
        }
Exemplo n.º 2
0
        public async Task SaveWithServerAsync_PrefersFileUploadService(SutProvider <CipherService> sutProvider,
                                                                       Cipher cipher, string fileName, EncByteArray data, AttachmentUploadDataResponse uploadDataResponse, EncString encKey)
        {
            var encFileName = new EncString(fileName);

            sutProvider.GetDependency <ICryptoService>().EncryptAsync(fileName, Arg.Any <SymmetricCryptoKey>())
            .Returns(encFileName);
            sutProvider.GetDependency <ICryptoService>().EncryptToBytesAsync(data.Buffer, Arg.Any <SymmetricCryptoKey>())
            .Returns(data);
            sutProvider.GetDependency <ICryptoService>().MakeEncKeyAsync(Arg.Any <SymmetricCryptoKey>()).Returns(new Tuple <SymmetricCryptoKey, EncString>(null, encKey));
            sutProvider.GetDependency <IApiService>().PostCipherAttachmentAsync(cipher.Id, Arg.Any <AttachmentRequest>())
            .Returns(uploadDataResponse);

            await sutProvider.Sut.SaveAttachmentRawWithServerAsync(cipher, fileName, data.Buffer);

            await sutProvider.GetDependency <IFileUploadService>().Received(1)
            .UploadCipherAttachmentFileAsync(uploadDataResponse, encFileName, data);
        }