fix errors

This commit is contained in:
Dario 2020-01-15 10:33:53 +01:00
parent 28900e04fe
commit 7b0828d22d
6 changed files with 96 additions and 19 deletions

View File

@ -2,12 +2,20 @@
#include "Poco/URI.h"
#include "../SingletonManager/SessionManager.h"
#include "../SingletonManager/SingletonTaskObserver.h"
#include "../SingletonManager/ErrorManager.h"
Poco::JSON::Object* JsonGetLogin::handle(Poco::Dynamic::Var params)
{
int session_id = 0;
Poco::JSON::Object* result = new Poco::JSON::Object;
/*result->set("state", "debugging");
result->set("msg", "deactivate for debugging");
return result;
*/
if (params.isStruct()) {
session_id = params["session_id"];
//std::string miau = params["miau"];
@ -52,18 +60,43 @@ Poco::JSON::Object* JsonGetLogin::handle(Poco::Dynamic::Var params)
if (session_id) {
auto sm = SessionManager::getInstance();
auto observer = SingletonTaskObserver::getInstance();
auto session = sm->getSession(session_id);
if (session) {
auto userNew = session->getNewUser();
auto user = session->getUser();
if (!user) {
if (user.isNull()) {
result->set("state", "not found");
result->set("msg", "Session didn't contain user");
return result;
}
auto userModel = userNew->getModel();
if(userModel.isNull()) {
result->set("state", "not found");
result->set("msg", "user is empty");
return result;
}//*/
result->set("state", "success");
result->set("clientIP", session->getClientIp().toString());
result->set("user", user->getJson());
try {
result->set("user", userNew->getJson());
}
catch (Poco::Exception ex) {
auto em = ErrorManager::getInstance();
em->addError(new ParamError("JsonGetLogin::handle", "poco exception calling userModel->getJson: ", ex.displayText().data()));
em->sendErrorsAsEmail();
}
catch (...) {
auto em = ErrorManager::getInstance();
em->addError(new Error("JsonGetLogin::handle", "generic exception calling userModel->getJson: "));
em->sendErrorsAsEmail();
}
result->set("Transaction.pending", session->getProcessingTransactionCount());
auto executing = observer->getTaskCount(userModel->getEmail(), TASK_OBSERVER_SIGN_TRANSACTION);
if (executing < 0) {
executing = 0;
}
result->set("Transaction.executing", executing);
//printf("pending: %d\n", session->getProcessingTransactionCount());
return result;
}

View File

@ -443,7 +443,7 @@ void SessionManager::deleteLoginCookies(Poco::Net::HTTPServerRequest& request, P
// max age of 0 delete cookie
keks.setMaxAge(0);
response.addCookie(keks);
printf("remove PHP Kekse\n");
//printf("remove PHP Kekse\n");
}

View File

@ -1,8 +1,9 @@
#include "User.h"
#include "sodium.h"
namespace controller {
User::User(model::table::User* dbModel)
: mUserRole(USER_ROLE_NOT_LOADED)
{
mDBModel = dbModel;
}
@ -33,4 +34,38 @@ namespace controller {
return getModel()->loadFromDB("pubkey", pubkey);
}
const std::string& User::getPublicHex()
{
if (mPublicHex != "") {
return mPublicHex;
}
auto mm = MemoryManager::getInstance();
auto pubkeyHex = mm->getFreeMemory(65);
memset(*pubkeyHex, 0, 65);
lock("User::getJson");
Poco::JSON::Object userObj;
auto pubkey = getModel()->getPublicKey();
if (pubkey) {
sodium_bin2hex(*pubkeyHex, 65, pubkey, 32);
}
mPublicHex = (char*)*pubkeyHex;
unlock();
mm->releaseMemory(pubkeyHex);
return mPublicHex;
}
Poco::JSON::Object User::getJson()
{
auto json = getModel()->getJson();
json.set("public_hex", getPublicHex());
return json;
}
}

View File

@ -29,15 +29,19 @@ namespace controller {
inline size_t load(const std::string& email) { return getModel()->loadFromDB("email", email); }
inline size_t load(int user_id) { return getModel()->loadFromDB("id", user_id); }
int load(const unsigned char* pubkey_array);
Poco::JSON::Object getJson();
inline Poco::AutoPtr<model::table::User> getModel() { return _getModel<model::table::User>(); }
inline const model::table::User* getModel() const { return _getModel<model::table::User>(); }
const std::string& getPublicHex();
protected:
User(model::table::User* dbModel);
UserLoadedRole mUserRole;
std::string mPublicHex;
};
}

View File

@ -419,6 +419,11 @@ User::User(Poco::AutoPtr<controller::User> ctrl_user)
mEmailChecked = model->isEmailChecked();
mLanguage = LanguageManager::languageFromString(model->getLanguageKey());
mLanguageCatalog = LanguageManager::getInstance()->getFreeCatalog(mLanguage);
mState = USER_LOADED_FROM_DB;
if (!mEmailChecked) { mState = USER_EMAIL_NOT_ACTIVATED; }
else if (!mPrivateKey) { mState = USER_NO_PRIVATE_KEY; }
else { mState = USER_COMPLETE; }
}

View File

@ -67,12 +67,15 @@ namespace model {
Poco::Data::Statement User::_loadFromDB(Poco::Data::Session session, const std::string& fieldName)
{
std::string _fieldName = fieldName;
if (_fieldName == "id") {
_fieldName = getTableName() + std::string(".id");
}
Poco::Data::Statement select(session);
select << "SELECT id, email, first_name, last_name, password, pubkey, privkey, email_checked, language, user_roles.role_id "
select << "SELECT " << getTableName() << ".id, email, first_name, last_name, password, pubkey, privkey, email_checked, language, user_roles.role_id "
<< " FROM " << getTableName()
<< " LEFT JOIN user_roles ON " << getTableName() << ".id = user_roles.user_id "
<< " WHERE " << fieldName << " = ?"
<< " WHERE " << _fieldName << " = ?"
,into(mID), into(mEmail), into(mFirstName), into(mLastName), into(mPasswordHashed), into(mPublicKey), into(mPrivateKey), into(mEmailChecked), into(mLanguageKey), into(mRole);
@ -144,29 +147,26 @@ namespace model {
Poco::JSON::Object User::getJson()
{
auto mm = MemoryManager::getInstance();
auto pubkeyHex = mm->getFreeMemory(65);
memset(*pubkeyHex, 0, 65);
lock("User::getJson");
Poco::JSON::Object userObj;
if (!mPublicKey.isNull()) {
sodium_bin2hex(*pubkeyHex, 65, mPublicKey.value().content().data(), mPublicKey.value().content().size());
}
userObj.set("first_name", mFirstName);
userObj.set("last_name", mLastName);
userObj.set("email", mEmail);
userObj.set("public_hex", (char*)*pubkeyHex);
//userObj.set("state", userStateToString(mState));
userObj.set("email_checked", mEmailChecked);
userObj.set("ident_hash", DRMakeStringHash(mEmail.data(), mEmail.size()));
try {
userObj.set("role", UserRoles::typeToString(getRole()));
}
catch (Poco::Exception ex) {
addError(new ParamError("User::getJson", "exception by getting role", ex.displayText().data()));
sendErrorsAsEmail();
}
unlock();
mm->releaseMemory(pubkeyHex);
return userObj;
}
}