cryptpad/www/common/onlyoffice/main.js

151 lines
6.5 KiB
JavaScript
Raw Normal View History

// Load #1, load as little as possible because we are in a race to get the loading screen up.
define([
'/bower_components/nthen/index.js',
'/api/config',
'/common/dom-ready.js',
2020-09-24 14:04:44 +00:00
'/common/common-hash.js',
'/common/sframe-common-outer.js'
2020-11-04 10:22:31 +00:00
], function (nThen, ApiConfig, DomReady, Hash, SFCommonO) {
// Loaded in load #2
2020-09-24 14:04:44 +00:00
var hash, href, version;
nThen(function (waitFor) {
DomReady.onReady(waitFor());
}).nThen(function (waitFor) {
2020-12-08 09:43:47 +00:00
var obj = SFCommonO.initIframe(waitFor, true);
2020-11-04 10:22:31 +00:00
href = obj.href;
hash = obj.hash;
2020-09-24 14:04:44 +00:00
var parsed = Hash.parsePadUrl(href);
2020-09-29 15:48:37 +00:00
if (parsed && parsed.hashData) {
var opts = parsed.getOptions();
version = opts.versionHash;
}
}).nThen(function (/*waitFor*/) {
var addData = function (obj) {
obj.ooType = window.location.pathname.replace(/^\//, '').replace(/\/$/, '');
2020-09-24 14:04:44 +00:00
obj.ooVersionHash = version;
2020-10-30 14:13:22 +00:00
obj.ooForceVersion = localStorage.CryptPad_ooVersion || "";
};
2018-03-28 17:35:49 +00:00
var addRpc = function (sframeChan, Cryptpad, Utils) {
sframeChan.on('Q_OO_SAVE', function (data, cb) {
var chanId = Utils.Hash.hrefToHexChannelId(data.url);
2018-03-29 08:54:40 +00:00
Cryptpad.getPadAttribute('lastVersion', function (err, data) {
if (data) {
var oldChanId = Utils.Hash.hrefToHexChannelId(data);
if (oldChanId !== chanId) { Cryptpad.unpinPads([oldChanId], function () {}); }
}
});
2018-03-28 17:35:49 +00:00
Cryptpad.pinPads([chanId], function (e) {
if (e) { return void cb(e); }
Cryptpad.setPadAttribute('lastVersion', data.url, cb);
});
Cryptpad.setPadAttribute('lastCpHash', data.hash, cb);
2018-03-28 17:35:49 +00:00
});
sframeChan.on('Q_OO_OPENCHANNEL', function (data, cb) {
Cryptpad.getPadAttribute('rtChannel', function (err, res) {
// If already stored, don't pin it again
if (res && res === data.channel) { return; }
Cryptpad.pinPads([data.channel], function () {
Cryptpad.setPadAttribute('rtChannel', data.channel, function () {});
});
});
var owners, expire;
nThen(function (waitFor) {
if (Utils.rtConfig) {
2020-01-21 10:01:07 +00:00
owners = Utils.Util.find(Utils.rtConfig, ['metadata', 'owners']);
expire = Utils.Util.find(Utils.rtConfig, ['metadata', 'expire']);
return;
}
Cryptpad.getPadAttribute('owners', waitFor(function (err, res) {
owners = res;
}));
Cryptpad.getPadAttribute('expire', waitFor(function (err, res) {
expire = res;
}));
}).nThen(function () {
Cryptpad.onlyoffice.execCommand({
cmd: 'OPEN_CHANNEL',
data: {
owners: owners,
expire: expire,
channel: data.channel,
lastCpHash: data.lastCpHash,
padChan: Utils.secret.channel,
validateKey: Utils.secret.keys.validateKey
}
}, cb);
});
});
sframeChan.on('EV_OO_PIN_IMAGES', function (list) {
Cryptpad.getPadAttribute('ooImages', function (err, res) {
if (err) { return; }
if (!res || !Array.isArray(res)) { res = []; }
var toPin = [];
var toUnpin = [];
res.forEach(function (id) {
if (list.indexOf(id) === -1) {
toUnpin.push(id);
}
});
list.forEach(function (id) {
if (res.indexOf(id) === -1) {
toPin.push(id);
}
});
toPin = Utils.Util.deduplicateString(toPin);
toUnpin = Utils.Util.deduplicateString(toUnpin);
Cryptpad.pinPads(toPin, function () {});
Cryptpad.unpinPads(toUnpin, function () {});
if (!toPin.length && !toUnpin.length) { return; }
Cryptpad.setPadAttribute('ooImages', list, function (err) {
if (err) { console.error(err); }
});
});
});
sframeChan.on('Q_OO_COMMAND', function (obj, cb) {
2019-01-15 16:54:43 +00:00
if (obj.cmd === 'SEND_MESSAGE') {
obj.data.msg = Utils.crypto.encrypt(JSON.stringify(obj.data.msg));
var hash = obj.data.msg.slice(0,64);
var _cb = cb;
cb = function () {
_cb(hash);
};
}
Cryptpad.onlyoffice.execCommand(obj, cb);
});
2020-10-05 14:45:37 +00:00
sframeChan.on('EV_OO_OPENVERSION', function (obj) {
2020-10-01 11:54:30 +00:00
if (!obj || !obj.hash) { return; }
var parsed = Hash.parsePadUrl(window.location.href);
var opts = parsed.getOptions();
opts.versionHash = obj.hash;
window.open(parsed.getUrl(opts));
});
Cryptpad.onlyoffice.onEvent.reg(function (obj) {
if (obj.ev === 'MESSAGE' && !/^cp\|/.test(obj.data)) {
2019-01-15 16:54:43 +00:00
try {
2019-06-24 16:16:32 +00:00
var validateKey = obj.data.validateKey || true;
var skipCheck = validateKey === true;
var msg = obj.data.msg;
obj.data = {
2019-06-24 16:16:32 +00:00
msg: JSON.parse(Utils.crypto.decrypt(msg, validateKey, skipCheck)),
hash: msg.slice(0,64)
};
2019-01-15 16:54:43 +00:00
} catch (e) {
console.error(e);
}
}
sframeChan.event('EV_OO_EVENT', obj);
});
2018-03-28 17:35:49 +00:00
};
SFCommonO.start({
2020-01-27 11:18:25 +00:00
hash: hash,
href: href,
type: 'oo',
useCreationScreen: true,
2018-03-28 17:35:49 +00:00
addData: addData,
2019-01-24 15:43:05 +00:00
addRpc: addRpc,
messaging: true
});
});
});