feat(issueProvider): improve header manipulation and also change jira way of authentication

This commit is contained in:
Johannes Millan 2024-12-08 20:58:31 +01:00
parent 6ab03563bb
commit 0c93cfea07
2 changed files with 49 additions and 39 deletions

View file

@ -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,
});

View file

@ -465,16 +465,16 @@ export class JiraApiService {
transform: any,
jiraCfg: JiraCfg,
): Observable<any> {
// 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<string> {
// 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<any> {
// 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<string> {
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<any> {
const text = await streamToString(stream);
try {
return JSON.parse(text);
} catch (e) {
console.error('Jira: Could not parse response', text);
return text;
}
}