diff --git a/freechat-client/package-lock.json b/freechat-client/package-lock.json index 9402301..aa0d497 100644 --- a/freechat-client/package-lock.json +++ b/freechat-client/package-lock.json @@ -225,6 +225,11 @@ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, + "bignumber.js": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.1.tgz", + "integrity": "sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA==" + }, "boolean": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.0.3.tgz", @@ -656,6 +661,14 @@ "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.0.tgz", "integrity": "sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw==" }, + "json-bigint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "requires": { + "bignumber.js": "^9.0.0" + } + }, "json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", diff --git a/freechat-client/package.json b/freechat-client/package.json index 5e758a1..bbe1458 100644 --- a/freechat-client/package.json +++ b/freechat-client/package.json @@ -12,6 +12,7 @@ "bootstrap": "^4.6.0", "got": "^11.8.2", "jquery": "^3.6.0", + "json-bigint": "^1.0.0", "jsonwebtoken": "^8.5.1", "popper.js": "^1.16.1", "typescript": "^4.2.3", diff --git a/freechat-client/src/auth.js b/freechat-client/src/auth.js index 065a6d5..14759d6 100644 --- a/freechat-client/src/auth.js +++ b/freechat-client/src/auth.js @@ -1,36 +1,36 @@ const { ipcRenderer } = require('electron') const got = require('got') const channels = require('./channels.js') +const URL = require('url') function push_srv(remote, user, enabled) { let classes = 'btn btn-outline-secondary btn-nav-settings' if(!enabled) { classes += ' disabled' } + let url = URL.parse(remote['url']) let btn = $('').attr({ type: 'button', 'class': classes, - id: remote['hostname'], + id: url.host, value: remote['name'] }) $('#server-list').append(btn) - let cb = async () => { await channels.list(remote, user) } - $(`#${remote['hostname']}`).on('click', cb) + let cb = async () => { await channels.server_button_cb(remote, user) } + document.getElementById(url.host).onclick = cb } /** - * @param {String} protocol http|https - * @param {String} host Just the hostname one.two.xyz - * @param {u16} port Port to use + * @param {String} url http(s) url of target * @param {String} user.secret * @param {Number} user.id * * @returns {String|null} JWT */ -async function login(protocol, host, port, user) { - const url = `${protocol}://${host}:${port}/login` - const response = await got(url, { +async function login(baseurl, user) { + const url = `${baseurl}/login` + const response = await got.post(url, { searchParams: { id: user['id'], secret: user['secret'] }, responseType: 'json', // If DNS is seriously taking this long we honestly should just give up @@ -55,13 +55,14 @@ exports.init = async function() { const user = config.data['servers'][index]['user'] try { - const jwt = await login(remote['protocol'], remote['hostname'], remote['port'], user) + console.log('remote params: ', remote) + const jwt = await login(remote['url'], user) config.data['servers'][index]['user']['jwt'] = jwt user['jwt'] = jwt - push_srv(remote, user, true); + push_srv(remote, user, enabled=true); } catch (err) { - push_srv(remote, user, false) + push_srv(remote, user, enabled=false) const e_container = { error: err, server: remote, creds: user } console.log('Failure to communicate with server: ', e_container) } diff --git a/freechat-client/src/cache.ts b/freechat-client/src/cache.ts index 882d41c..7409cb1 100644 --- a/freechat-client/src/cache.ts +++ b/freechat-client/src/cache.ts @@ -20,16 +20,6 @@ class ServerCache { } } - url(): String{ - let url = `${this.config.protocol}://${this.config.hostname}` - // Only add the port WITH THE COLON if the config requires it - if(this.config.port) { - url += `:${this.config.port}` - } - - return url - } - push_message(message: Message) { let ref = this.messages.get(message.cid) if(ref) { @@ -50,7 +40,7 @@ export class Cache { add_server(hostname: String, servercfg: ServerConfig, channels: Array, messages: Array) { let new_entry = new ServerCache(servercfg, channels, messages) - this.servers.set(servercfg.hostname, new_entry) + this.servers.set(servercfg.url, new_entry) } add_message(hostname: String, message: Message) { diff --git a/freechat-client/src/channels.js b/freechat-client/src/channels.js index 386701b..cdc1f8e 100644 --- a/freechat-client/src/channels.js +++ b/freechat-client/src/channels.js @@ -1,6 +1,8 @@ // Requesting channel data here +const { Channel } = require('./types') const $ = require('jquery') const got = require('got') +const URL = require('url') const msg = require('./messages.js') @@ -9,6 +11,10 @@ const ANY_CHANNEL = 0 const VOICE_KIND = 1 const TEXT_KIND = 2 +exports.ANY_CHANNEL = ANY_CHANNEL +exports.VOICE_KIND = VOICE_KIND +exports.TEXT_KIND = TEXT_KIND + /** * Channel button id's have the format of ${hostname}:${channel['name']} @@ -27,18 +33,20 @@ const TEXT_KIND = 2 * @param {i32} channel.kind */ function push(server, user, channel) { + let remote = URL.parse(server.url) + let chan_id = `${remote.hostname}:${channel['name']}` $('#channels-list').append( $('
  • ').append( $('

    ').append( $('