From df2c4af67c88324dd751b8833cdf29115ed39c9f Mon Sep 17 00:00:00 2001 From: Beaudan Date: Thu, 4 Jul 2019 10:20:16 +1000 Subject: [PATCH] Run lint and check for ip or address when removing unreachable nodes --- js/background.js | 1 - js/modules/loki_snode_api.js | 13 ++++-- libloki/api.js | 3 +- libloki/modules/local_loki_server.js | 51 +++++++++++++-------- libloki/test/node/local_loki_server_test.js | 9 +++- libtextsecure/message_receiver.js | 11 ++--- preload.js | 6 +-- 7 files changed, 58 insertions(+), 36 deletions(-) diff --git a/js/background.js b/js/background.js index a1967142f..20d023f26 100644 --- a/js/background.js +++ b/js/background.js @@ -322,7 +322,6 @@ }, shutdown: async () => { - await window.localLokiServer.close(); // Stop background processing diff --git a/js/modules/loki_snode_api.js b/js/modules/loki_snode_api.js index b31c5d170..b1a7887f6 100644 --- a/js/modules/loki_snode_api.js +++ b/js/modules/loki_snode_api.js @@ -94,7 +94,10 @@ class LokiSnodeAPI { storage_port: true, }, }; - const seedNode = seedNodes.splice(Math.floor(Math.random() * seedNodes.length), 1)[0]; + const seedNode = seedNodes.splice( + Math.floor(Math.random() * seedNodes.length), + 1 + )[0]; try { const result = await rpc( `http://${seedNode.ip}`, @@ -114,7 +117,9 @@ class LokiSnodeAPI { })); } catch (e) { if (seedNodes.length === 0) { - throw new window.textsecure.SeedNodeError('Failed to contact seed node'); + throw new window.textsecure.SeedNodeError( + 'Failed to contact seed node' + ); } this.initialiseRandomPool(seedNodes); } @@ -123,7 +128,9 @@ class LokiSnodeAPI { async unreachableNode(pubKey, nodeUrl) { const conversation = ConversationController.get(pubKey); const swarmNodes = [...conversation.get('swarmNodes')]; - const filteredNodes = swarmNodes.filter(node => node.address !== nodeUrl); + const filteredNodes = swarmNodes.filter( + node => node.address !== nodeUrl && node.ip !== nodeUrl + ); await conversation.updateSwarmNodes(filteredNodes); } diff --git a/libloki/api.js b/libloki/api.js index d51031081..d67561954 100644 --- a/libloki/api.js +++ b/libloki/api.js @@ -31,8 +31,7 @@ if (!window.localLokiServer.isListening()) { // Skip if server is not running AND we're not trying to ping a contact - if (!isPing) - return; + if (!isPing) return; type = textsecure.protobuf.LokiAddressMessage.Type.HOST_UNREACHABLE; } else { diff --git a/libloki/modules/local_loki_server.js b/libloki/modules/local_loki_server.js index 95a26fb13..424484385 100644 --- a/libloki/modules/local_loki_server.js +++ b/libloki/modules/local_loki_server.js @@ -88,7 +88,7 @@ class LocalLokiServer extends EventEmitter { // Start a listening on new server return new Promise((res, rej) => { - this.server.listen(port, ip, async (err) => { + this.server.listen(port, ip, async err => { if (err) { rej(err); } else if (this.upnpClient) { @@ -117,14 +117,20 @@ class LocalLokiServer extends EventEmitter { this.upnpClient.getMappings({ local: true }, (err, results) => { if (err) { // We assume an error here means upnp not enabled - reject(new textsecure.HolePunchingError('Could not get mapping from upnp. Upnp not available?', err)); - } - else { + reject( + new textsecure.HolePunchingError( + 'Could not get mapping from upnp. Upnp not available?', + err + ) + ); + } else { // remove the current private port from the current mapping // to allow reusing that port. - resolve(results - .filter(entry => entry.private.port !== privatePort) - .map(entry => entry.public.port)); + resolve( + results + .filter(entry => entry.private.port !== privatePort) + .map(entry => entry.public.port) + ); } }); }); @@ -135,16 +141,17 @@ class LocalLokiServer extends EventEmitter { continue; } const p = new Promise((resolve, reject) => { - this.upnpClient.portMapping({ - public: publicPort, - private: privatePort, - ttl, - }, (err) => { - if (err) - reject(err); - else - resolve(); - }); + this.upnpClient.portMapping( + { + public: publicPort, + private: privatePort, + ttl, + }, + err => { + if (err) reject(err); + else resolve(); + } + ); }); try { // eslint-disable-next-line no-await-in-loop @@ -159,11 +166,17 @@ class LocalLokiServer extends EventEmitter { }, ttl * 1000); return publicPort; } catch (e) { - throw new textsecure.HolePunchingError('Could not punch hole. Disabled upnp?', e); + throw new textsecure.HolePunchingError( + 'Could not punch hole. Disabled upnp?', + e + ); } } const e = new Error(); - throw new textsecure.HolePunchingError(`Could not punch hole: no available port. Public ports: ${portStart}-${portEnd}`, e); + throw new textsecure.HolePunchingError( + `Could not punch hole: no available port. Public ports: ${portStart}-${portEnd}`, + e + ); } // Async wrapper for http server close close() { diff --git a/libloki/test/node/local_loki_server_test.js b/libloki/test/node/local_loki_server_test.js index 5a12c3f71..0367ecf18 100644 --- a/libloki/test/node/local_loki_server_test.js +++ b/libloki/test/node/local_loki_server_test.js @@ -59,7 +59,9 @@ describe('LocalLokiServer', () => { it('should return 404 and a string if invalid enpoint is provided', async () => { try { - await this.axiosClient.post('https://localhost:8000/invalid', { name: 'Test' }); + await this.axiosClient.post('https://localhost:8000/invalid', { + name: 'Test', + }); assert.fail('Got a successful response'); } catch (error) { if (error.response) { @@ -95,7 +97,10 @@ describe('LocalLokiServer', () => { }); try { - await this.axiosClient.post('https://localhost:8001/storage_rpc/v1', messageData); + await this.axiosClient.post( + 'https://localhost:8001/storage_rpc/v1', + messageData + ); } catch (error) { assert.isNotOk(error, 'Error occured'); } diff --git a/libtextsecure/message_receiver.js b/libtextsecure/message_receiver.js index 1c0da9c7b..026ac4032 100644 --- a/libtextsecure/message_receiver.js +++ b/libtextsecure/message_receiver.js @@ -131,8 +131,7 @@ MessageReceiver.prototype.extend({ window.log.warn(e.message); window.log.warn('Abdandoning starting p2p server.'); return; - } - else if (e instanceof textsecure.LokiIpError) { + } else if (e instanceof textsecure.LokiIpError) { window.log.warn( 'Failed to get my loki address to bind server to, will retry in 30 seconds' ); @@ -462,7 +461,7 @@ MessageReceiver.prototype.extend({ if (envelope.source) { return `${envelope.source}.${ envelope.sourceDevice - } ${envelope.timestamp.toNumber()} (${envelope.id})`; + } ${envelope.timestamp.toNumber()} (${envelope.id})`; } return envelope.id; @@ -973,7 +972,7 @@ MessageReceiver.prototype.extend({ const isMe = envelope.source === textsecure.storage.user.getNumber(); const isLeavingGroup = Boolean( message.group && - message.group.type === textsecure.protobuf.GroupContext.Type.QUIT + message.group.type === textsecure.protobuf.GroupContext.Type.QUIT ); if (groupId && isBlocked && !(isMe && isLeavingGroup)) { @@ -1036,7 +1035,7 @@ MessageReceiver.prototype.extend({ const conversation = window.ConversationController.get(envelope.source); const isLeavingGroup = Boolean( message.group && - message.group.type === textsecure.protobuf.GroupContext.Type.QUIT + message.group.type === textsecure.protobuf.GroupContext.Type.QUIT ); const friendRequest = envelope.type === textsecure.protobuf.Envelope.Type.FRIEND_REQUEST; @@ -1424,7 +1423,7 @@ MessageReceiver.prototype.extend({ if (!size || size !== data.byteLength) { throw new Error( `downloadAttachment: Size ${size} did not match downloaded attachment size ${ - data.byteLength + data.byteLength }` ); } diff --git a/preload.js b/preload.js index 68c7eea38..57a25ee21 100644 --- a/preload.js +++ b/preload.js @@ -331,7 +331,7 @@ window.callWorker = (fnName, ...args) => utilWorker.callWorker(fnName, ...args); // Linux seems to periodically let the event loop stop, so this is a global workaround setInterval(() => { - window.nodeSetImmediate(() => { }); + window.nodeSetImmediate(() => {}); }, 1000); const { autoOrientImage } = require('./js/modules/auto_orient_image'); @@ -396,8 +396,8 @@ contextMenu({ shouldShowMenu: (event, params) => Boolean( !params.isEditable && - params.mediaType === 'none' && - (params.linkURL || params.selectionText) + params.mediaType === 'none' && + (params.linkURL || params.selectionText) ), });