diff --git a/src/cpp/model/Session.cpp b/src/cpp/model/Session.cpp index e5be916c4..a5e0ae7e3 100644 --- a/src/cpp/model/Session.cpp +++ b/src/cpp/model/Session.cpp @@ -322,6 +322,7 @@ bool Session::createUserDirect(const std::string& first_name, const std::string& static const char* function_name = "Session::createUserDirect"; auto sm = SessionManager::getInstance(); auto em = ErrorManager::getInstance(); + auto email_manager = EmailManager::getInstance(); if (!sm->isValid(first_name, VALIDATE_NAME)) { addError(new Error(gettext("Vorname"), gettext("Bitte gebe einen Namen an. Mindestens 3 Zeichen, keines folgender Zeichen <>&;")), false); @@ -346,6 +347,7 @@ bool Session::createUserDirect(const std::string& first_name, const std::string& return false; } + // user mNewUser = controller::User::create(email, first_name, last_name); auto user_model = mNewUser->getModel(); user_model->insertIntoDB(true); @@ -363,16 +365,32 @@ bool Session::createUserDirect(const std::string& first_name, const std::string& return false; } } + + // passphrase auto passphrase = Passphrase::generate(&ServerConfig::g_Mnemonic_WordLists[ServerConfig::MNEMONIC_GRADIDO_BOOK_GERMAN_RANDOM_ORDER_FIXED_CASES]); if (passphrase.isNull()) { em->addError(new ParamError(function_name, "error generating passphrase for", email)); em->sendErrorsAsEmail(); } + auto user_backup = controller::UserBackups::create(user_id, passphrase->getString()); + user_backup->getModel()->insertIntoDB(false); + + // keys auto gradido_key_pair = KeyPairEd25519::create(passphrase); mNewUser->setGradidoKeyPair(gradido_key_pair); + // save pubkey in db + user_model->updatePublickey(); + + // calculate encryption key, could need some time, will save encrypted privkey to db UniLib::controller::TaskPtr create_authenticated_encrypten_key = new AuthenticatedEncryptionCreateKeyTask(mNewUser, password); create_authenticated_encrypten_key->scheduleTask(create_authenticated_encrypten_key); + // email verification code + auto email_verification = controller::EmailVerificationCode::create(user_id, model::table::EMAIL_OPT_IN_REGISTER_DIRECT); + email_verification->getModel()->insertIntoDB(false); + + email_manager->addEmail(new model::Email(email_verification, mNewUser, model::EMAIL_USER_VERIFICATION_CODE)); + return true; } diff --git a/src/cpp/model/table/EmailOptIn.cpp b/src/cpp/model/table/EmailOptIn.cpp index 495bb9e16..d8789ee61 100644 --- a/src/cpp/model/table/EmailOptIn.cpp +++ b/src/cpp/model/table/EmailOptIn.cpp @@ -126,6 +126,7 @@ namespace model { switch (type) { case EMAIL_OPT_IN_REGISTER: return "register"; case EMAIL_OPT_IN_RESET_PASSWORD: return "resetPassword"; + case EMAIL_OPT_IN_REGISTER_DIRECT: return "registerDirect"; default: return ""; } } diff --git a/src/cpp/model/table/EmailOptIn.h b/src/cpp/model/table/EmailOptIn.h index a4027ab3d..61c558224 100644 --- a/src/cpp/model/table/EmailOptIn.h +++ b/src/cpp/model/table/EmailOptIn.h @@ -13,7 +13,8 @@ namespace model { enum EmailOptInType { EMAIL_OPT_IN_EMPTY = 0, EMAIL_OPT_IN_REGISTER = 1, - EMAIL_OPT_IN_RESET_PASSWORD = 2 + EMAIL_OPT_IN_RESET_PASSWORD = 2, + EMAIL_OPT_IN_REGISTER_DIRECT = 3 }; typedef Poco::Tuple EmailOptInTuple;