From 35cc75d177064c8154b9d56c549a6335963efe74 Mon Sep 17 00:00:00 2001 From: Sampath Kumar Krishnan Date: Fri, 24 Apr 2020 22:20:54 +0530 Subject: Add modifyRequestHeaders, enable properly setting headers for services Co-Authored-By: Mahadevan Sreenivasan --- src/index.js | 18 ++++++++++++++++++ src/models/Service.js | 15 +++++++++++++++ 2 files changed, 33 insertions(+) (limited to 'src') diff --git a/src/index.js b/src/index.js index e5f678759..027884826 100644 --- a/src/index.js +++ b/src/index.js @@ -3,6 +3,7 @@ import { BrowserWindow, shell, ipcMain, + session, } from 'electron'; import isDevMode from 'electron-is-dev'; import fs from 'fs-extra'; @@ -394,6 +395,23 @@ ipcMain.on('feature-basic-auth-credentials', (e, { user, password }) => { authCallback = noop; }); + +ipcMain.on('modifyRequestHeaders', (e, { modifiedRequestHeaders, serviceId }) => { + debug('Received modifyRequestHeaders', modifiedRequestHeaders, serviceId); + modifiedRequestHeaders.forEach((headerFilterSet) => { + const { headers, requestFilters } = headerFilterSet; + session.fromPartition(`persist:service-${serviceId}`).webRequest.onBeforeSendHeaders(requestFilters, (details, callback) => { + for (const key in headers) { + if (Object.prototype.hasOwnProperty.call(headers, key)) { + const value = headers[key]; + details.requestHeaders[key] = value; + } + } + callback({ requestHeaders: details.requestHeaders }); + }); + }); +}); + ipcMain.on('feature-basic-auth-cancel', () => { debug('Cancel basic auth'); diff --git a/src/models/Service.js b/src/models/Service.js index 2f2b4572d..5b3ad7bd8 100644 --- a/src/models/Service.js +++ b/src/models/Service.js @@ -1,4 +1,5 @@ import { autorun, computed, observable } from 'mobx'; +import { ipcRenderer } from 'electron'; import normalizeUrl from 'normalize-url'; import path from 'path'; @@ -224,9 +225,23 @@ export default class Service { return ua; } + initializeWebViewEvents({ handleIPCMessage, openWindow, stores }) { const webContents = this.webview.getWebContents(); + // If the recipe has implemented modifyRequestHeaders, + // Send those headers to ipcMain so that it can be set in session + if (typeof this.recipe.modifyRequestHeaders === 'function') { + const modifiedRequestHeaders = this.recipe.modifyRequestHeaders(); + debug(this.name, 'modifiedRequestHeaders', modifiedRequestHeaders); + ipcRenderer.send('modifyRequestHeaders', { + modifiedRequestHeaders, + serviceId: this.id, + }); + } else { + debug(this.name, 'modifyRequestHeaders is not defined in the recipe'); + } + const handleUserAgent = (url, forwardingHack = false) => { if (url.startsWith('https://accounts.google.com')) { if (!this.chromelessUserAgent) { -- cgit v1.2.3-70-g09d2