mirror of
https://github.com/bitwarden/browser.git
synced 2025-01-25 21:51:30 +01:00
46 lines
2.1 KiB
TypeScript
46 lines
2.1 KiB
TypeScript
|
import { ApiService } from '../abstractions/api.service';
|
||
|
import { FileUploadService as FileUploadServiceAbstraction } from '../abstractions/fileUpload.service';
|
||
|
import { LogService } from '../abstractions/log.service';
|
||
|
|
||
|
import { FileUploadType } from '../enums/fileUploadType';
|
||
|
|
||
|
import { CipherString } from '../models/domain';
|
||
|
import { SendFileUploadDataResponse } from '../models/response/sendFileUploadDataResponse';
|
||
|
|
||
|
import { AzureFileUploadService } from './azureFileUpload.service';
|
||
|
import { BitwardenFileUploadService } from './bitwardenFileUpload.service';
|
||
|
|
||
|
export class FileUploadService implements FileUploadServiceAbstraction {
|
||
|
private azureFileUploadService: AzureFileUploadService;
|
||
|
private bitwardenFileUploadService: BitwardenFileUploadService;
|
||
|
|
||
|
constructor(private logService: LogService, private apiService: ApiService) {
|
||
|
this.azureFileUploadService = new AzureFileUploadService(logService);
|
||
|
this.bitwardenFileUploadService = new BitwardenFileUploadService(apiService);
|
||
|
}
|
||
|
|
||
|
async uploadSendFile(uploadData: SendFileUploadDataResponse, fileName: CipherString, encryptedFileData: ArrayBuffer) {
|
||
|
try {
|
||
|
switch (uploadData.fileUploadType) {
|
||
|
case FileUploadType.Direct:
|
||
|
await this.bitwardenFileUploadService.upload(uploadData.sendResponse, fileName, encryptedFileData);
|
||
|
break;
|
||
|
case FileUploadType.Azure:
|
||
|
const renewalCallback = async () => {
|
||
|
const renewalResponse = await this.apiService.renewFileUploadUrl(uploadData.sendResponse.id,
|
||
|
uploadData.sendResponse.file.id);
|
||
|
return renewalResponse.url;
|
||
|
};
|
||
|
await this.azureFileUploadService.upload(uploadData.url, encryptedFileData,
|
||
|
renewalCallback);
|
||
|
break;
|
||
|
default:
|
||
|
throw new Error('Unknown file upload type');
|
||
|
}
|
||
|
} catch (e) {
|
||
|
this.apiService.deleteSend(uploadData.sendResponse.id);
|
||
|
throw e;
|
||
|
}
|
||
|
}
|
||
|
}
|