From d1003e2c618fa2cec70975822a860f818d317cae Mon Sep 17 00:00:00 2001 From: Dario Date: Mon, 13 Apr 2020 13:30:11 +0200 Subject: [PATCH] adding jsonCreateUser and email for register accounts throw old elopage transaction --- src/cpp/JSONInterface/JsonCreateUser.cpp | 66 ++++++++++++++++--- .../JsonRequestHandlerFactory.cpp | 4 ++ src/cpp/ServerConfig.cpp | 3 + src/cpp/SingletonManager/EmailManager.h | 5 +- src/cpp/model/email/Email.cpp | 19 ++++++ src/cpp/model/email/Email.h | 19 +++--- 6 files changed, 96 insertions(+), 20 deletions(-) diff --git a/src/cpp/JSONInterface/JsonCreateUser.cpp b/src/cpp/JSONInterface/JsonCreateUser.cpp index 65426b275..7de546325 100644 --- a/src/cpp/JSONInterface/JsonCreateUser.cpp +++ b/src/cpp/JSONInterface/JsonCreateUser.cpp @@ -1,19 +1,65 @@ #include "JsonCreateUser.h" -#include "Poco/URI.h" -#include "../SingletonManager/SessionManager.h" -#include "../SingletonManager/SingletonTaskObserver.h" -#include "../SingletonManager/ErrorManager.h" +#include "../model/email/Email.h" +#include "../controller/User.h" +#include "../controller/EmailVerificationCode.h" -#include "../lib/DataTypeConverter.h" +#include "../SingletonManager/EmailManager.h" Poco::JSON::Object* JsonCreateUser::handle(Poco::Dynamic::Var params) { + std::string email; + std::string first_name; + std::string last_name; + model::EmailType emailType; + auto em = EmailManager::getInstance(); - int session_id = 0; - Poco::JSON::Object* result = new Poco::JSON::Object; - result->set("state", "debugging"); - result->set("msg", "empty implementation"); - return result; + // if is json object + if (params.type() == typeid(Poco::JSON::Object::Ptr)) { + Poco::JSON::Object::Ptr paramJsonObject = params.extract(); + /// Throws a RangeException if the value does not fit + /// into the result variable. + /// Throws a NotImplementedException if conversion is + /// not available for the given type. + /// Throws InvalidAccessException if Var is empty. + try { + paramJsonObject->get("email").convert(email); + paramJsonObject->get("first_name").convert(first_name); + paramJsonObject->get("last_name").convert(last_name); + paramJsonObject->get("emailType").convert(emailType); + } + catch (Poco::Exception& ex) { + return stateError("json exception", ex.displayText()); + } + } + else { + return stateError("parameter format unknown"); + } + + auto user = controller::User::create(); + if (user->load(email) > 0) { + Poco::JSON::Object* result = new Poco::JSON::Object; + result->set("state", "exist"); + result->set("msg", "user already exist"); + return result; + } + + // create user + user = controller::User::create(email, first_name, last_name); + auto userModel = user->getModel(); + if (!userModel->insertIntoDB(true)) { + userModel->sendErrorsAsEmail(); + return stateError("insert user failed"); + } + auto emailOptIn = controller::EmailVerificationCode::create(userModel->getID(), model::table::EMAIL_OPT_IN_REGISTER); + auto emailOptInModel = emailOptIn->getModel(); + if (!emailOptInModel->insertIntoDB(false)) { + emailOptInModel->sendErrorsAsEmail(); + return stateError("insert emailOptIn failed"); + } + + em->addEmail(new model::Email(emailOptIn, user, emailType)); + + return stateSuccess(); } \ No newline at end of file diff --git a/src/cpp/JSONInterface/JsonRequestHandlerFactory.cpp b/src/cpp/JSONInterface/JsonRequestHandlerFactory.cpp index c86ab0b15..797620380 100644 --- a/src/cpp/JSONInterface/JsonRequestHandlerFactory.cpp +++ b/src/cpp/JSONInterface/JsonRequestHandlerFactory.cpp @@ -4,6 +4,7 @@ #include "../SingletonManager/SessionManager.h" +#include "JsonCreateUser.h" #include "JsonGetLogin.h" #include "JsonUnknown.h" #include "JsonTransaction.h" @@ -42,6 +43,9 @@ Poco::Net::HTTPRequestHandler* JsonRequestHandlerFactory::createRequestHandler(c else if (url_first_part == "/getUsers") { return new JsonGetUsers; } + else if (url_first_part == "/createUser") { + return new JsonCreateUser; + } else if (url_first_part == "/adminEmailVerificationResend") { return new JsonAdminEmailVerificationResend; } diff --git a/src/cpp/ServerConfig.cpp b/src/cpp/ServerConfig.cpp index 07fc92b23..05f11802d 100644 --- a/src/cpp/ServerConfig.cpp +++ b/src/cpp/ServerConfig.cpp @@ -113,6 +113,9 @@ namespace ServerConfig { bool initEMailAccount(const Poco::Util::LayeredConfiguration& cfg) { g_disableEmail = cfg.getBool("email.disable", false); + if (g_disableEmail) { + printf("Email is disabled!\n"); + } g_EmailAccount.sender = cfg.getString("email.sender"); g_EmailAccount.username = cfg.getString("email.username"); g_EmailAccount.password = cfg.getString("email.password"); diff --git a/src/cpp/SingletonManager/EmailManager.h b/src/cpp/SingletonManager/EmailManager.h index 87bbc676a..d71bd22e4 100644 --- a/src/cpp/SingletonManager/EmailManager.h +++ b/src/cpp/SingletonManager/EmailManager.h @@ -30,7 +30,10 @@ public: inline const std::string& getAdminReceiver() { return mEmailAccount.admin_receiver; } //! \brief call delete on email after sending it - inline void addEmail(model::Email* email) { mPendingEmails.push(email); condSignal();} + inline void addEmail(model::Email* email) { + if (mDisableEmail) { delete email; return; } + mPendingEmails.push(email); condSignal(); + } protected: EmailManager(); diff --git a/src/cpp/model/email/Email.cpp b/src/cpp/model/email/Email.cpp index b9f40f069..949865f78 100644 --- a/src/cpp/model/email/Email.cpp +++ b/src/cpp/model/email/Email.cpp @@ -18,6 +18,21 @@ Mit freundlichen Grüßen\n\ Dario, Gradido Server Admin\n\ "}; +const static char EmailText_emailVerificationOldElopageTransaction[] = { u8"\ +Hallo [first_name] [last_name],\n\ +\n\ +Da wir Dir für Deine Beiträge GradidoTransform gutschreiben und\n\ +du bisher noch kein Gradido-Konto hattest, haben wir eines für Dich eröffnet.\n\ +\n\ +Um es zu aktivieren klicke bitte auf den Link: [link]\n\ +oder kopiere den obigen Link in Dein Browserfenster.\n\ +\n\ +Wenn Du momentan kein Gradido-Konto haben möchtest, kannst Du auch diese E-Mail ignorieren.\n\ +\n\ +Mit freundlichen Grüßen\n\ +Dario, Gradido Server Admin\n\ +" }; + const static char EmailText_adminEmailVerification[] = { u8"\ Hallo [first_name] [last_name],\n\ \n\ @@ -132,6 +147,7 @@ Gradido Login-Server\n\ break; case EMAIL_USER_VERIFICATION_CODE: + case EMAIL_USER_REGISTER_OLD_ELOPAGE: case EMAIL_ADMIN_USER_VERIFICATION_CODE: case EMAIL_ADMIN_USER_VERIFICATION_CODE_RESEND: if (userTableModel.isNull() || mUser->getModel()->getEmail() == "") { @@ -152,6 +168,9 @@ Gradido Login-Server\n\ else if (mType == EMAIL_ADMIN_USER_VERIFICATION_CODE_RESEND) { messageTemplate = EmailText_adminEmailVerificationResend; } + else if (mType == EMAIL_USER_REGISTER_OLD_ELOPAGE) { + messageTemplate = EmailText_emailVerificationOldElopageTransaction; + } mailMessage->addContent( new Poco::Net::StringPartSource(replaceUserNamesAndLink( diff --git a/src/cpp/model/email/Email.h b/src/cpp/model/email/Email.h index cc155115a..63c32107f 100644 --- a/src/cpp/model/email/Email.h +++ b/src/cpp/model/email/Email.h @@ -24,15 +24,16 @@ namespace model { enum EmailType { - EMAIL_DEFAULT, - EMAIL_ERROR, - EMAIL_USER_VERIFICATION_CODE, - EMAIL_ADMIN_USER_VERIFICATION_CODE, - EMAIL_ADMIN_USER_VERIFICATION_CODE_RESEND, - EMAIL_USER_RESET_PASSWORD, - EMAIL_ADMIN_RESET_PASSWORD_REQUEST_WITHOUT_MEMORIZED_PASSPHRASE, - EMAIL_NOTIFICATION_TRANSACTION_CREATION, - EMAIL_NOTIFICATION_TRANSACTION_TRANSFER + EMAIL_DEFAULT = 1, + EMAIL_ERROR = 2, + EMAIL_USER_VERIFICATION_CODE = 3, + EMAIL_ADMIN_USER_VERIFICATION_CODE = 4, + EMAIL_ADMIN_USER_VERIFICATION_CODE_RESEND = 5, + EMAIL_USER_RESET_PASSWORD = 6, + EMAIL_ADMIN_RESET_PASSWORD_REQUEST_WITHOUT_MEMORIZED_PASSPHRASE = 7, + EMAIL_NOTIFICATION_TRANSACTION_CREATION = 8, + EMAIL_NOTIFICATION_TRANSACTION_TRANSFER = 9, + EMAIL_USER_REGISTER_OLD_ELOPAGE = 10 }; class Email: public ErrorList