add create and save user backup and email verification code for new register direct

This commit is contained in:
Dario 2020-06-10 17:07:55 +02:00
parent c009a12f45
commit c925984ded
3 changed files with 21 additions and 1 deletions

View File

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

View File

@ -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 "<unknown>";
}
}

View File

@ -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<int, int, Poco::UInt64, int> EmailOptInTuple;