Request capabilities part 2
This commit is contained in:
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,15 +103,44 @@ 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)();
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -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…
x
Reference in New Issue
Block a user