mirror of
https://github.com/bitwarden/browser.git
synced 2024-12-11 14:48:46 +01:00
[PM-5214] [CLI] Add proxy support for file uploads (#7342)
* Add proxy support for file uploads Instead of using node's native fetch we extend ApiService with NodeApiService to add support for proxies using `node-fetch` * Fix constructors for FileUploadService in browser * Fix dependency on ApiService within jslib-services.module --------- Co-authored-by: Daniel James Smith <djsmith85@users.noreply.github.com>
This commit is contained in:
parent
b046c4965d
commit
161a358c49
@ -693,7 +693,7 @@ export default class MainBackground {
|
|||||||
);
|
);
|
||||||
|
|
||||||
this.domainSettingsService = new DefaultDomainSettingsService(this.stateProvider);
|
this.domainSettingsService = new DefaultDomainSettingsService(this.stateProvider);
|
||||||
this.fileUploadService = new FileUploadService(this.logService);
|
this.fileUploadService = new FileUploadService(this.logService, this.apiService);
|
||||||
this.cipherFileUploadService = new CipherFileUploadService(
|
this.cipherFileUploadService = new CipherFileUploadService(
|
||||||
this.apiService,
|
this.apiService,
|
||||||
this.fileUploadService,
|
this.fileUploadService,
|
||||||
|
@ -485,7 +485,7 @@ export class ServiceContainer {
|
|||||||
|
|
||||||
this.domainSettingsService = new DefaultDomainSettingsService(this.stateProvider);
|
this.domainSettingsService = new DefaultDomainSettingsService(this.stateProvider);
|
||||||
|
|
||||||
this.fileUploadService = new FileUploadService(this.logService);
|
this.fileUploadService = new FileUploadService(this.logService, this.apiService);
|
||||||
|
|
||||||
this.sendStateProvider = new SendStateProvider(this.stateProvider);
|
this.sendStateProvider = new SendStateProvider(this.stateProvider);
|
||||||
|
|
||||||
|
@ -447,7 +447,7 @@ const safeProviders: SafeProvider[] = [
|
|||||||
safeProvider({
|
safeProvider({
|
||||||
provide: FileUploadServiceAbstraction,
|
provide: FileUploadServiceAbstraction,
|
||||||
useClass: FileUploadService,
|
useClass: FileUploadService,
|
||||||
deps: [LogService],
|
deps: [LogService, ApiServiceAbstraction],
|
||||||
}),
|
}),
|
||||||
safeProvider({
|
safeProvider({
|
||||||
provide: CipherFileUploadServiceAbstraction,
|
provide: CipherFileUploadServiceAbstraction,
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
// FIXME: Update this file to be type safe and remove this and next line
|
// FIXME: Update this file to be type safe and remove this and next line
|
||||||
// @ts-strict-ignore
|
// @ts-strict-ignore
|
||||||
|
import { ApiService } from "../../../abstractions/api.service";
|
||||||
import { LogService } from "../../abstractions/log.service";
|
import { LogService } from "../../abstractions/log.service";
|
||||||
import { Utils } from "../../misc/utils";
|
import { Utils } from "../../misc/utils";
|
||||||
import { EncArrayBuffer } from "../../models/domain/enc-array-buffer";
|
import { EncArrayBuffer } from "../../models/domain/enc-array-buffer";
|
||||||
@ -8,7 +9,10 @@ const MAX_SINGLE_BLOB_UPLOAD_SIZE = 256 * 1024 * 1024; // 256 MiB
|
|||||||
const MAX_BLOCKS_PER_BLOB = 50000;
|
const MAX_BLOCKS_PER_BLOB = 50000;
|
||||||
|
|
||||||
export class AzureFileUploadService {
|
export class AzureFileUploadService {
|
||||||
constructor(private logService: LogService) {}
|
constructor(
|
||||||
|
private logService: LogService,
|
||||||
|
private apiService: ApiService,
|
||||||
|
) {}
|
||||||
|
|
||||||
async upload(url: string, data: EncArrayBuffer, renewalCallback: () => Promise<string>) {
|
async upload(url: string, data: EncArrayBuffer, renewalCallback: () => Promise<string>) {
|
||||||
if (data.buffer.byteLength <= MAX_SINGLE_BLOB_UPLOAD_SIZE) {
|
if (data.buffer.byteLength <= MAX_SINGLE_BLOB_UPLOAD_SIZE) {
|
||||||
@ -33,7 +37,7 @@ export class AzureFileUploadService {
|
|||||||
headers: headers,
|
headers: headers,
|
||||||
});
|
});
|
||||||
|
|
||||||
const blobResponse = await fetch(request);
|
const blobResponse = await this.apiService.nativeFetch(request);
|
||||||
|
|
||||||
if (blobResponse.status !== 201) {
|
if (blobResponse.status !== 201) {
|
||||||
throw new Error(`Failed to create Azure blob: ${blobResponse.status}`);
|
throw new Error(`Failed to create Azure blob: ${blobResponse.status}`);
|
||||||
@ -79,7 +83,7 @@ export class AzureFileUploadService {
|
|||||||
headers: blockHeaders,
|
headers: blockHeaders,
|
||||||
});
|
});
|
||||||
|
|
||||||
const blockResponse = await fetch(blockRequest);
|
const blockResponse = await this.apiService.nativeFetch(blockRequest);
|
||||||
|
|
||||||
if (blockResponse.status !== 201) {
|
if (blockResponse.status !== 201) {
|
||||||
const message = `Unsuccessful block PUT. Received status ${blockResponse.status}`;
|
const message = `Unsuccessful block PUT. Received status ${blockResponse.status}`;
|
||||||
@ -108,7 +112,7 @@ export class AzureFileUploadService {
|
|||||||
headers: headers,
|
headers: headers,
|
||||||
});
|
});
|
||||||
|
|
||||||
const response = await fetch(request);
|
const response = await this.apiService.nativeFetch(request);
|
||||||
|
|
||||||
if (response.status !== 201) {
|
if (response.status !== 201) {
|
||||||
const message = `Unsuccessful block list PUT. Received status ${response.status}`;
|
const message = `Unsuccessful block list PUT. Received status ${response.status}`;
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
// FIXME: Update this file to be type safe and remove this and next line
|
// FIXME: Update this file to be type safe and remove this and next line
|
||||||
// @ts-strict-ignore
|
// @ts-strict-ignore
|
||||||
|
import { ApiService } from "../../../abstractions/api.service";
|
||||||
import {
|
import {
|
||||||
FileUploadApiMethods,
|
FileUploadApiMethods,
|
||||||
FileUploadService as FileUploadServiceAbstraction,
|
FileUploadService as FileUploadServiceAbstraction,
|
||||||
@ -16,8 +17,11 @@ export class FileUploadService implements FileUploadServiceAbstraction {
|
|||||||
private azureFileUploadService: AzureFileUploadService;
|
private azureFileUploadService: AzureFileUploadService;
|
||||||
private bitwardenFileUploadService: BitwardenFileUploadService;
|
private bitwardenFileUploadService: BitwardenFileUploadService;
|
||||||
|
|
||||||
constructor(protected logService: LogService) {
|
constructor(
|
||||||
this.azureFileUploadService = new AzureFileUploadService(logService);
|
protected logService: LogService,
|
||||||
|
apiService: ApiService,
|
||||||
|
) {
|
||||||
|
this.azureFileUploadService = new AzureFileUploadService(logService, apiService);
|
||||||
this.bitwardenFileUploadService = new BitwardenFileUploadService();
|
this.bitwardenFileUploadService = new BitwardenFileUploadService();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user