cryptpad/www/common/outer/mailbox-handlers.js
2019-05-23 15:25:23 +02:00

59 lines
1.9 KiB
JavaScript

define([
'/common/common-messaging.js',
], function (Messaging) {
var handlers = {};
handlers['FRIEND_REQUEST'] = function (ctx, data, cb) {
if (data.msg.author === data.msg.content.curvePublic &&
Messaging.getFriend(ctx.store.proxy, data.msg.author)) {
Messaging.acceptFriendRequest(ctx.store, data.msg.content, function (obj) {
if (obj && obj.error) { return void cb(); }
cb(true);
});
return;
}
cb();
};
handlers['DECLINE_FRIEND_REQUEST'] = function (ctx, box, data, cb) {
// Our friend request was declined.
if (!ctx.store.proxy.friends_pending[data.msg.author]) { return void cb(true); }
delete ctx.store.proxy.friends_pending[data.msg.author];
ctx.updateMetadata();
cb();
};
handlers['ACCEPT_FRIEND_REQUEST'] = function (ctx, box, data, cb) {
// Our friend request was accepted.
// Make sure we really sent it
if (!ctx.store.proxy.friends_pending[data.msg.author]) { return void cb(); }
// And add the friend
Messaging.addToFriendList({
proxy: ctx.store.proxy,
realtime: ctx.store.realtime,
pinPads: ctx.pinPads
}, data.msg.content, function (err) {
if (err) { console.error(err); }
delete ctx.store.proxy.friends_pending[data.msg.author];
if (ctx.store.messenger) {
ctx.store.messenger.onFriendAdded(data.msg.content);
}
ctx.updateMetadata();
});
cb();
};
return function (ctx, box, data, cb) {
var type = data.msg.type;
if (handlers[type]) {
try {
handlers[type](ctx, box, data, cb);
} catch (e) {
cb();
}
} else {
cb();
}
};
});