Merge branch 'request' into staging
This commit is contained in:
@@ -1090,6 +1090,7 @@ define([
|
||||
var channels = Store.channels = store.channels = {};
|
||||
|
||||
Store.joinPad = function (clientId, data) {
|
||||
console.log('joining', data.channel);
|
||||
var isNew = typeof channels[data.channel] === "undefined";
|
||||
var channel = channels[data.channel] = channels[data.channel] || {
|
||||
queue: [],
|
||||
@@ -1243,6 +1244,97 @@ define([
|
||||
channel.sendMessage(msg, clientId, cb);
|
||||
};
|
||||
|
||||
Store.requestPadAccess = function (clientId, data, cb) {
|
||||
// Get owners from pad metadata
|
||||
// Try to find an owner in our friend list
|
||||
// Mailbox...
|
||||
var channel = channels[data.channel];
|
||||
if (!data.send && channel && (!channel.data || !channel.data.channel)) {
|
||||
var i = 0;
|
||||
var it = setInterval(function () {
|
||||
if (channel.data && channel.data.channel) {
|
||||
clearInterval(it);
|
||||
Store.requestPadAccess(clientId, data, cb);
|
||||
return;
|
||||
}
|
||||
if (i >= 300) { // One minute timeout
|
||||
clearInterval(it);
|
||||
}
|
||||
i++;
|
||||
}, 200);
|
||||
return;
|
||||
}
|
||||
var fData = channel.data || {};
|
||||
if (fData.owners) {
|
||||
var friends = store.proxy.friends || {};
|
||||
if (Object.keys(friends).length > 1) {
|
||||
var owner;
|
||||
fData.owners.some(function (edPublic) {
|
||||
return Object.keys(friends).some(function (curve) {
|
||||
if (curve === "me") { return; }
|
||||
if (edPublic === friends[curve].edPublic &&
|
||||
friends[curve].notifications) {
|
||||
owner = friends[curve];
|
||||
return true;
|
||||
}
|
||||
});
|
||||
});
|
||||
if (owner) {
|
||||
if (data.send) {
|
||||
var myData = Messaging.createData(store.proxy);
|
||||
delete myData.channel;
|
||||
store.mailbox.sendTo('REQUEST_PAD_ACCESS', {
|
||||
channel: data.channel,
|
||||
user: myData
|
||||
}, {
|
||||
channel: owner.notifications,
|
||||
curvePublic: owner.curvePublic
|
||||
}, function () {
|
||||
cb({state: true});
|
||||
});
|
||||
return;
|
||||
}
|
||||
return void cb({state: true});
|
||||
}
|
||||
}
|
||||
}
|
||||
cb({sent: false});
|
||||
};
|
||||
Store.givePadAccess = function (clientId, data, cb) {
|
||||
var edPublic = store.proxy.edPublic;
|
||||
var channel = data.channel;
|
||||
var res = store.manager.findChannel(channel);
|
||||
|
||||
if (!data.user || !data.user.notifications || !data.user.curvePublic) {
|
||||
return void cb({error: 'EINVAL'});
|
||||
}
|
||||
|
||||
var href, title;
|
||||
|
||||
if (!res.some(function (obj) {
|
||||
if (obj.data &&
|
||||
Array.isArray(obj.data.owners) && obj.data.owners.indexOf(edPublic) !== -1 &&
|
||||
obj.data.href) {
|
||||
href = obj.data.href;
|
||||
title = obj.data.title;
|
||||
return true;
|
||||
}
|
||||
})) { return void cb({error: 'ENOTFOUND'}); }
|
||||
|
||||
var myData = Messaging.createData(store.proxy);
|
||||
delete myData.channel;
|
||||
store.mailbox.sendTo("GIVE_PAD_ACCESS", {
|
||||
channel: channel,
|
||||
href: href,
|
||||
title: title,
|
||||
user: myData
|
||||
}, {
|
||||
channel: data.user.notifications,
|
||||
curvePublic: data.user.curvePublic
|
||||
});
|
||||
cb();
|
||||
};
|
||||
|
||||
// GET_FULL_HISTORY from sframe-common-outer
|
||||
Store.getFullHistory = function (clientId, data, cb) {
|
||||
var network = store.network;
|
||||
|
||||
@@ -209,6 +209,54 @@ define([
|
||||
cb();
|
||||
};
|
||||
|
||||
// Incoming edit rights request: add data before sending it to inner
|
||||
handlers['REQUEST_PAD_ACCESS'] = function (ctx, box, data, cb) {
|
||||
var msg = data.msg;
|
||||
var content = msg.content;
|
||||
|
||||
if (msg.author !== content.user.curvePublic) { return void cb(true); }
|
||||
|
||||
var channel = content.channel;
|
||||
var res = ctx.store.manager.findChannel(channel);
|
||||
|
||||
if (!res.length) { return void cb(true); }
|
||||
|
||||
var edPublic = ctx.store.proxy.edPublic;
|
||||
var title;
|
||||
if (!res.some(function (obj) {
|
||||
if (obj.data &&
|
||||
Array.isArray(obj.data.owners) && obj.data.owners.indexOf(edPublic) !== -1 &&
|
||||
obj.data.href) {
|
||||
title = obj.data.filename || obj.data.title;
|
||||
return true;
|
||||
}
|
||||
})) { return void cb(true); }
|
||||
|
||||
content.title = title;
|
||||
cb(false);
|
||||
};
|
||||
|
||||
handlers['GIVE_PAD_ACCESS'] = function (ctx, box, data, cb) {
|
||||
var msg = data.msg;
|
||||
var content = msg.content;
|
||||
|
||||
if (msg.author !== content.user.curvePublic) { return void cb(true); }
|
||||
|
||||
var channel = content.channel;
|
||||
var res = ctx.store.manager.findChannel(channel);
|
||||
|
||||
var title;
|
||||
res.forEach(function (obj) {
|
||||
if (obj.data && !obj.data.href) {
|
||||
if (!title) { title = obj.data.filename || obj.data.title; }
|
||||
obj.data.href = content.href;
|
||||
}
|
||||
});
|
||||
|
||||
content.title = title || content.title;
|
||||
cb(false);
|
||||
};
|
||||
|
||||
return {
|
||||
add: function (ctx, box, data, cb) {
|
||||
/**
|
||||
|
||||
@@ -339,9 +339,9 @@ proxy.mailboxes = {
|
||||
|
||||
var txid = parsed[1];
|
||||
var req = ctx.req[txid];
|
||||
if (!req) { return; }
|
||||
var type = parsed[0];
|
||||
var _msg = parsed[2];
|
||||
if (!req) { return; }
|
||||
var box = req.box;
|
||||
|
||||
if (type === 'HISTORY_RANGE') {
|
||||
|
||||
@@ -78,6 +78,8 @@ define([
|
||||
GET_FULL_HISTORY: Store.getFullHistory,
|
||||
GET_HISTORY_RANGE: Store.getHistoryRange,
|
||||
IS_NEW_CHANNEL: Store.isNewChannel,
|
||||
REQUEST_PAD_ACCESS: Store.requestPadAccess,
|
||||
GIVE_PAD_ACCESS: Store.givePadAccess,
|
||||
// Drive
|
||||
DRIVE_USEROBJECT: Store.userObjectCommand,
|
||||
// Settings,
|
||||
|
||||
Reference in New Issue
Block a user