add option for login after register via ajax

This commit is contained in:
einhornimmond 2021-02-26 17:23:27 +01:00 committed by Ulf Gebhardt
parent e2c38c1a0f
commit fa999cde6f
No known key found for this signature in database
GPG Key ID: 81308EFE29ABFEBD
3 changed files with 68 additions and 40 deletions

View File

@ -15,6 +15,7 @@ Poco::JSON::Object* JsonCreateUser::handle(Poco::Dynamic::Var params)
std::string first_name;
std::string last_name;
std::string password;
bool login_after_register = false;
int emailType;
auto em = EmailManager::getInstance();
auto sm = SessionManager::getInstance();
@ -32,9 +33,13 @@ Poco::JSON::Object* JsonCreateUser::handle(Poco::Dynamic::Var params)
paramJsonObject->get("first_name").convert(first_name);
paramJsonObject->get("last_name").convert(last_name);
paramJsonObject->get("emailType").convert(emailType);
if ((ServerConfig::g_AllowUnsecureFlags & ServerConfig::UNSECURE_PASSWORD_REQUESTS)) {
paramJsonObject->get("password").convert(password);
}
if (!paramJsonObject->isNull("login_after_register")) {
paramJsonObject->get("login_after_register").convert(login_after_register);
}
}
catch (Poco::Exception& ex) {
return stateError("json exception", ex.displayText());
@ -71,7 +76,6 @@ Poco::JSON::Object* JsonCreateUser::handle(Poco::Dynamic::Var params)
userModel->sendErrorsAsEmail();
return stateError("insert user failed");
}
if (password.size()) {
session = sm->getNewSession();
session->setUser(user);
@ -92,6 +96,13 @@ Poco::JSON::Object* JsonCreateUser::handle(Poco::Dynamic::Var params)
em->addEmail(new model::Email(emailOptIn, user, model::Email::convertTypeFromInt(emailType)));
if (login_after_register && session) {
Poco::JSON::Object* result = stateSuccess();
result->set("session_id", session->getHandle());
return result;
}
return stateSuccess();
}

View File

@ -11,6 +11,8 @@
#include "../ServerConfig.h"
#include "../lib/DataTypeConverter.h"
#include "../SingletonManager/SessionManager.h"
void JsonRequestHandler::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net::HTTPServerResponse& response)
{
@ -50,6 +52,21 @@ void JsonRequestHandler::handleRequest(Poco::Net::HTTPServerRequest& request, Po
}
if (json_result) {
if (!json_result->isNull("session_id")) {
int session_id = 0;
try {
json_result->get("session_id").convert(session_id);
}
catch (Poco::Exception& e) {
ErrorList erros;
erros.addError(new Error("json request", "invalid session_id"));
erros.sendErrorsAsEmail();
}
if (session_id) {
auto session = SessionManager::getInstance()->getSession(session_id);
response.addCookie(session->getLoginCookie());
}
}
json_result->stringify(responseStream);
delete json_result;
}

View File

@ -31,10 +31,10 @@ int AuthenticatedEncryptionCreateKeyTask::run()
em->sendErrorsAsEmail();
return -1;
}
printf("create password time: %s\n", timeUsed.string().data());
//printf("create password time: %s\n", timeUsed.string().data());
timeUsed.reset();
mUser->setNewPassword(authenticated_encryption);
printf("set password time: %s\n", timeUsed.string().data());
//printf("set password time: %s\n", timeUsed.string().data());
return 0;
}