adding jsonCreateUser and email for register accounts throw old elopage transaction

This commit is contained in:
Dario 2020-04-13 13:30:11 +02:00
parent d9769d95a1
commit d1003e2c61
6 changed files with 96 additions and 20 deletions

View File

@ -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<Poco::JSON::Object::Ptr>();
/// 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();
}

View File

@ -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;
}

View File

@ -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");

View File

@ -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();

View File

@ -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(

View File

@ -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