From 23b884a4ce0769d2b9fff67b171bbbe641bc3412 Mon Sep 17 00:00:00 2001 From: sentialx Date: Tue, 5 May 2020 16:23:20 +0200 Subject: [PATCH] fix: revive auth dialog --- src/main/application.ts | 4 +- src/main/dialogs/auth.ts | 84 +++++++++---------- src/main/view.ts | 5 ++ .../views/auth/components/App/index.tsx | 3 +- src/renderer/views/auth/store/index.ts | 7 +- 5 files changed, 53 insertions(+), 50 deletions(-) diff --git a/src/main/application.ts b/src/main/application.ts index 39acc1932..3c880350f 100644 --- a/src/main/application.ts +++ b/src/main/application.ts @@ -10,6 +10,7 @@ import { StorageService } from './services/storage'; import { getMainMenu } from './menus/main'; import { runAutoUpdaterService } from './services'; import { DialogsService } from './services/dialogs-service'; +import { requestAuth } from './dialogs/auth'; export class Application { public static instance = new Application(); @@ -63,7 +64,8 @@ export class Application { e.preventDefault(); const window = this.windows.findByBrowserView(webContents.id); - const credentials = await window.dialogs.authDialog.requestAuth( + const credentials = await requestAuth( + window.win, request.url, webContents.id, ); diff --git a/src/main/dialogs/auth.ts b/src/main/dialogs/auth.ts index e919a11aa..3bb9b25d8 100644 --- a/src/main/dialogs/auth.ts +++ b/src/main/dialogs/auth.ts @@ -1,51 +1,49 @@ -import { ipcMain } from 'electron'; -import { AppWindow } from '../windows'; -import { - TOOLBAR_HEIGHT, - VIEW_Y_OFFSET, - DIALOG_MARGIN_TOP, -} from '~/constants/design'; -import { Dialog } from '.'; +import { VIEW_Y_OFFSET } from '~/constants/design'; +import { BrowserWindow } from 'electron'; +import { Application } from '../application'; -const WIDTH = 400; -const HEIGHT = 500; +export const requestAuth = ( + browserWindow: BrowserWindow, + url: string, + tabId: number, +): Promise => { + return new Promise((resolve, reject) => { + const appWindow = Application.instance.windows.fromBrowserWindow( + browserWindow, + ); -export class AuthDialog extends Dialog { - public constructor(appWindow: AppWindow) { - super(appWindow, { + const tab = appWindow.viewManager.views.get(tabId); + tab.requestedAuth = { url }; + + const dialog = Application.instance.dialogs.show({ name: 'auth', - bounds: { - width: WIDTH, - height: HEIGHT, - y: VIEW_Y_OFFSET - DIALOG_MARGIN_TOP - 8, + browserWindow, + getBounds: () => { + const { width } = browserWindow.getContentBounds(); + return { + width: 400, + height: 500, + x: width / 2 - 400 / 2, + y: VIEW_Y_OFFSET, + }; + }, + tabAssociation: { + tabId, + getTabInfo: (tabId) => { + const tab = appWindow.viewManager.views.get(tabId); + return tab.requestedAuth; + }, + }, + onWindowBoundsUpdate: (disposition) => { + if (disposition === 'resize') dialog.rearrange(); }, }); - } - - public requestAuth( - url: string, - tabId: number, - ): Promise<{ username: string; password: string }> { - return new Promise((resolve) => { - this.show(); - this.tabIds.push(tabId); - - this.send('request-auth', url); - - ipcMain.once(`request-auth-result-${this.appWindow.id}`, (e, result) => { - this.tabIds = this.tabIds.filter((x) => x !== tabId); - this.hide(); - resolve(result); - }); - }); - } - public rearrange() { - const { width } = this.appWindow.win.getContentBounds(); + if (!dialog) return; - super.rearrange({ - x: Math.round(width / 2 - WIDTH / 2), - y: TOOLBAR_HEIGHT, + dialog.on('result', (e, result) => { + resolve(result); + dialog.hide(); }); - } -} + }); +}; diff --git a/src/main/view.ts b/src/main/view.ts index e33d18a5e..e96378c70 100644 --- a/src/main/view.ts +++ b/src/main/view.ts @@ -14,6 +14,10 @@ import { TabEvent } from '~/interfaces/tabs'; import { Queue } from '~/utils/queue'; import { Application } from './application'; +interface IAuthInfo { + url: string; +} + export class View { public browserView: BrowserView; @@ -37,6 +41,7 @@ export class View { text: '', }; + public requestedAuth: IAuthInfo; public requestedPermission: any; private historyQueue = new Queue(); diff --git a/src/renderer/views/auth/components/App/index.tsx b/src/renderer/views/auth/components/App/index.tsx index 5b6c7d8da..11e268dd3 100644 --- a/src/renderer/views/auth/components/App/index.tsx +++ b/src/renderer/views/auth/components/App/index.tsx @@ -1,4 +1,3 @@ -import { ipcRenderer } from 'electron'; import * as React from 'react'; import { observer } from 'mobx-react-lite'; import { ThemeProvider } from 'styled-components'; @@ -15,7 +14,7 @@ const ref1 = React.createRef(); const ref2 = React.createRef(); const sendResponse = (credentials: any) => { - ipcRenderer.send(`request-auth-result-${store.windowId}`, credentials); + store.send('result', credentials); }; const onClick = () => { diff --git a/src/renderer/views/auth/store/index.ts b/src/renderer/views/auth/store/index.ts index ee2611610..ab2461a28 100644 --- a/src/renderer/views/auth/store/index.ts +++ b/src/renderer/views/auth/store/index.ts @@ -1,5 +1,4 @@ import { observable } from 'mobx'; -import { ipcRenderer } from 'electron'; import { DialogStore } from '~/models/dialog-store'; export class Store extends DialogStore { @@ -9,9 +8,9 @@ export class Store extends DialogStore { public constructor() { super({ hideOnBlur: false, visibilityWrapper: false }); - ipcRenderer.on('request-auth', (e, url) => { - this.url = url; - }); + this.onUpdateTabInfo = (tabId, auth) => { + this.url = auth.url; + }; } }