Fix onlyoffice password change

pull/1/head
yflory 5 years ago
parent c414bf1d5c
commit 851437a05b

@ -1285,27 +1285,35 @@ define([
var newCrypto = Crypto.createEncryptor(newSecret.keys); var newCrypto = Crypto.createEncryptor(newSecret.keys);
var oldCrypto = Crypto.createEncryptor(oldSecret.keys); var oldCrypto = Crypto.createEncryptor(oldSecret.keys);
var cps = Util.find(cryptgetVal, ['content', 'hashes']); var cps = Util.find(cryptgetVal, ['content', 'hashes']);
var lastCp = cps.length ? cps[cps.length - 1] : {}; var l = Object.keys(cps).length;
var lastCp = l ? cps[l] : {};
cryptgetVal.content.hashes = {};
common.getHistory({ common.getHistory({
channel: oldRtChannel, channel: oldRtChannel,
lastKnownHash: lastCp.hash lastKnownHash: lastCp.hash
}, waitFor(function (obj) { }, waitFor(function (obj) {
if (obj && obj.error) { if (obj && obj.error) {
waitFor.abort(); waitFor.abort();
return void cb(obj); console.error(obj);
return void cb(obj.error);
} }
var msgs = obj; var msgs = obj;
newHistory = msgs.map(function (str) { newHistory = msgs.map(function (str) {
try { try {
var d = oldCrypto.decrypt(msg, true, true); var d = oldCrypto.decrypt(str, true, true);
return newCrypto.encrypt(d); return newCrypto.encrypt(d);
} catch (e) { } catch (e) {
console.log(e);
waitFor.abort(); waitFor.abort();
return void cb({error: e}); return void cb({error: e});
} }
}); });
// Update last knwon hash in cryptgetVal // Update last knwon hash in cryptgetVal
if (lastCp) { lastCp.hash = msgs[0].slice(0, 64); } if (lastCp) {
lastCp.hash = newHistory[0].slice(0, 64);
lastCp.index = 50;
cryptgetVal.content.hashes[1] = lastCp;
}
common.onlyoffice.execCommand({ common.onlyoffice.execCommand({
cmd: 'REENCRYPT', cmd: 'REENCRYPT',
data: { data: {
@ -1316,7 +1324,8 @@ define([
}, waitFor(function (obj) { }, waitFor(function (obj) {
if (obj && obj.error) { if (obj && obj.error) {
waitFor.abort(); waitFor.abort();
return void cb(obj); console.warn(obj);
return void cb(obj.error);
} }
})); }));
})); }));
@ -1324,7 +1333,7 @@ define([
// The new rt channel is ready // The new rt channel is ready
// The blob uses its own encryption and doesn't need to be reencrypted // The blob uses its own encryption and doesn't need to be reencrypted
cryptgetVal.content.channel = newRtChannel; cryptgetVal.content.channel = newRtChannel;
Crypt.put(newHash, cryptgetVal, waitFor(function (err) { Crypt.put(newHash, JSON.stringify(cryptgetVal), waitFor(function (err) {
if (err) { if (err) {
waitFor.abort(); waitFor.abort();
return void cb({ error: err }); return void cb({ error: err });
@ -1364,7 +1373,8 @@ define([
}, waitFor(function (obj) { }, waitFor(function (obj) {
if (obj && obj.error) { if (obj && obj.error) {
waitFor.abort(); waitFor.abort();
return void cb(obj); console.info(obj);
return void cb(obj.error);
} }
common.removeOwnedChannel({ common.removeOwnedChannel({
channel: oldRtChannel, channel: oldRtChannel,

Loading…
Cancel
Save