From ddaad461d1ddb49a71757c2159515ed1c8f499d0 Mon Sep 17 00:00:00 2001 From: Dario Date: Tue, 14 Jul 2020 19:14:21 +0200 Subject: [PATCH] react on missing public key by login, if private key exist --- src/cpp/Crypto/KeyPairEd25519.h | 2 ++ src/cpp/HTTPInterface/DebugMnemonicPage.cpp | 25 +++++++++++---------- src/cpp/HTTPInterface/ResetPassword.cpp | 4 ++-- src/cpp/controller/User.cpp | 8 +++++-- 4 files changed, 23 insertions(+), 16 deletions(-) diff --git a/src/cpp/Crypto/KeyPairEd25519.h b/src/cpp/Crypto/KeyPairEd25519.h index ccd14e673..7b3f11d4b 100644 --- a/src/cpp/Crypto/KeyPairEd25519.h +++ b/src/cpp/Crypto/KeyPairEd25519.h @@ -41,6 +41,8 @@ public: return 0 == sodium_memcmp(mSodiumPublic, b.mSodiumPublic, crypto_sign_PUBLICKEYBYTES); } inline bool isTheSame(const unsigned char* pubkey) const { + if (!pubkey) + return false; return 0 == sodium_memcmp(mSodiumPublic, pubkey, crypto_sign_PUBLICKEYBYTES); } //! \return 0 if the same diff --git a/src/cpp/HTTPInterface/DebugMnemonicPage.cpp b/src/cpp/HTTPInterface/DebugMnemonicPage.cpp index 2c875e300..2061f8066 100644 --- a/src/cpp/HTTPInterface/DebugMnemonicPage.cpp +++ b/src/cpp/HTTPInterface/DebugMnemonicPage.cpp @@ -35,6 +35,7 @@ { switch(type) { case ServerConfig::MNEMONIC_GRADIDO_BOOK_GERMAN_RANDOM_ORDER: return "de"; + case ServerConfig::MNEMONIC_GRADIDO_BOOK_GERMAN_RANDOM_ORDER_FIXED_CASES: return "de"; case ServerConfig::MNEMONIC_BIP0039_SORTED_ORDER: return "en"; } return "unknown"; @@ -58,7 +59,7 @@ void DebugMnemonicPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poc if (_compressResponse) response.set("Content-Encoding", "gzip"); Poco::Net::HTMLForm form(request, request.stream()); -#line 41 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\debugMnemonic.cpsp" +#line 42 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\debugMnemonic.cpsp" const char* pageName = "Debug Mnemonic"; WordChecked checkedWord; @@ -189,7 +190,7 @@ void DebugMnemonicPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poc responseStream << "
\n"; responseStream << "\t

Debug Mnemonic

\n"; responseStream << "\t"; -#line 103 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\debugMnemonic.cpsp" +#line 104 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\debugMnemonic.cpsp" responseStream << ( getErrorsHtml() ); responseStream << "\n"; responseStream << "\t
\n"; @@ -198,20 +199,20 @@ void DebugMnemonicPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poc responseStream << "\t\t\t

\n"; responseStream << "\t\t\t\t\n"; responseStream << "\t\t\t\t\n"; responseStream << "\t\t\t

\n"; responseStream << "\t\t\t\n"; responseStream << "\t\t\t"; -#line 112 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\debugMnemonic.cpsp" +#line 113 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\debugMnemonic.cpsp" if(checkedWord.bSet) { responseStream << "\n"; responseStream << "\t\t\t\t

"; -#line 113 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\debugMnemonic.cpsp" +#line 114 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\debugMnemonic.cpsp" responseStream << ( checkedWord.print() ); responseStream << "

\n"; responseStream << "\t\t\t"; -#line 114 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\debugMnemonic.cpsp" +#line 115 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\debugMnemonic.cpsp" } responseStream << "\n"; responseStream << "\t\t\n"; responseStream << "\t\t
\n"; @@ -219,30 +220,30 @@ void DebugMnemonicPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poc responseStream << "\t\t\t

\n"; responseStream << "\t\t\t\t\n"; responseStream << "\t\t\t\t\n"; responseStream << "\t\t\t

\n"; responseStream << "\t\t\t\n"; responseStream << "\t\t\t"; -#line 123 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\debugMnemonic.cpsp" +#line 124 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\debugMnemonic.cpsp" if(checkedIndex[0].bSet) { responseStream << "\n"; responseStream << "\t\t\t\t
    \n"; responseStream << "\t\t\t\t"; -#line 125 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\debugMnemonic.cpsp" +#line 126 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\debugMnemonic.cpsp" for (int i = ServerConfig::MNEMONIC_GRADIDO_BOOK_GERMAN_RANDOM_ORDER; i < ServerConfig::Mnemonic_Types::MNEMONIC_MAX; i++) { responseStream << "\n"; responseStream << "\t\t\t\t\t
  • \n"; responseStream << "\t\t\t\t\t"; -#line 127 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\debugMnemonic.cpsp" +#line 128 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\debugMnemonic.cpsp" responseStream << ( checkedIndex[i].print() ); responseStream << "\n"; responseStream << "\t\t\t\t\t
  • \n"; responseStream << "\t\t\t\t"; -#line 129 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\debugMnemonic.cpsp" +#line 130 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\debugMnemonic.cpsp" } responseStream << "\n"; responseStream << "\t\t\t\t
\n"; responseStream << "\t\t\t"; -#line 131 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\debugMnemonic.cpsp" +#line 132 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\debugMnemonic.cpsp" } responseStream << "\n"; responseStream << "\t\t
\n"; responseStream << "\t
\n"; diff --git a/src/cpp/HTTPInterface/ResetPassword.cpp b/src/cpp/HTTPInterface/ResetPassword.cpp index 1138e8412..720a5203b 100644 --- a/src/cpp/HTTPInterface/ResetPassword.cpp +++ b/src/cpp/HTTPInterface/ResetPassword.cpp @@ -91,7 +91,7 @@ void ResetPassword::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::N sendUserEmail = true; } } - printf("userExist: %d, sendUserEmail: %d\n", user_exist, sendUserEmail); + if(!errorCount()) { // send reset password email @@ -99,7 +99,7 @@ void ResetPassword::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::N if(user_exist) { result = session->sendResetPasswordEmail(user, sendUserEmail); } - printf("result: %d\n", result); + if(2 == result) { state = PAGE_EMAIL_ALREADY_SEND; } else if(sendUserEmail) { diff --git a/src/cpp/controller/User.cpp b/src/cpp/controller/User.cpp index 9a8538ee5..ad1fd9fc5 100644 --- a/src/cpp/controller/User.cpp +++ b/src/cpp/controller/User.cpp @@ -159,7 +159,7 @@ namespace controller { mPassword = authenticated_encryption; // additional check if saved private key found, decrypt and derive public key and compare with saved public key - if (!model->hasPrivateKeyEncrypted()) { + if (!model->hasPrivateKeyEncrypted()) { return 1; } else @@ -176,7 +176,11 @@ namespace controller { } } mGradidoKeyPair = new KeyPairEd25519(clear_private_key); - if (!mGradidoKeyPair->isTheSame(model->getPublicKey())) { + if (!model->getPublicKey()) { + model->setPublicKey(mGradidoKeyPair->getPublicKey()); + model->updatePublickey(); + } + else if (!mGradidoKeyPair->isTheSame(model->getPublicKey())) { delete mGradidoKeyPair; mGradidoKeyPair = nullptr; //printf("pubkeys don't match\n");