diff --git a/lib/hk-util.js b/lib/hk-util.js index 09839e12c..1060bc9fc 100644 --- a/lib/hk-util.js +++ b/lib/hk-util.js @@ -580,6 +580,7 @@ const handleFirstMessage = function (Env, channelName, metadata) { // Set the selfdestruct flag to history keeper ID to handle server crash. metadata.selfdestruct = Env.id; } + delete metadata.forcePlaceholder; Env.store.writeMetadata(channelName, JSON.stringify(metadata), function (err) { if (err) { // FIXME tell the user that there was a channel error? @@ -706,7 +707,7 @@ const handleGetHistory = function (Env, Server, seq, userId, parsed) { Server.send(userId, [0, HISTORY_KEEPER_ID, 'MSG', userId, JSON.stringify(parsedMsg)]); return; } - if (err && err.code === 'ENOENT' && reason) { + if (err && err.code === 'ENOENT' && reason && !metadata.forcePlaceholder) { const parsedMsg2 = {error:'EDELETED', message: reason, channel: channelName, txid: txid}; Server.send(userId, [0, HISTORY_KEEPER_ID, 'MSG', userId, JSON.stringify(parsedMsg2)]); return; diff --git a/www/common/cryptpad-common.js b/www/common/cryptpad-common.js index 67d268973..b5a5fc770 100644 --- a/www/common/cryptpad-common.js +++ b/www/common/cryptpad-common.js @@ -1452,8 +1452,10 @@ define([ }).nThen(function (waitFor) { optsPut.metadata.restricted = oldMetadata.restricted; optsPut.metadata.allowed = oldMetadata.allowed; + if (!newPassword) { optsPut.metadata.forcePlaceholder = true; } Crypt.put(newHash, cryptgetVal, waitFor(function (err) { if (err) { + if (err === "EDELETED") { err = "PASSWORD_ALREADY_USED"; } waitFor.abort(); return void cb({ error: err }); } diff --git a/www/common/inner/access.js b/www/common/inner/access.js index 55c07dd16..40240540c 100644 --- a/www/common/inner/access.js +++ b/www/common/inner/access.js @@ -929,6 +929,7 @@ define([ }); } + Messages.access_passwordUsed = "This password has already been used for this pad. It can't be used again."; // XXX NEW var href = data.href; var isNotStored = Boolean(data.isNotStored); sframeChan.query(q, { @@ -939,8 +940,12 @@ define([ }, function (err, data) { $(passwordOk).text(Messages.properties_changePasswordButton); pLocked = false; - if (err || data.error) { - console.error(err || data.error); + err = err || data.error; + if (err) { + if (err === "PASSWORD_ALREADY_USED") { + return void UI.alert(Messages.access_passwordUsed); + } + console.error(err); return void UI.alert(Messages.properties_passwordError); } UI.findOKButton().click();