Bypass placeholder when removing a pad password

This commit is contained in:
yflory 2023-09-28 14:57:07 +02:00
parent 1c7e5164bb
commit 30743c295a
3 changed files with 11 additions and 3 deletions

View File

@ -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;

View File

@ -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 });
}

View File

@ -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();