From ef0bc70f90d98f0bc375a3aad73ab205aa9c1381 Mon Sep 17 00:00:00 2001 From: shockrah Date: Mon, 8 Mar 2021 19:51:57 -0800 Subject: [PATCH] =?UTF-8?q?=E2=9E=96=20Complexity=20in=20auth.login=20by?= =?UTF-8?q?=20basically=20cutting=20it=20in=20half=20and=20throwing=20the?= =?UTF-8?q?=20bad=20half=20out=20=E2=9C=A8=20auth.init=20is=20now=20the=20?= =?UTF-8?q?more=20complex=20site=20since=20it=20literally=20has=201=20chan?= =?UTF-8?q?ce=20to=20fire?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- freechat-client/src/auth.js | 53 ++++++++++++++++++------------------- 1 file changed, 26 insertions(+), 27 deletions(-) diff --git a/freechat-client/src/auth.js b/freechat-client/src/auth.js index 1dda481..fde8d69 100644 --- a/freechat-client/src/auth.js +++ b/freechat-client/src/auth.js @@ -1,7 +1,4 @@ const { ipcRenderer } = require('electron') -const { Request } = require('./request.js') - -const jsonwebtoken = require('jsonwebtoken') const got = require('got') @@ -12,31 +9,19 @@ const got = require('got') * @param {String} user.secret * @param {Number} user.id * + * @returns {String|null} JWT */ async function login(protocol, host, port, user) { - - let pass = false - const url = `${protocol}://${host}:${port}/login` const response = await got(url, { searchParams: { id: user['id'], secret: user['secret'] }, - responseType: 'json' - }) - - const jwt = response.body['jwt'] - - let config = await ipcRenderer.invoke('config-request') - - for(const idx in config['servers']) { - // 'tism: once we find the right server conf updated it and jam it back in - // to disk, this high level of granularity is ugly but the alternatives - // so much worse - if(config['servers'][idx]['server']['host'] == host) { - config['servers'][idx]['server']['jwt'] = jwt - await ipcRenderer.invoke('config-update', config) - break + responseType: 'json', + // If DNS is seriously taking this long we honestly should just give up + timeout: { + lookup: 500 } - } + }) + return response.body['jwt'] } exports.login = login @@ -44,11 +29,25 @@ exports.login = login /** * @returns {Config} whole config to use in ui building back in DOM-land */ -exports.init = async function(config) { - for(let conf of config['servers']) { - const remote = conf['server'] - const user = conf['user'] +exports.init = async function() { + // First we fetch the in-memnory configuration + const config = await ipcRenderer.invoke('config-request') - await login(remote['protocol'], remote['hostname'], remote['port'], user) + for(const index in config.data['servers']) { + console.log('Initial login', config.data['servers'][index]) + const remote = config.data['servers'][index]['server'] + const user = config.data['servers'][index]['user'] + + try { + // update the jwt first + const jwt = await login(remote['protocol'], remote['hostname'], remote['port'], user) + config.data['servers'][index]['user']['jwt'] = jwt + } catch (err) { + continue + } } + console.log('after init', config) + + await ipcRenderer.invoke('config-update', config) + return await ipcRenderer.invoke('config-request') }