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(
.filter(entry => entry.private.port !== privatePort) results
.map(entry => entry.public.port)); .filter(entry => entry.private.port !== privatePort)
.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, {
private: privatePort, public: publicPort,
ttl, private: privatePort,
}, (err) => { ttl,
if (err) },
reject(err); err => {
else if (err) reject(err);
resolve(); else 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'
); );
@ -462,7 +461,7 @@ MessageReceiver.prototype.extend({
if (envelope.source) { if (envelope.source) {
return `${envelope.source}.${ return `${envelope.source}.${
envelope.sourceDevice envelope.sourceDevice
} ${envelope.timestamp.toNumber()} (${envelope.id})`; } ${envelope.timestamp.toNumber()} (${envelope.id})`;
} }
return envelope.id; return envelope.id;
@ -973,7 +972,7 @@ MessageReceiver.prototype.extend({
const isMe = envelope.source === textsecure.storage.user.getNumber(); const isMe = envelope.source === textsecure.storage.user.getNumber();
const isLeavingGroup = Boolean( const isLeavingGroup = Boolean(
message.group && message.group &&
message.group.type === textsecure.protobuf.GroupContext.Type.QUIT message.group.type === textsecure.protobuf.GroupContext.Type.QUIT
); );
if (groupId && isBlocked && !(isMe && isLeavingGroup)) { if (groupId && isBlocked && !(isMe && isLeavingGroup)) {
@ -1036,7 +1035,7 @@ MessageReceiver.prototype.extend({
const conversation = window.ConversationController.get(envelope.source); const conversation = window.ConversationController.get(envelope.source);
const isLeavingGroup = Boolean( const isLeavingGroup = Boolean(
message.group && message.group &&
message.group.type === textsecure.protobuf.GroupContext.Type.QUIT message.group.type === textsecure.protobuf.GroupContext.Type.QUIT
); );
const friendRequest = const friendRequest =
envelope.type === textsecure.protobuf.Envelope.Type.FRIEND_REQUEST; envelope.type === textsecure.protobuf.Envelope.Type.FRIEND_REQUEST;
@ -1424,7 +1423,7 @@ MessageReceiver.prototype.extend({
if (!size || size !== data.byteLength) { if (!size || size !== data.byteLength) {
throw new Error( throw new Error(
`downloadAttachment: Size ${size} did not match downloaded attachment size ${ `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 // Linux seems to periodically let the event loop stop, so this is a global workaround
setInterval(() => { setInterval(() => {
window.nodeSetImmediate(() => { }); window.nodeSetImmediate(() => {});
}, 1000); }, 1000);
const { autoOrientImage } = require('./js/modules/auto_orient_image'); const { autoOrientImage } = require('./js/modules/auto_orient_image');
@ -396,8 +396,8 @@ contextMenu({
shouldShowMenu: (event, params) => shouldShowMenu: (event, params) =>
Boolean( Boolean(
!params.isEditable && !params.isEditable &&
params.mediaType === 'none' && params.mediaType === 'none' &&
(params.linkURL || params.selectionText) (params.linkURL || params.selectionText)
), ),
}); });

Loading…
Cancel
Save