fix auto correction if privkey was saved wrong, working while passphrase is saved unencrpyted

This commit is contained in:
Dario 2020-03-18 09:24:33 +01:00
parent dd5379fef6
commit 0e0d4bd336
2 changed files with 17 additions and 5 deletions

View File

@ -132,7 +132,10 @@ Poco::Net::HTTPRequestHandler* PageRequestHandlerFactory::createRequestHandler(c
} }
auto user = s->getUser(); auto user = s->getUser();
if (s->errorCount() || (!user.isNull() && user->errorCount())) { if (s->errorCount() || (!user.isNull() && user->errorCount())) {
user->sendErrorsAsEmail(); if (!user.isNull() && user->errorCount()) {
s->getErrors(user);
}
s->sendErrorsAsEmail();
auto pageRequestHandler = new Error500Page(s); auto pageRequestHandler = new Error500Page(s);
pageRequestHandler->setProfiler(timeUsed); pageRequestHandler->setProfiler(timeUsed);
return pageRequestHandler; return pageRequestHandler;

View File

@ -1010,6 +1010,10 @@ MemoryBin* User::encrypt(const MemoryBin* data)
addError(new Error("User::encrypt", "hasn't crypto key")); addError(new Error("User::encrypt", "hasn't crypto key"));
return nullptr; return nullptr;
} }
if (!data) {
addError(new Error("User::encrypt", "data is zero"));
return nullptr;
}
size_t message_len = data->size(); size_t message_len = data->size();
size_t ciphertext_len = crypto_secretbox_MACBYTES + message_len; size_t ciphertext_len = crypto_secretbox_MACBYTES + message_len;
@ -1089,7 +1093,8 @@ MemoryBin* User::sign(const unsigned char* message, size_t messageSize)
auto privKey = getPrivKey(); auto privKey = getPrivKey();
if (!privKey) { if (!privKey) {
addError(new Error("User::sign", "decrypt privkey failed")); //addError(new Error("User::sign", "decrypt privkey failed"));
auto userBackups = controller::UserBackups::load(mDBId); auto userBackups = controller::UserBackups::load(mDBId);
@ -1113,12 +1118,16 @@ MemoryBin* User::sign(const unsigned char* message, size_t messageSize)
if (correctPassphraseFound) { if (correctPassphraseFound) {
// save corrected key into db // save corrected key into db
auto encyrptedPrivKey = encrypt(privKey); auto encyrptedPrivKey = encrypt(keys.getPrivateKey());
auto newUser = controller::User::create(); auto newUser = controller::User::create();
if (1 == newUser->load(mDBId)) { if (1 == newUser->load(mDBId)) {
auto userModel = newUser->getModel(); auto userModel = newUser->getModel();
if (encyrptedPrivKey) {
userModel->setPrivateKey(encyrptedPrivKey); userModel->setPrivateKey(encyrptedPrivKey);
userModel->updatePrivkey(); userModel->updatePrivkey();
// remove unencrypt error from priv key to prevent error 404 forwarding
delete getLastError();
}
mm->releaseMemory(encyrptedPrivKey); mm->releaseMemory(encyrptedPrivKey);