Run lint and check for ip or address when removing unreachable nodes

pull/326/head
Beaudan 6 years ago
parent 5aedd618c0
commit df2c4af67c

@ -322,7 +322,6 @@
}, },
shutdown: async () => { shutdown: async () => {
await window.localLokiServer.close(); await window.localLokiServer.close();
// Stop background processing // Stop background processing

@ -94,7 +94,10 @@ class LokiSnodeAPI {
storage_port: true, 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 { try {
const result = await rpc( const result = await rpc(
`http://${seedNode.ip}`, `http://${seedNode.ip}`,
@ -114,7 +117,9 @@ class LokiSnodeAPI {
})); }));
} catch (e) { } catch (e) {
if (seedNodes.length === 0) { 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); this.initialiseRandomPool(seedNodes);
} }
@ -123,7 +128,9 @@ class LokiSnodeAPI {
async unreachableNode(pubKey, nodeUrl) { async unreachableNode(pubKey, nodeUrl) {
const conversation = ConversationController.get(pubKey); const conversation = ConversationController.get(pubKey);
const swarmNodes = [...conversation.get('swarmNodes')]; 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); await conversation.updateSwarmNodes(filteredNodes);
} }

@ -31,8 +31,7 @@
if (!window.localLokiServer.isListening()) { if (!window.localLokiServer.isListening()) {
// Skip if server is not running AND we're not trying to ping a contact // Skip if server is not running AND we're not trying to ping a contact
if (!isPing) if (!isPing) return;
return;
type = textsecure.protobuf.LokiAddressMessage.Type.HOST_UNREACHABLE; type = textsecure.protobuf.LokiAddressMessage.Type.HOST_UNREACHABLE;
} else { } else {

@ -88,7 +88,7 @@ class LocalLokiServer extends EventEmitter {
// Start a listening on new server // Start a listening on new server
return new Promise((res, rej) => { return new Promise((res, rej) => {
this.server.listen(port, ip, async (err) => { this.server.listen(port, ip, async err => {
if (err) { if (err) {
rej(err); rej(err);
} else if (this.upnpClient) { } else if (this.upnpClient) {
@ -117,14 +117,20 @@ class LocalLokiServer extends EventEmitter {
this.upnpClient.getMappings({ local: true }, (err, results) => { this.upnpClient.getMappings({ local: true }, (err, results) => {
if (err) { if (err) {
// We assume an error here means upnp not enabled // We assume an error here means upnp not enabled
reject(new textsecure.HolePunchingError('Could not get mapping from upnp. Upnp not available?', err)); reject(
} new textsecure.HolePunchingError(
else { 'Could not get mapping from upnp. Upnp not available?',
err
)
);
} else {
// remove the current private port from the current mapping // remove the current private port from the current mapping
// to allow reusing that port. // to allow reusing that port.
resolve(results resolve(
results
.filter(entry => entry.private.port !== privatePort) .filter(entry => entry.private.port !== privatePort)
.map(entry => entry.public.port)); .map(entry => entry.public.port)
);
} }
}); });
}); });
@ -135,16 +141,17 @@ class LocalLokiServer extends EventEmitter {
continue; continue;
} }
const p = new Promise((resolve, reject) => { const p = new Promise((resolve, reject) => {
this.upnpClient.portMapping({ this.upnpClient.portMapping(
{
public: publicPort, public: publicPort,
private: privatePort, private: privatePort,
ttl, ttl,
}, (err) => { },
if (err) err => {
reject(err); if (err) reject(err);
else else resolve();
resolve(); }
}); );
}); });
try { try {
// eslint-disable-next-line no-await-in-loop // eslint-disable-next-line no-await-in-loop
@ -159,11 +166,17 @@ class LocalLokiServer extends EventEmitter {
}, ttl * 1000); }, ttl * 1000);
return publicPort; return publicPort;
} catch (e) { } 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(); 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 // Async wrapper for http server close
close() { close() {

@ -59,7 +59,9 @@ describe('LocalLokiServer', () => {
it('should return 404 and a string if invalid enpoint is provided', async () => { it('should return 404 and a string if invalid enpoint is provided', async () => {
try { 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'); assert.fail('Got a successful response');
} catch (error) { } catch (error) {
if (error.response) { if (error.response) {
@ -95,7 +97,10 @@ describe('LocalLokiServer', () => {
}); });
try { 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) { } catch (error) {
assert.isNotOk(error, 'Error occured'); assert.isNotOk(error, 'Error occured');
} }

@ -131,8 +131,7 @@ MessageReceiver.prototype.extend({
window.log.warn(e.message); window.log.warn(e.message);
window.log.warn('Abdandoning starting p2p server.'); window.log.warn('Abdandoning starting p2p server.');
return; return;
} } else if (e instanceof textsecure.LokiIpError) {
else if (e instanceof textsecure.LokiIpError) {
window.log.warn( window.log.warn(
'Failed to get my loki address to bind server to, will retry in 30 seconds' 'Failed to get my loki address to bind server to, will retry in 30 seconds'
); );

Loading…
Cancel
Save