aboutsummaryrefslogtreecommitdiffstats
path: root/src/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/index.js')
-rw-r--r--src/index.js40
1 files changed, 34 insertions, 6 deletions
diff --git a/src/index.js b/src/index.js
index 75da4ff88..195e9e863 100644
--- a/src/index.js
+++ b/src/index.js
@@ -1,5 +1,8 @@
1import { 1import {
2 app, BrowserWindow, shell, ipcMain, 2 app,
3 BrowserWindow,
4 shell,
5 ipcMain,
3} from 'electron'; 6} from 'electron';
4 7
5import fs from 'fs-extra'; 8import fs from 'fs-extra';
@@ -7,9 +10,14 @@ import path from 'path';
7import windowStateKeeper from 'electron-window-state'; 10import windowStateKeeper from 'electron-window-state';
8 11
9import { 12import {
10 isDevMode, isMac, isWindows, isLinux, 13 isDevMode,
14 isMac,
15 isWindows,
16 isLinux,
11} from './environment'; 17} from './environment';
12 18
19import { mainIpcHandler as basicAuthHandler } from './features/basicAuth';
20
13// DEV MODE: Save user data into FranzDev 21// DEV MODE: Save user data into FranzDev
14if (isDevMode) { 22if (isDevMode) {
15 app.setPath('userData', path.join(app.getPath('appData'), 'FranzDev')); 23 app.setPath('userData', path.join(app.getPath('appData'), 'FranzDev'));
@@ -263,23 +271,43 @@ app.on('ready', () => {
263}); 271});
264 272
265// This is the worst possible implementation as the webview.webContents based callback doesn't work 🖕 273// This is the worst possible implementation as the webview.webContents based callback doesn't work 🖕
274// TODO: rewrite to handle multiple login calls
275const noop = () => null;
276let authCallback = noop;
266app.on('login', (event, webContents, request, authInfo, callback) => { 277app.on('login', (event, webContents, request, authInfo, callback) => {
267 event.preventDefault(); 278 authCallback = callback;
268 debug('browser login event', authInfo); 279 debug('browser login event', authInfo);
280 event.preventDefault();
269 if (authInfo.isProxy && authInfo.scheme === 'basic') { 281 if (authInfo.isProxy && authInfo.scheme === 'basic') {
270 webContents.send('get-service-id'); 282 webContents.send('get-service-id');
271 283
272 ipcMain.on('service-id', (e, id) => { 284 ipcMain.once('service-id', (e, id) => {
273 debug('Received service id', id); 285 debug('Received service id', id);
274 286
275 const ps = proxySettings.get(id); 287 const ps = proxySettings.get(id);
276 callback(ps.user, ps.password); 288 callback(ps.user, ps.password);
277 }); 289 });
278 } else { 290 } else if (authInfo.scheme === 'basic') {
279 // TODO: implement basic auth 291 debug('basic auth handler', authInfo);
292 basicAuthHandler(mainWindow, authInfo);
280 } 293 }
281}); 294});
282 295
296// TODO: evaluate if we need to store the authCallback for every service
297ipcMain.on('feature-basic-auth-credentials', (e, { user, password }) => {
298 debug('Received basic auth credentials', user, '********');
299
300 authCallback(user, password);
301 authCallback = noop;
302});
303
304ipcMain.on('feature-basic-auth-cancel', () => {
305 debug('Cancel basic auth');
306
307 authCallback(null);
308 authCallback = noop;
309});
310
283// Quit when all windows are closed. 311// Quit when all windows are closed.
284app.on('window-all-closed', () => { 312app.on('window-all-closed', () => {
285 // On OS X it is common for applications and their menu bar 313 // On OS X it is common for applications and their menu bar