From fa1a7037b47f2e0114d8abc5a99d29239bd3637b Mon Sep 17 00:00:00 2001 From: Kristóf Marussy Date: Sun, 10 Jul 2022 16:07:45 +0200 Subject: refactor: local server import/export MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Kristóf Marussy --- src/electron/ipc-api/localServer.ts | 35 ++++++++++++++++++++++------------- 1 file changed, 22 insertions(+), 13 deletions(-) (limited to 'src/electron/ipc-api') diff --git a/src/electron/ipc-api/localServer.ts b/src/electron/ipc-api/localServer.ts index 04ddc976a..71a3003d1 100644 --- a/src/electron/ipc-api/localServer.ts +++ b/src/electron/ipc-api/localServer.ts @@ -1,9 +1,12 @@ +import { randomBytes } from 'crypto'; import { ipcMain, BrowserWindow } from 'electron'; import { createServer } from 'net'; import { LOCAL_HOSTNAME, LOCAL_PORT } from '../../config'; import { userDataPath } from '../../environment-remote'; import { server } from '../../internal-server/start'; +const debug = require('../../preload-safe-debug')('Ferdium:LocalServer'); + const portInUse = (port: number): Promise => new Promise(resolve => { const server = createServer(socket => { @@ -22,26 +25,32 @@ const portInUse = (port: number): Promise => }); let localServerStarted = false; +let port = LOCAL_PORT; +let token = ''; export default (params: { mainWindow: BrowserWindow }) => { ipcMain.on('startLocalServer', () => { - if (!localServerStarted) { - // Find next unused port for server - let port = LOCAL_PORT; - (async () => { + (async () => { + if (!localServerStarted) { + // Find next unused port for server + port = LOCAL_PORT; // eslint-disable-next-line no-await-in-loop while ((await portInUse(port)) && port < LOCAL_PORT + 10) { port += 1; } - console.log('Starting local server on port', port); - - server(userDataPath(), port); + token = randomBytes(256 / 8).toString('base64url'); + debug('Starting local server at', `http://localhost:${port}/token/${token}`); + await server(userDataPath(), port, token); + localServerStarted = true; + } - params.mainWindow.webContents.send('localServerPort', { - port, - }); - })(); - localServerStarted = true; - } + // Send local server parameters to the renderer even if the server is already running. + params.mainWindow.webContents.send('localServerPort', { + port, + token, + }); + })().catch((error) => { + console.error('Error while starting local server', error); + }); }); }; -- cgit v1.2.3-54-g00ecf