Add embed options in the secure pad hashes
This commit is contained in:
@@ -68,7 +68,9 @@ Version 1
|
||||
parsed.mode = hashArr[2];
|
||||
parsed.channel = hashArr[3];
|
||||
parsed.key = hashArr[4].replace(/-/g, '/');
|
||||
parsed.present = typeof(hashArr[5]) === "string" && hashArr[5] === 'present';
|
||||
var options = hashArr.slice(5);
|
||||
parsed.present = options.indexOf('present') !== -1;
|
||||
parsed.embed = options.indexOf('embed') !== -1;
|
||||
return parsed;
|
||||
}
|
||||
return parsed;
|
||||
@@ -115,6 +117,27 @@ Version 1
|
||||
|
||||
var idx;
|
||||
|
||||
ret.getUrl = function (options) {
|
||||
options = options || {};
|
||||
var url = '/';
|
||||
if (!ret.type) { return url; }
|
||||
url += ret.type + '/';
|
||||
if (!ret.hashData) { return url; }
|
||||
if (ret.hashData.type !== 'pad') { return url + '/#' + ret.hash; }
|
||||
if (ret.hashData.version !== 1) { throw new Error("Only v1 hashes are managed here."); }
|
||||
url += '#/' + ret.hashData.version +
|
||||
'/' + ret.hashData.mode +
|
||||
'/' + ret.hashData.channel.replace(/\//g, '-') +
|
||||
'/' + ret.hashData.key.replace(/\//g, '-') +'/';
|
||||
if (options.embed) {
|
||||
url += 'embed/';
|
||||
}
|
||||
if (options.present) {
|
||||
url += 'present/';
|
||||
}
|
||||
return url;
|
||||
};
|
||||
|
||||
if (!/^https*:\/\//.test(href)) {
|
||||
idx = href.indexOf('/#');
|
||||
ret.type = href.slice(1, idx);
|
||||
|
||||
@@ -674,7 +674,8 @@ define([
|
||||
var href = typeof padHref === "string" ? padHref : window.location.href;
|
||||
var parsed = parsePadUrl(href);
|
||||
if (!parsed.hash) { return; }
|
||||
href = getRelativeHref(href);
|
||||
href = parsed.getUrl({present: parsed.present});
|
||||
//href = getRelativeHref(href);
|
||||
// getRecentPads return the array from the drive, not a copy
|
||||
// We don't have to call "set..." at the end, everything is stored with listmap
|
||||
getRecentPads(function (err, recent) {
|
||||
|
||||
@@ -82,7 +82,9 @@ define([
|
||||
isTemplate: Cryptpad.isTemplate(window.location.href),
|
||||
feedbackAllowed: Cryptpad.isFeedbackAllowed(),
|
||||
friends: proxy.friends || {},
|
||||
settings: proxy.settings || {}
|
||||
settings: proxy.settings || {},
|
||||
isPresent: parsed.hashData && parsed.hashData.present,
|
||||
isEmbed: parsed.hashData && parsed.hashData.embed,
|
||||
}
|
||||
});
|
||||
});
|
||||
@@ -290,6 +292,13 @@ define([
|
||||
readOnly: readOnly,
|
||||
crypto: Crypto.createEncryptor(secret.keys),
|
||||
onConnect: function (wc) {
|
||||
if (window.location.hash && window.location.hash !== '#') {
|
||||
window.location = parsed.getUrl({
|
||||
present: parsed.hashData.present,
|
||||
embed: parsed.hashData.embed
|
||||
});
|
||||
return;
|
||||
}
|
||||
if (readOnly) { return; }
|
||||
Cryptpad.replaceHash(Cryptpad.getEditHashFromKeys(wc.id, secret.keys));
|
||||
}
|
||||
|
||||
@@ -50,6 +50,12 @@ define([
|
||||
var createRealtimeToolbar = function (config) {
|
||||
if (!config.$container) { return; }
|
||||
var $container = config.$container;
|
||||
|
||||
var isEmbed = Bar.isEmbed = config.metadataMgr.getPrivateData().isEmbed;
|
||||
if (isEmbed) {
|
||||
$container.hide();
|
||||
}
|
||||
|
||||
var $toolbar = $('<div>', {
|
||||
'class': TOOLBAR_CLS,
|
||||
id: uid(),
|
||||
@@ -304,6 +310,7 @@ define([
|
||||
});
|
||||
};
|
||||
var show = function () {
|
||||
if (Bar.isEmbed) { $content.hide(); return; }
|
||||
$content.show();
|
||||
if (mobile) {
|
||||
$ck.hide();
|
||||
@@ -440,7 +447,7 @@ define([
|
||||
};
|
||||
|
||||
var createFileShare = function (toolbar) {
|
||||
throw new Error('TODO: Update createFileShare to add "embed" and work in secure iframes');
|
||||
if (true) { throw new Error('TODO: Update createFileShare to add "embed" and work in secure iframes'); }
|
||||
if (!window.location.hash) {
|
||||
throw new Error("Unable to display the share button: hash required in the URL");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user