implement cryptput
parent
84d5e4b35d
commit
29d406b7a9
@ -1,59 +1,87 @@
|
||||
define([
|
||||
'/customize/messages.js?app=read',
|
||||
'/customize/messages.js?app=cryptget',
|
||||
'/bower_components/chainpad-crypto/crypto.js',
|
||||
'/bower_components/chainpad-netflux/chainpad-netflux.js',
|
||||
'/common/cryptpad-common.js',
|
||||
], function (Messages, Crypto, Realtime, Cryptpad) {
|
||||
var Crypt = {};
|
||||
'/bower_components/textpatcher/TextPatcher.js',
|
||||
'/bower_components/jquery/dist/jquery.min.js',
|
||||
], function (Messages, Crypto, Realtime, Cryptpad, TextPatcher) {
|
||||
var noop = function () {};
|
||||
var finish = function (S, err, doc) {
|
||||
if (S.done) { return; }
|
||||
S.cb(err, doc);
|
||||
S.done = true;
|
||||
|
||||
var finish = function (Session, err, doc) {
|
||||
if (Session.done) { return; }
|
||||
Session.cb(err, doc);
|
||||
Session.done = true;
|
||||
|
||||
var abort = Cryptpad.find(Session,
|
||||
['realtime', 'realtime', 'abort']);
|
||||
if (typeof(abort) === 'function') { abort(); }
|
||||
};
|
||||
|
||||
var get = Crypt.get = function (hash, cb, opt) {
|
||||
if (typeof(cb) !== 'function') {
|
||||
throw new Error('Crypt.get expects a callback');
|
||||
var abort = Cryptpad.find(S, ['realtime', 'realtime', 'abort']);
|
||||
if (typeof(abort) === 'function') {
|
||||
S.realtime.realtime.sync();
|
||||
abort();
|
||||
}
|
||||
};
|
||||
|
||||
var Session = {
|
||||
cb: cb,
|
||||
};
|
||||
opt = opt || {};
|
||||
var secret = Session.secret = Cryptpad.getSecrets(hash);
|
||||
|
||||
var makeConfig = function (hash) {
|
||||
var secret = Cryptpad.getSecrets(hash);
|
||||
if (!secret.keys) { secret.keys = secret.key; } // support old hashses
|
||||
var config = {
|
||||
websocketURL: Cryptpad.getWebsocketURL(),
|
||||
channel: secret.channel,
|
||||
validateKey: secret.keys.validateKey || undefined,
|
||||
crypto: Crypto.createEncryptor(secret.keys),
|
||||
logLevel: 0,
|
||||
};
|
||||
return config;
|
||||
};
|
||||
|
||||
var onError = config.onError = function () {
|
||||
finish(Session, Messages.websocketError);
|
||||
};
|
||||
var onAbort = config.onAbort = function () {
|
||||
finish(Session, Messages.disconnectAlert);
|
||||
};
|
||||
var isObject = function (o) {
|
||||
return typeof(o) === 'object';
|
||||
};
|
||||
|
||||
var overwrite = function (a, b) {
|
||||
if (!(isObject(a) && isObject(b))) { return; }
|
||||
Object.keys(b).forEach(function (k) { a[k] = b[k]; });
|
||||
};
|
||||
|
||||
var get = function (hash, cb, opt) {
|
||||
if (typeof(cb) !== 'function') {
|
||||
throw new Error('Cryptget expects a callback');
|
||||
}
|
||||
var Session = { cb: cb, };
|
||||
var config = makeConfig(hash);
|
||||
|
||||
var onReady = config.onReady = function (info) {
|
||||
var realtime = Session.realtime = info.realtime;
|
||||
finish(Session, void 0, realtime.getUserDoc());
|
||||
var rt = Session.session = info.realtime;
|
||||
finish(Session, void 0, rt.getUserDoc());
|
||||
};
|
||||
overwrite(config, opt);
|
||||
|
||||
var realtime = Session.realtime = Realtime.start(config);
|
||||
};
|
||||
|
||||
var onConnectionChange = config.onConnectionChange = function (info) {
|
||||
if (info.state) { return; }
|
||||
finish(Session, Messages.disconnectAlert);
|
||||
var put = function (hash, doc, cb, opt) {
|
||||
if (typeof(cb) !== 'function') {
|
||||
throw new Error('Cryptput expects a callback');
|
||||
}
|
||||
|
||||
var config = makeConfig(hash);
|
||||
var Session = { cb: cb, };
|
||||
config.onReady = function (info) {
|
||||
var realtime = Session.session = info.realtime;
|
||||
|
||||
TextPatcher.create({
|
||||
realtime: realtime,
|
||||
})(doc);
|
||||
realtime.sync();
|
||||
realtime.abort();
|
||||
|
||||
finish(Session, void 0);
|
||||
};
|
||||
Object.keys(opt).forEach(function (k) { config[k] = opt[k]; });
|
||||
overwrite(config, opt);
|
||||
|
||||
return (Session.realtime = Realtime.start(config));
|
||||
var realtime = Session.session = Realtime.start(config);
|
||||
};
|
||||
|
||||
return Crypt;
|
||||
return {
|
||||
get: get,
|
||||
put: put,
|
||||
};
|
||||
});
|
||||
|
Loading…
Reference in New Issue