From 7c6836c2a7ff90fca06f3fd0e8042c174447a2e8 Mon Sep 17 00:00:00 2001 From: Vinicius Fortuna Date: Tue, 12 May 2020 20:46:13 -0400 Subject: [PATCH 1/4] Fix DO API --- src/server_manager/cloud/digitalocean_api.ts | 8 ++++---- src/server_manager/electron_app/index.ts | 18 +++++++++--------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/server_manager/cloud/digitalocean_api.ts b/src/server_manager/cloud/digitalocean_api.ts index ab16a0f8..9ee168c8 100644 --- a/src/server_manager/cloud/digitalocean_api.ts +++ b/src/server_manager/cloud/digitalocean_api.ts @@ -100,7 +100,7 @@ class RestApiSession implements DigitalOceanSession { public getAccount(): Promise { console.info('Requesting account'); - return this.request<{account: Account}>('GET', 'account/').then((response) => { + return this.request<{account: Account}>('GET', 'account').then((response) => { return response.account; }); } @@ -179,7 +179,7 @@ class RestApiSession implements DigitalOceanSession { public getDroplet(dropletId: number): Promise { console.info('Requesting droplet'); - return this.request<{droplet: DropletInfo}>('GET', 'droplets/' + dropletId).then((response) => { + return this.request<{droplet: DropletInfo}>('GET', 'droplets' + dropletId).then((response) => { return response.droplet; }); } @@ -192,7 +192,7 @@ class RestApiSession implements DigitalOceanSession { public getDropletsByTag(tag: string): Promise { console.info('Requesting droplet by tag'); - return this.request<{droplets: DropletInfo[]}>('GET', `droplets/?tag_name=${encodeURI(tag)}`) + return this.request<{droplets: DropletInfo[]}>('GET', `droplets?tag_name=${encodeURI(tag)}`) .then((response) => { return response.droplets; }); @@ -200,7 +200,7 @@ class RestApiSession implements DigitalOceanSession { public getDroplets(): Promise { console.info('Requesting droplets'); - return this.request<{droplets: DropletInfo[]}>('GET', 'droplets/').then((response) => { + return this.request<{droplets: DropletInfo[]}>('GET', 'droplets').then((response) => { return response.droplets; }); } diff --git a/src/server_manager/electron_app/index.ts b/src/server_manager/electron_app/index.ts index 556047e5..11b92f93 100644 --- a/src/server_manager/electron_app/index.ts +++ b/src/server_manager/electron_app/index.ts @@ -149,21 +149,21 @@ function workaroundDigitalOceanApiCors() { const headersFilter = {urls: ['https://api.digitalocean.com/*']}; electron.session.defaultSession.webRequest.onHeadersReceived( // tslint:disable-next-line:no-any - headersFilter, (details: any, callback: Function) => { + headersFilter, (details: electron.OnHeadersReceivedListenerDetails, callback: (response: any) => void) => { + console.error(details); if (details.method === 'OPTIONS') { - details.responseHeaders['access-control-allow-origin'] = ['outline://web_app']; + details.responseHeaders['access-control-allow-origin'] = 'outline://web_app'; if (details.statusCode === 403) { details.statusCode = 200; details.statusLine = 'HTTP/1.1 200'; - details.responseHeaders['status'] = ['200']; - details.responseHeaders['access-control-allow-headers'] = - [details.headers['Access-Control-Request-Headers']]; - details.responseHeaders['access-control-allow-credentials'] = ['true']; + details.responseHeaders['status'] = '200'; + details.responseHeaders['access-control-allow-headers'] = 'authorization,content-type'; + details.responseHeaders['access-control-allow-credentials'] = 'true'; details.responseHeaders['access-control-allow-methods'] = - ['GET, POST, PUT, PATCH, DELETE, OPTIONS']; + 'GET, POST, PUT, PATCH, DELETE, OPTIONS'; details.responseHeaders['access-control-expose-headers'] = - ['RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset, Total, Link']; - details.responseHeaders['access-control-max-age'] = ['86400']; + 'RateLimit-Limit, RateLimit-Remaining, RateLimit-Reset, Total, Link'; + details.responseHeaders['access-control-max-age'] = '86400'; } } callback(details); From e177b1e1c7b51b34bf026b4e9b168f1b68b6cd35 Mon Sep 17 00:00:00 2001 From: Vinicius Fortuna Date: Wed, 13 May 2020 01:45:51 -0400 Subject: [PATCH 2/4] Remove logging --- src/server_manager/electron_app/index.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/server_manager/electron_app/index.ts b/src/server_manager/electron_app/index.ts index 11b92f93..bbe78a7e 100644 --- a/src/server_manager/electron_app/index.ts +++ b/src/server_manager/electron_app/index.ts @@ -150,7 +150,6 @@ function workaroundDigitalOceanApiCors() { electron.session.defaultSession.webRequest.onHeadersReceived( // tslint:disable-next-line:no-any headersFilter, (details: electron.OnHeadersReceivedListenerDetails, callback: (response: any) => void) => { - console.error(details); if (details.method === 'OPTIONS') { details.responseHeaders['access-control-allow-origin'] = 'outline://web_app'; if (details.statusCode === 403) { From 57c27e3a40151e3f192b24b593491b41df095f35 Mon Sep 17 00:00:00 2001 From: Vinicius Fortuna Date: Wed, 13 May 2020 01:49:07 -0400 Subject: [PATCH 3/4] Allow all headers --- src/server_manager/electron_app/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server_manager/electron_app/index.ts b/src/server_manager/electron_app/index.ts index bbe78a7e..ceedd7f0 100644 --- a/src/server_manager/electron_app/index.ts +++ b/src/server_manager/electron_app/index.ts @@ -156,7 +156,7 @@ function workaroundDigitalOceanApiCors() { details.statusCode = 200; details.statusLine = 'HTTP/1.1 200'; details.responseHeaders['status'] = '200'; - details.responseHeaders['access-control-allow-headers'] = 'authorization,content-type'; + details.responseHeaders['access-control-allow-headers'] = '*'; details.responseHeaders['access-control-allow-credentials'] = 'true'; details.responseHeaders['access-control-allow-methods'] = 'GET, POST, PUT, PATCH, DELETE, OPTIONS'; From cff86bc3ff93b1542178f749d4f602b9a2b0792e Mon Sep 17 00:00:00 2001 From: Vinicius Fortuna Date: Wed, 13 May 2020 10:02:25 -0400 Subject: [PATCH 4/4] Stop using any --- src/server_manager/electron_app/index.ts | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/server_manager/electron_app/index.ts b/src/server_manager/electron_app/index.ts index ceedd7f0..67268376 100644 --- a/src/server_manager/electron_app/index.ts +++ b/src/server_manager/electron_app/index.ts @@ -147,9 +147,8 @@ function getWebAppUrl() { // status code and inject CORS response headers. function workaroundDigitalOceanApiCors() { const headersFilter = {urls: ['https://api.digitalocean.com/*']}; - electron.session.defaultSession.webRequest.onHeadersReceived( - // tslint:disable-next-line:no-any - headersFilter, (details: electron.OnHeadersReceivedListenerDetails, callback: (response: any) => void) => { + electron.session.defaultSession.webRequest.onHeadersReceived(headersFilter, + (details: electron.OnHeadersReceivedListenerDetails, callback: (response: electron.CallbackResponse) => void) => { if (details.method === 'OPTIONS') { details.responseHeaders['access-control-allow-origin'] = 'outline://web_app'; if (details.statusCode === 403) { @@ -165,7 +164,7 @@ function workaroundDigitalOceanApiCors() { details.responseHeaders['access-control-max-age'] = '86400'; } } - callback(details); + callback(details as electron.CallbackResponse); }); }