1
0
mirror of https://github.com/bitwarden/mobile synced 2025-12-11 13:53:29 +00:00

Send azure upload (#1334)

* Add direct upload api endpoints

* Create azure upload service

* Update max file size

* Update send file upload test

* Move internationalization string to correct document

* Allow for one shot blob uploads

* Remove unused helper

* Use FileUploadService

Fallback to legacy method on old server implementations.
This commit is contained in:
Matt Gibson
2021-03-29 09:45:04 -05:00
committed by GitHub
parent ab04759b0e
commit 13ffbe911a
16 changed files with 400 additions and 40 deletions

View File

@@ -0,0 +1,51 @@
using System.Threading.Tasks;
using Bit.Core.Abstractions;
using Bit.Core.Models.Domain;
using Bit.Core.Models.Response;
using Bit.Core.Enums;
using System;
namespace Bit.Core.Services {
public class FileUploadService : IFileUploadService
{
public FileUploadService(ApiService apiService)
{
_apiService = apiService;
_bitwardenFileUploadService = new BitwardenFileUploadService(apiService);
_azureFileUploadService = new AzureFileUploadService();
}
private readonly BitwardenFileUploadService _bitwardenFileUploadService;
private readonly AzureFileUploadService _azureFileUploadService;
private readonly ApiService _apiService;
public async Task UploadSendFileAsync(SendFileUploadDataResponse uploadData, CipherString fileName, byte[] encryptedFileData)
{
try
{
switch (uploadData.FileUploadType)
{
case FileUploadType.Direct:
await _bitwardenFileUploadService.Upload(fileName.EncryptedString, encryptedFileData,
fd => _apiService.PostSendFileAsync(uploadData.SendResponse.Id, uploadData.SendResponse.File.Id, fd));
break;
case FileUploadType.Azure:
Func<Task<string>> renewalCallback = async () =>
{
var response = await _apiService.RenewFileUploadUrlAsync(uploadData.SendResponse.Id, uploadData.SendResponse.File.Id);
return response.Url;
};
await _azureFileUploadService.Upload(uploadData.Url, encryptedFileData, renewalCallback);
break;
default:
throw new Exception("Unknown file upload type");
}
}
catch (Exception e)
{
await _apiService.DeleteSendAsync(uploadData.SendResponse.Id);
throw e;
}
}
}
}