From 0c93cfea07ddabddc5bae1eabdd67fbc56877e29 Mon Sep 17 00:00:00 2001 From: Johannes Millan Date: Sun, 8 Dec 2024 20:58:31 +0100 Subject: [PATCH] feat(issueProvider): improve header manipulation and also change jira way of authentication --- electron/main-window.ts | 10 +++ .../issue/providers/jira/jira-api.service.ts | 78 +++++++++---------- 2 files changed, 49 insertions(+), 39 deletions(-) diff --git a/electron/main-window.ts b/electron/main-window.ts index c0f6dad99e..f11689760b 100644 --- a/electron/main-window.ts +++ b/electron/main-window.ts @@ -93,7 +93,13 @@ export const createWindow = ({ // see: https://pratikpc.medium.com/bypassing-cors-with-electron-ab7eaf331605 mainWin.webContents.session.webRequest.onBeforeSendHeaders((details, callback) => { const { requestHeaders } = details; + upsertKeyValue(requestHeaders, 'Origin', null); + upsertKeyValue(requestHeaders, 'Referer', null); + upsertKeyValue(requestHeaders, 'User-Agent', ['']); upsertKeyValue(requestHeaders, 'Access-Control-Allow-Origin', ['*']); + delete requestHeaders['Origin']; + delete requestHeaders['Referer']; + callback({ requestHeaders }); }); @@ -101,6 +107,10 @@ export const createWindow = ({ const { responseHeaders } = details; upsertKeyValue(responseHeaders, 'Access-Control-Allow-Origin', ['*']); upsertKeyValue(responseHeaders, 'Access-Control-Allow-Headers', ['*']); + upsertKeyValue(responseHeaders, 'Access-Control-Allow-Methods', [ + 'GET, POST, PUT, DELETE, OPTIONS', + ]); + callback({ responseHeaders, }); diff --git a/src/app/features/issue/providers/jira/jira-api.service.ts b/src/app/features/issue/providers/jira/jira-api.service.ts index 0fd3ec5cb4..8857548fdf 100644 --- a/src/app/features/issue/providers/jira/jira-api.service.ts +++ b/src/app/features/issue/providers/jira/jira-api.service.ts @@ -465,16 +465,16 @@ export class JiraApiService { transform: any, jiraCfg: JiraCfg, ): Observable { - // if (!this._isExtension) { - // return fromPromise( - // fetch(url, requestInit) - // .then((response) => response.body) - // .then(streamToJsonIfPossible as any) - // .then((res) => - // transform ? transform({ response: res }, jiraCfg) : { response: res }, - // ), - // ); - // } + if (!this._isExtension) { + return fromPromise( + fetch(url, requestInit) + .then((response) => response.body) + .then(streamToJsonIfPossible as any) + .then((res) => + transform ? transform({ response: res }, jiraCfg) : { response: res }, + ), + ); + } // TODO refactor to observable for request canceling etc let promiseResolve; @@ -690,32 +690,32 @@ export class JiraApiService { } } -// // eslint-disable-next-line prefer-arrow/prefer-arrow-functions -// async function streamToString(stream: ReadableStream): Promise { -// const reader = stream.getReader(); -// const decoder = new TextDecoder(); -// let result = ''; -// let done = false; -// -// while (!done) { -// const { value, done: doneReading } = await reader.read(); -// done = doneReading; -// if (value) { -// result += decoder.decode(value, { stream: true }); -// } -// } -// -// result += decoder.decode(); // flush the decoder -// return result; -// } -// -// // eslint-disable-next-line prefer-arrow/prefer-arrow-functions -// async function streamToJsonIfPossible(stream: ReadableStream): Promise { -// const text = await streamToString(stream); -// try { -// return JSON.parse(text); -// } catch (e) { -// console.error('Jira: Could not parse response', text); -// return text; -// } -// } +// eslint-disable-next-line prefer-arrow/prefer-arrow-functions +async function streamToString(stream: ReadableStream): Promise { + const reader = stream.getReader(); + const decoder = new TextDecoder(); + let result = ''; + let done = false; + + while (!done) { + const { value, done: doneReading } = await reader.read(); + done = doneReading; + if (value) { + result += decoder.decode(value, { stream: true }); + } + } + + result += decoder.decode(); // flush the decoder + return result; +} + +// eslint-disable-next-line prefer-arrow/prefer-arrow-functions +async function streamToJsonIfPossible(stream: ReadableStream): Promise { + const text = await streamToString(stream); + try { + return JSON.parse(text); + } catch (e) { + console.error('Jira: Could not parse response', text); + return text; + } +}