From 0e0d4bd336d17bbc7f25c6c7f1a12d57c09e83fb Mon Sep 17 00:00:00 2001 From: Dario Date: Wed, 18 Mar 2020 09:24:33 +0100 Subject: [PATCH] fix auto correction if privkey was saved wrong, working while passphrase is saved unencrpyted --- .../HTTPInterface/PageRequestHandlerFactory.cpp | 5 ++++- src/cpp/model/User.cpp | 17 +++++++++++++---- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/cpp/HTTPInterface/PageRequestHandlerFactory.cpp b/src/cpp/HTTPInterface/PageRequestHandlerFactory.cpp index cfff35012..4a08b6df4 100644 --- a/src/cpp/HTTPInterface/PageRequestHandlerFactory.cpp +++ b/src/cpp/HTTPInterface/PageRequestHandlerFactory.cpp @@ -132,7 +132,10 @@ Poco::Net::HTTPRequestHandler* PageRequestHandlerFactory::createRequestHandler(c } auto user = s->getUser(); if (s->errorCount() || (!user.isNull() && user->errorCount())) { - user->sendErrorsAsEmail(); + if (!user.isNull() && user->errorCount()) { + s->getErrors(user); + } + s->sendErrorsAsEmail(); auto pageRequestHandler = new Error500Page(s); pageRequestHandler->setProfiler(timeUsed); return pageRequestHandler; diff --git a/src/cpp/model/User.cpp b/src/cpp/model/User.cpp index d574ef5e2..fff3c1a9f 100644 --- a/src/cpp/model/User.cpp +++ b/src/cpp/model/User.cpp @@ -1010,6 +1010,10 @@ MemoryBin* User::encrypt(const MemoryBin* data) addError(new Error("User::encrypt", "hasn't crypto key")); return nullptr; } + if (!data) { + addError(new Error("User::encrypt", "data is zero")); + return nullptr; + } size_t message_len = data->size(); 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(); if (!privKey) { - addError(new Error("User::sign", "decrypt privkey failed")); + //addError(new Error("User::sign", "decrypt privkey failed")); + auto userBackups = controller::UserBackups::load(mDBId); @@ -1113,12 +1118,16 @@ MemoryBin* User::sign(const unsigned char* message, size_t messageSize) if (correctPassphraseFound) { // save corrected key into db - auto encyrptedPrivKey = encrypt(privKey); + auto encyrptedPrivKey = encrypt(keys.getPrivateKey()); auto newUser = controller::User::create(); if (1 == newUser->load(mDBId)) { auto userModel = newUser->getModel(); - userModel->setPrivateKey(encyrptedPrivKey); - userModel->updatePrivkey(); + if (encyrptedPrivKey) { + userModel->setPrivateKey(encyrptedPrivKey); + userModel->updatePrivkey(); + // remove unencrypt error from priv key to prevent error 404 forwarding + delete getLastError(); + } mm->releaseMemory(encyrptedPrivKey);