gradido/login_server/src/cpp/JSONInterface/JsonLoginViaEmailVerificationCode.cpp
2021-03-23 14:19:51 +01:00

70 lines
1.9 KiB
C++

#include "JsonLoginViaEmailVerificationCode.h"
#include "JsonUnsecureLogin.h"
#include "../SingletonManager/SessionManager.h"
#include "../SingletonManager/SingletonTaskObserver.h"
#include "../SingletonManager/ErrorManager.h"
#include "../controller/User.h"
#include "../lib/DataTypeConverter.h"
#include "Poco/URI.h"
#include "Poco/JSON/Array.h"
Poco::JSON::Object* JsonLoginViaEmailVerificationCode::handle(Poco::Dynamic::Var params)
{
auto sm = SessionManager::getInstance();
/*
email verification code
*/
// incoming
unsigned long long code = 0;
if (params.isVector()) {
const Poco::URI::QueryParameters queryParams = params.extract<Poco::URI::QueryParameters>();
std::string codeString;
for (auto it = queryParams.begin(); it != queryParams.end(); it++) {
if (it->first == "emailVerificationCode") {
codeString = it->second;
break;
}
}
if (codeString == "") {
return stateError("emailVerificationCode not found");
}
if (DataTypeConverter::NUMBER_PARSE_OKAY != DataTypeConverter::strToInt(codeString, code)) {
return stateError("couldn't parse emailVerificationCode");
}
}
auto session = sm->findByEmailVerificationCode(code);
if (!session) {
session = sm->getNewSession();
if (!session->loadFromEmailVerificationCode(code)) {
return stateError("couldn't login with emailVerificationCode");
}
}
session->setClientIp(mClientIP);
auto result = new Poco::JSON::Object;
result->set("state", "success");
result->set("session_id", session->getHandle());
result->set("email_verification_code_type", model::table::EmailOptIn::typeToString(session->getEmailVerificationType()));
Poco::JSON::Array info;
if (!session->getNewUser()->getModel()->getPasswordHashed()) {
info.add("user hasn't password");
}
auto update_email_verification_result = session->updateEmailVerification(code);
if (1 == update_email_verification_result) {
info.add("email already activated");
}
result->set("info", info);
return result;
}