Merge pull request #326 from BeaudanBrown/check-ips

Run lint and check for ip or address when removing unreachable nodes
pull/328/head
Beaudan Campbell-Brown 6 years ago committed by GitHub
commit 0435050916
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

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

@ -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);
}

@ -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 {

@ -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() {

@ -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');
}

@ -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
}`
);
}

@ -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)
),
});

Loading…
Cancel
Save