Fix messenger issues

pull/1/head
yflory 5 years ago
parent f27451e51c
commit 4128c34b93

@ -191,7 +191,7 @@ define([
return void console.error(e, msg);
}
// Decrypt and parse its content... // XXX decryption outer
// Decrypt and parse its content...
var decryptedMsg = channel.decrypt(parsed0.msg);
if (!decryptedMsg) { return void console.error("Failed to decrypt message"); }
var parsed = Util.tryParse(decryptedMsg);
@ -280,6 +280,8 @@ define([
removeFromFriendList(ctx, curvePublic, function () {
channel.wc.leave(Types.unfriend);
var network = ctx.store.network;
if (channel.onReconnect) { network.off('reconnect', channel.onReconnect); }
delete ctx.channels[channel.id];
ctx.emit('UNFRIEND', {
curvePublic: curvePublic,
@ -399,6 +401,20 @@ define([
pushMsg(ctx, channel, msg);
};
var onFriendRemoved = function (ctx, curvePublic, chanId) {
var channel = ctx.channels[chanId];
if (!channel) { return; }
if (channel.wc) {
channel.wc.leave(Types.unfriend);
}
var network = ctx.store.network;
if (channel.onReconnect) { network.off('reconnect', channel.onReconnect); }
delete ctx.channels[channel.id];
ctx.emit('UNFRIEND', {
curvePublic: curvePublic,
fromMe: true
}, ctx.friendsClients);
};
var removeFriend = function (ctx, curvePublic, _cb) {
var cb = Util.once(_cb);
if (typeof(cb) !== 'function') { return void console.error('NO_CALLBACK'); }
@ -432,7 +448,7 @@ define([
var cryptMsg = channel.encrypt(msgStr);
channel.wc.bcast(cryptMsg).then(function () {}, function (err) {
if (err) { return void cb({error:err}); }
// XXX call onFriendRemoved here (leave the channel and emit notification to inner)
onFriendRemoved(ctx, curvePublic, data.channel);
removeFromFriendList(ctx, curvePublic, function () {
cb();
});
@ -448,7 +464,7 @@ define([
var hk = network.historyKeeper;
var keys = data.keys;
var encryptor = data.encryptor || Curve.createEncryptor(keys); // XXX encryption
var encryptor = data.encryptor || Curve.createEncryptor(keys);
var channel = {
id: data.channel,
isFriendChat: data.isFriendChat,
@ -527,14 +543,15 @@ define([
network.join(data.channel).then(onOpen, function (err) {
console.error(err);
});
network.on('reconnect', function () {
channel.onReconnect = function () {
if (channel && channel.stopped) { return; }
if (!ctx.channels[data.channel]) { return; }
network.join(data.channel).then(onOpen, function (err) {
console.error(err);
});
});
};
network.on('reconnect', channel.onReconnect);
};
var sendMessage = function (ctx, id, payload, cb) {
@ -556,7 +573,6 @@ define([
Messages.anonymous + '#' + proxy.uid.slice(0,5);
msg.push(name);
}
// XXX encryption
var msgStr = JSON.stringify(msg);
var cryptMsg = channel.encrypt(msgStr);
@ -605,7 +621,6 @@ define([
});
}
// XXX encryption
var proxy = ctx.store.proxy;
var keys = Curve.deriveKeys(friend.curvePublic, proxy.curvePrivate);
var data = {
@ -837,6 +852,8 @@ define([
if (clients.length === 0) {
if (channel.wc) { channel.wc.leave(); }
var network = ctx.store.network;
if (channel.onReconnect) { network.off('reconnect', channel.onReconnect); }
channel.stopped = true;
delete ctx.channels[id];
return true;
@ -866,7 +883,7 @@ define([
emit: emit,
friendsClients: [],
channels: {},
validateKeys: {} // XXX encryption
validateKeys: {}
};
@ -907,16 +924,7 @@ define([
});
};
messenger.onFriendRemoved = function (curvePublic, chanId) {
var channel = ctx.channels[chanId];
if (!channel) { return; }
if (channel.wc) {
channel.wc.leave(Types.unfriend);
}
delete ctx.channels[channel.id];
emit('UNFRIEND', {
curvePublic: curvePublic,
fromMe: true
}, ctx.friendsClients);
onFriendRemoved(ctx, curvePublic, chanId);
};
messenger.storeValidateKey = function (chan, key) {
@ -929,6 +937,8 @@ define([
var channel = ctx.channels[chatChan];
if (channel.padChan !== padChan) { return; }
if (channel.wc) { channel.wc.leave(); }
var network = ctx.store.network;
if (channel.onReconnect) { network.off('reconnect', channel.onReconnect); }
channel.stopped = true;
delete ctx.channels[chatChan];
return true;

Loading…
Cancel
Save