mirror of
https://github.com/IT4Change/gradido.git
synced 2026-01-20 20:01:31 +00:00
53 lines
1.7 KiB
C++
53 lines
1.7 KiB
C++
#include "JsonResetPassword.h"
|
|
|
|
#include "SingletonManager/SessionManager.h"
|
|
#include "SingletonManager/SingletonTaskObserver.h"
|
|
|
|
Poco::JSON::Object* JsonResetPassword::handle(Poco::Dynamic::Var params)
|
|
{
|
|
auto result_session_check = checkAndLoadSession(params, false);
|
|
if (result_session_check) {
|
|
return result_session_check;
|
|
}
|
|
|
|
std::string password;
|
|
// if is json object
|
|
if (params.type() == typeid(Poco::JSON::Object::Ptr)) {
|
|
Poco::JSON::Object::Ptr paramJsonObject = params.extract<Poco::JSON::Object::Ptr>();
|
|
try {
|
|
auto password_obj = paramJsonObject->get("password");
|
|
if (password_obj.isEmpty()) {
|
|
return stateError("password missing");
|
|
}
|
|
password_obj.convert(password);
|
|
}
|
|
catch (Poco::Exception& ex) {
|
|
return stateError("error parsing json", ex.what());
|
|
}
|
|
}
|
|
auto sm = SessionManager::getInstance();
|
|
NotificationList errors;
|
|
if (!sm->checkPwdValidation(password, &errors, LanguageManager::getInstance()->getFreeCatalog(LANG_EN))) {
|
|
return stateError("password isn't valid", &errors);
|
|
}
|
|
auto user = mSession->getNewUser();
|
|
if (user.isNull() || user->getModel().isNull()) {
|
|
return stateError("invalid user");
|
|
}
|
|
|
|
auto observer = SingletonTaskObserver::getInstance();
|
|
auto email_hash = observer->makeHash(user->getModel()->getEmail());
|
|
|
|
if (observer->getTaskCount(email_hash, TASK_OBSERVER_PASSWORD_CREATION) > 0) {
|
|
return stateError("password encryption is already running");
|
|
}
|
|
|
|
auto update_password_result = user->setNewPassword(password);
|
|
if (update_password_result == 2) {
|
|
KeyPairEd25519* key_pair = NULL;
|
|
if (!user->tryLoadPassphraseUserBackup(&key_pair)) {
|
|
user->setGradidoKeyPair(key_pair);
|
|
}
|
|
}
|
|
return stateSuccess();
|
|
} |