From 039ab83440f29393a59e420c38ee219ff4884fd2 Mon Sep 17 00:00:00 2001 From: yflory Date: Thu, 7 Nov 2019 17:02:22 +0100 Subject: [PATCH] Improve migration script --- www/common/outer/userObject.js | 18 ++++++++++++------ www/common/userObject.js | 7 +++++-- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/www/common/outer/userObject.js b/www/common/outer/userObject.js index 2ee1a1830..6ba0cd6d2 100644 --- a/www/common/outer/userObject.js +++ b/www/common/outer/userObject.js @@ -480,13 +480,19 @@ define([ var next = function () { var copy = JSON.parse(JSON.stringify(files)); exp.reencrypt(config.editKey, config.editKey, copy); - Object.keys(copy).forEach(function (k) { - files[k] = copy[k]; - }); - files.version = 2; - delete files.migrateRo; + setTimeout(function () { + if (files.version >= 2) { + // Already migrated by another user while we were re-encrypting + return void cb(); + } + Object.keys(copy).forEach(function (k) { + files[k] = copy[k]; + }); + files.version = 2; + delete files.migrateRo; - onSync(cb); + onSync(cb); + }, 1000); }; onSync(next); }; diff --git a/www/common/userObject.js b/www/common/userObject.js index 1c58ff831..57c1a1e6e 100644 --- a/www/common/userObject.js +++ b/www/common/userObject.js @@ -61,7 +61,7 @@ define([ // Href exists and is encrypted var d = cryptor.decrypt(pad.href); // If we can decrypt, return the decrypted value, otherwise continue and return roHref - if (d.indexOf('#') !== -1) { + if (d && d.indexOf('#') !== -1) { return d; } } @@ -69,7 +69,7 @@ define([ }; module.reencrypt = function (oldKey, newKey, obj) { - obj = obj || {}; + if (!obj) { return void console.error("Nothing to reencrypt"); } var oldCryptor = createCryptor(oldKey); var newCryptor = createCryptor(newKey); Object.keys(obj[FILES_DATA]).forEach(function (id) { @@ -78,6 +78,7 @@ define([ // "&& data.roHref" is here to make sure this is not a "file" if (data.href && data.roHref && !data.fileType) { var _href = (data.href && data.href.indexOf('#') === -1) ? oldCryptor.decrypt(data.href) : data.href; + if (!_href) { return; } data.href = newCryptor.encrypt(_href); } }); @@ -86,6 +87,7 @@ define([ // If this folder has a visible href, encrypt it if (data.href) { var _href = (data.href && data.href.indexOf('#') === -1) ? oldCryptor.decrypt(data.href) : data.href; + if (!_href) { return; } data.href = newCryptor.encrypt(_href); } }); @@ -94,6 +96,7 @@ define([ // If this folder has a visible href, encrypt it if (data.href) { var _href = (data.href && data.href.indexOf('#') === -1) ? oldCryptor.decrypt(data.href) : data.href; + if (!_href) { return; } data.href = newCryptor.encrypt(_href); } });