From 7100a06b59750d9210466282ed60a594c95110ed Mon Sep 17 00:00:00 2001 From: Caleb Owens Date: Tue, 9 Apr 2024 21:52:16 +0100 Subject: [PATCH] Allow passing undefined content type to fix form multipart types --- app/src/lib/backend/cloud.ts | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/app/src/lib/backend/cloud.ts b/app/src/lib/backend/cloud.ts index c4e932ed0..bf5b5c939 100644 --- a/app/src/lib/backend/cloud.ts +++ b/app/src/lib/backend/cloud.ts @@ -87,11 +87,21 @@ export class CloudClient { method?: RequestMethod; token?: string; body?: FormData | object; - headers?: Record; + headers?: Record; }): Promise { - const butlerHeaders: Record = { ...defaultHeaders, ...params.headers }; + const butlerHeaders = new Headers(defaultHeaders); - if (params.token) butlerHeaders['X-Auth-Token'] = params.token; + if (params.headers) { + Object.entries(params.headers).forEach(([key, value]) => { + if (value) { + butlerHeaders.set(key, value); + } else { + butlerHeaders.delete(key); + } + }); + } + + if (params.token) butlerHeaders.set('X-Auth-Token', params.token); const response = await this.fetch(getUrl(params.path), { method: params.method || RequestMethod.GET, @@ -139,10 +149,12 @@ export class CloudClient { if (params.repo) formData.append('repo', params.repo); if (params.data) formData.append('data', params.data); + // Content Type must be unset for the right form-data border to be set automatically return this.makeRequest({ path: 'feedback', method: RequestMethod.PUT, body: formData, + headers: { 'Content-Type': undefined }, token }); } @@ -159,10 +171,12 @@ export class CloudClient { if (params.name) formData.append('name', params.name); if (params.picture) formData.append('avatar', params.picture); + // Content Type must be unset for the right form-data border to be set automatically return this.makeRequest({ path: 'user.json', method: RequestMethod.PUT, body: formData, + headers: { 'Content-Type': undefined }, token }); }