Skip to content

Commit 5ecc730

Browse files
authored
feat(Service): Add modifyRequestHeaders for services (🙌 @kamyweb)
2 parents 9d6a59f + 10ca850 commit 5ecc730

File tree

3 files changed

+40
-1
lines changed

3 files changed

+40
-1
lines changed

Diff for: appveyor.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,4 +30,4 @@ artifacts:
3030

3131
branches:
3232
except:
33-
- i18n
33+
- i18n

Diff for: src/index.js

+24
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import {
55
BrowserWindow,
66
shell,
77
ipcMain,
8+
session,
89
} from 'electron';
910

1011
// import isDevMode from 'electron-is-dev';
@@ -394,6 +395,29 @@ ipcMain.on('feature-basic-auth-credentials', (e, { user, password }) => {
394395
authCallback = noop;
395396
});
396397

398+
ipcMain.on('modifyRequestHeaders', (e, { modifiedRequestHeaders, serviceId }) => {
399+
debug('Received modifyRequestHeaders', modifiedRequestHeaders, serviceId);
400+
modifiedRequestHeaders.forEach((headerFilterSet) => {
401+
const { headers, requestFilters } = headerFilterSet;
402+
session.fromPartition(`persist:service-${serviceId}`).webRequest.onBeforeSendHeaders(requestFilters, (details, callback) => {
403+
for (const key in headers) {
404+
if (Object.prototype.hasOwnProperty.call(headers, key)) {
405+
const value = headers[key];
406+
if (value === 'RefererHost') {
407+
if (Object.prototype.hasOwnProperty.call(details.requestHeaders, 'Referer')) {
408+
const { hostname } = new URL(details.requestHeaders.Referer);
409+
details.requestHeaders[key] = `https://${hostname}`;
410+
}
411+
} else {
412+
details.requestHeaders[key] = value;
413+
}
414+
}
415+
}
416+
callback({ requestHeaders: details.requestHeaders });
417+
});
418+
});
419+
});
420+
397421
ipcMain.on('feature-basic-auth-cancel', () => {
398422
debug('Cancel basic auth');
399423

Diff for: src/models/Service.js

+15
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { webContents } from '@electron/remote';
22
import {
33
computed, observable, autorun,
44
} from 'mobx';
5+
import { ipcRenderer } from 'electron';
56
import path from 'path';
67
import normalizeUrl from 'normalize-url';
78

@@ -231,6 +232,20 @@ export default class Service {
231232
initializeWebViewEvents({ handleIPCMessage, openWindow, stores }) {
232233
const webviewWebContents = webContents.fromId(this.webview.getWebContentsId());
233234

235+
// If the recipe has implemented modifyRequestHeaders,
236+
// Send those headers to ipcMain so that it can be set in session
237+
if (typeof this.recipe.modifyRequestHeaders === 'function') {
238+
const modifiedRequestHeaders = this.recipe.modifyRequestHeaders();
239+
console.warn(modifiedRequestHeaders);
240+
debug(this.name, 'modifiedRequestHeaders', modifiedRequestHeaders);
241+
ipcRenderer.send('modifyRequestHeaders', {
242+
modifiedRequestHeaders,
243+
serviceId: this.id,
244+
});
245+
} else {
246+
debug(this.name, 'modifyRequestHeaders is not defined in the recipe');
247+
}
248+
234249
const handleUserAgent = (url, forwardingHack = false) => {
235250
if (url.startsWith('https://accounts.google.com')) {
236251
if (!this.chromelessUserAgent) {

0 commit comments

Comments
 (0)