Request capabilities part 2

pull/1/head
yflory 6 years ago
parent 2ba6e40161
commit 60bea6b33b

@ -696,6 +696,9 @@ define([
pad.requestAccess = function (data, cb) { pad.requestAccess = function (data, cb) {
postMessage("REQUEST_PAD_ACCESS", data, cb); postMessage("REQUEST_PAD_ACCESS", data, cb);
}; };
pad.giveAccess = function (data, cb) {
postMessage("GIVE_PAD_ACCESS", data, cb);
};
common.changePadPassword = function (Crypt, href, newPassword, edPublic, cb) { common.changePadPassword = function (Crypt, href, newPassword, edPublic, cb) {
if (!href) { return void cb({ error: 'EINVAL_HREF' }); } if (!href) { return void cb({ error: 'EINVAL_HREF' }); }

@ -79,15 +79,15 @@ define([
return Messages._getKey(key, [msg.content.name || Messages.anonymous, msg.content.title]); return Messages._getKey(key, [msg.content.name || Messages.anonymous, msg.content.title]);
}; };
content.handler = function () { content.handler = function () {
var todo = function () { common.openURL(msg.content.href); }; var todo = function () {
common.openURL(msg.content.href);
defaultDismiss(common, data)();
};
if (!msg.content.password) { return void todo(); } if (!msg.content.password) { return void todo(); }
common.getSframeChannel().query('Q_SESSIONSTORAGE_PUT', { common.getSframeChannel().query('Q_SESSIONSTORAGE_PUT', {
key: 'newPadPassword', key: 'newPadPassword',
value: msg.content.password value: msg.content.password
}, todo); }, todo);
common.mailbox.dismiss(data, function (err) {
if (err) { return void console.error(err); }
});
}; };
if (!content.archived) { if (!content.archived) {
content.dismissHandler = defaultDismiss(common, data); content.dismissHandler = defaultDismiss(common, data);
@ -103,16 +103,45 @@ define([
// Display the notification // Display the notification
content.getFormatText = function () { content.getFormatText = function () {
return 'Edit access request: ' + msg.content.channel + ' - ' + msg.content.user.displayName; return 'Edit access request: ' + msg.content.title + ' - ' + msg.content.user.displayName;
}; }; // XXX
// if not archived, add handlers // if not archived, add handlers
content.handler = function () { content.handler = function () {
UI.confirm("Give edit rights?", function (yes) { UI.confirm("Give edit rights?", function (yes) {
if (!yes) { return; } if (!yes) { return; }
// XXX Command to worker to get the edit href and send it to msg.content.user common.getSframeChannel().event('EV_GIVE_ACCESS', {
channel: msg.content.channel,
user: msg.content.user
});
defaultDismiss(common, data)();
}); });
}; };
if (!content.archived) {
content.dismissHandler = defaultDismiss(common, data);
}
};
handlers['GIVE_PAD_ACCESS'] = function (common, data) {
var content = data.content;
var msg = content.msg;
// Check authenticity
if (msg.author !== msg.content.user.curvePublic) { return; }
if (!msg.content.href) { return; }
// Display the notification
content.getFormatText = function () {
return 'Edit access received: ' + msg.content.title + ' from ' + msg.content.user.displayName;
}; // XXX
// if not archived, add handlers
content.handler = function () {
common.openURL(msg.content.href);
defaultDismiss(common, data)();
};
}; };
return { return {

@ -1260,10 +1260,10 @@ define([
if (i >= 300) { // One minute timeout if (i >= 300) { // One minute timeout
clearInterval(it); clearInterval(it);
} }
i++ i++;
}, 200); }, 200);
return; return;
}; }
var fData = channel.data || {}; var fData = channel.data || {};
if (fData.owners) { if (fData.owners) {
var friends = store.proxy.friends || {}; var friends = store.proxy.friends || {};
@ -1280,9 +1280,7 @@ define([
}); });
}); });
if (owner) { if (owner) {
console.log(owner);
if (data.send) { if (data.send) {
// XXX send the pad title here...? or get it from the recipient's drive
var myData = Messaging.createData(store.proxy); var myData = Messaging.createData(store.proxy);
delete myData.channel; delete myData.channel;
store.mailbox.sendTo('REQUEST_PAD_ACCESS', { store.mailbox.sendTo('REQUEST_PAD_ACCESS', {
@ -1302,6 +1300,40 @@ define([
} }
cb({sent: false}); 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 // GET_FULL_HISTORY from sframe-common-outer
Store.getFullHistory = function (clientId, data, cb) { Store.getFullHistory = function (clientId, data, cb) {

@ -202,9 +202,8 @@ define([
}; };
// Incoming edit rights request: add data before sending it to inner // Incoming edit rights request: add data before sending it to inner
handlers['REQUEST_PAD_ACCESS'] = function (ctx, box, data, hash) { handlers['REQUEST_PAD_ACCESS'] = function (ctx, box, data, cb) {
var msg = data.msg; var msg = data.msg;
var hash = data.hash;
var content = msg.content; var content = msg.content;
if (msg.author !== content.user.curvePublic) { return void cb(true); } if (msg.author !== content.user.curvePublic) { return void cb(true); }
@ -214,9 +213,9 @@ define([
if (!res.length) { return void cb(true); } if (!res.length) { return void cb(true); }
var edPublic = store.proxy.edPublic; var edPublic = ctx.store.proxy.edPublic;
var title; var title;
if (!res.some(functon (obj) { if (!res.some(function (obj) {
if (obj.data && if (obj.data &&
Array.isArray(obj.data.owners) && obj.data.owners.indexOf(edPublic) !== -1 && Array.isArray(obj.data.owners) && obj.data.owners.indexOf(edPublic) !== -1 &&
obj.data.href) { obj.data.href) {
@ -226,9 +225,30 @@ define([
})) { return void cb(true); } })) { return void cb(true); }
content.title = title; 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 { return {
add: function (ctx, box, data, cb) { add: function (ctx, box, data, cb) {
/** /**

@ -79,6 +79,7 @@ define([
GET_HISTORY_RANGE: Store.getHistoryRange, GET_HISTORY_RANGE: Store.getHistoryRange,
IS_NEW_CHANNEL: Store.isNewChannel, IS_NEW_CHANNEL: Store.isNewChannel,
REQUEST_PAD_ACCESS: Store.requestPadAccess, REQUEST_PAD_ACCESS: Store.requestPadAccess,
GIVE_PAD_ACCESS: Store.givePadAccess,
// Drive // Drive
DRIVE_USEROBJECT: Store.userObjectCommand, DRIVE_USEROBJECT: Store.userObjectCommand,
// Settings, // Settings,

@ -941,7 +941,13 @@ define([
sframeChan.event('EV_WORKER_TIMEOUT'); sframeChan.event('EV_WORKER_TIMEOUT');
}); });
sframeChan.on('EV_GIVE_ACCESS', function (data, cb) {
Cryptpad.padRpc.giveAccess(data, cb);
});
sframeChan.on('Q_REQUEST_ACCESS', function (data, cb) { sframeChan.on('Q_REQUEST_ACCESS', function (data, cb) {
if (readOnly && hashes.editHash) {
return void cb({error: 'ALREADYKNOWN'});
}
Cryptpad.padRpc.requestAccess({ Cryptpad.padRpc.requestAccess({
send: data, send: data,
channel: secret.channel channel: secret.channel

@ -589,9 +589,8 @@ MessengerUI, Messages) {
}).hide(); }).hide();
// If we have access to the owner's mailbox, display the button and enable it // If we have access to the owner's mailbox, display the button and enable it
// XXX the data sent to outer is false if we want to check if we can contact the owner // false => check if we can contact the owner
// and it is true if we change to contact it (action) // true ==> send the request
// XXX get pad title here??
Common.getSframeChannel().query('Q_REQUEST_ACCESS', false, function (err, obj) { Common.getSframeChannel().query('Q_REQUEST_ACCESS', false, function (err, obj) {
if (obj && obj.state) { if (obj && obj.state) {
$requestBlock.show().click(function () { $requestBlock.show().click(function () {

@ -44,7 +44,7 @@ define([
], ],
}; };
var notifsAllowedTypes = ["FRIEND_REQUEST", "FRIEND_REQUEST_ACCEPTED", "FRIEND_REQUEST_DECLINED", "SHARE_PAD"]; var notifsAllowedTypes = ["FRIEND_REQUEST", "FRIEND_REQUEST_ACCEPTED", "FRIEND_REQUEST_DECLINED", "SHARE_PAD", "REQUEST_PAD_ACCESS"];
var create = {}; var create = {};

Loading…
Cancel
Save