mirror of
https://github.com/IT4Change/gradido.git
synced 2025-12-13 07:45:54 +00:00
update email content type, using new email system for register and errors
This commit is contained in:
parent
feb3067f3a
commit
27bf842e6c
@ -250,11 +250,20 @@ int HandleElopageRequestTask::run()
|
||||
|
||||
*
|
||||
*/
|
||||
static const int valid_product_ids[] = { 36001, 43741, 43870, 43944, 43960, 49106 };
|
||||
bool valid_product_id = false;
|
||||
for (int i = 0; i < sizeof(valid_product_ids) / sizeof(int); i++) {
|
||||
if (valid_product_ids[i] == product_id) {
|
||||
valid_product_id = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
// only for product 36001 and 43741 create user accounts and send emails
|
||||
if (product_id == 36001 || product_id == 43741 || product_id == 43870 || product_id == 43944 || product_id == 43960 || product_id == 49106) {
|
||||
if (valid_product_id) {
|
||||
mEmail = mRequestData.get("payer[email]", "");
|
||||
mFirstName = mRequestData.get("payer[first_name]", "");
|
||||
mLastName = mRequestData.get("payer[last_name]", "");
|
||||
auto newUser = controller::User::create(mEmail, mFirstName, mLastName);
|
||||
|
||||
/* printf("LastName: %s\n", mLastName.data());
|
||||
for (int i = 0; i < mLastName.size(); i++) {
|
||||
@ -284,8 +293,8 @@ int HandleElopageRequestTask::run()
|
||||
|
||||
// prepare email in advance
|
||||
// create connection to email server
|
||||
UniLib::controller::TaskPtr prepareEmail(new PrepareEmailTask(ServerConfig::g_CPUScheduler));
|
||||
prepareEmail->scheduleTask(prepareEmail);
|
||||
// UniLib::controller::TaskPtr prepareEmail(new PrepareEmailTask(ServerConfig::g_CPUScheduler));
|
||||
// prepareEmail->scheduleTask(prepareEmail);
|
||||
|
||||
// write user entry into db
|
||||
writeUserIntoDB();
|
||||
@ -338,7 +347,7 @@ int HandleElopageRequestTask::run()
|
||||
if (noEMail != 1) {
|
||||
|
||||
// send email to user
|
||||
auto message = new Poco::Net::MailMessage;
|
||||
/*auto message = new Poco::Net::MailMessage;
|
||||
|
||||
message->addRecipient(Poco::Net::MailRecipient(Poco::Net::MailRecipient::PRIMARY_RECIPIENT, mEmail));
|
||||
message->setSubject("Gradido: E-Mail Verification");
|
||||
@ -354,10 +363,12 @@ int HandleElopageRequestTask::run()
|
||||
ss << "Dario, Gradido Server Admin" << std::endl;
|
||||
|
||||
message->addContent(new Poco::Net::StringPartSource(ss.str()));
|
||||
|
||||
UniLib::controller::TaskPtr sendEmail(new SendEmailTask(message, ServerConfig::g_CPUScheduler, 1));
|
||||
sendEmail->setParentTaskPtrInArray(prepareEmail, 0);
|
||||
sendEmail->setParentTaskPtrInArray(saveEmailVerificationCode, 1);
|
||||
*/
|
||||
//UniLib::controller::TaskPtr sendEmail(new SendEmailTask(message, ServerConfig::g_CPUScheduler, 1));
|
||||
//Email(AutoPtr<controller::EmailVerificationCode> emailVerification, AutoPtr<controller::User> user, EmailType type);
|
||||
UniLib::controller::TaskPtr sendEmail(new SendEmailTask(new model::Email(emailVerification, newUser, model::EMAIL_USER_VERIFICATION_CODE), ServerConfig::g_CPUScheduler, 1));
|
||||
//sendEmail->setParentTaskPtrInArray(prepareEmail, 0);
|
||||
sendEmail->setParentTaskPtrInArray(saveEmailVerificationCode, 0);
|
||||
sendEmail->scheduleTask(sendEmail);
|
||||
}
|
||||
}
|
||||
|
||||
@ -4,8 +4,14 @@
|
||||
#include "../Crypto/Obfus_array.h"
|
||||
#include "../Crypto/DRRandom.h"
|
||||
|
||||
#include "../SingletonManager/LanguageManager.h"
|
||||
|
||||
#include "Poco/Net/SecureSMTPClientSession.h"
|
||||
#include "Poco/Net/SSLException.h"
|
||||
|
||||
|
||||
EmailManager::EmailManager()
|
||||
: mInitalized(false), mDisableEmail(false)
|
||||
: Thread("emails", false), mInitalized(false), mDisableEmail(false)
|
||||
{
|
||||
|
||||
|
||||
@ -38,6 +44,7 @@ bool EmailManager::init(const Poco::Util::LayeredConfiguration& cfg)
|
||||
printf("email account not set in config: %s\n", ex.displayText().data());
|
||||
return false;
|
||||
}
|
||||
Thread::init("emails");
|
||||
mInitalized = true;
|
||||
|
||||
DISASM_FALSERET;
|
||||
@ -57,5 +64,71 @@ void EmailManager::exit()
|
||||
|
||||
int EmailManager::ThreadFunction()
|
||||
{
|
||||
// prepare connection to email server
|
||||
if (ServerConfig::g_disableEmail) return 0;
|
||||
|
||||
if (mPendingEmails.empty()) return 0;
|
||||
|
||||
auto lm = LanguageManager::getInstance();
|
||||
|
||||
Poco::Net::SecureSMTPClientSession mailClientSession(mEmailAccount.url, mEmailAccount.port);
|
||||
mailClientSession.login();
|
||||
try {
|
||||
mailClientSession.startTLS(ServerConfig::g_SSL_CLient_Context);
|
||||
mailClientSession.login(Poco::Net::SMTPClientSession::AUTH_LOGIN, mEmailAccount.username, mEmailAccount.password);
|
||||
}
|
||||
catch (Poco::Net::SSLException& ex) {
|
||||
printf("[PrepareEmailTask] ssl certificate error: %s\nPlease make sure you have cacert.pem (CA/root certificates) next to binary from https://curl.haxx.se/docs/caextract.html\n", ex.displayText().data());
|
||||
return -1;
|
||||
}
|
||||
|
||||
model::Email* email = nullptr;
|
||||
Poco::AutoPtr<LanguageCatalog> catalogs[2];
|
||||
|
||||
// if email list empty, wait 500ms x time before exit thread and closing connection
|
||||
int timeoutWaits = 20;
|
||||
|
||||
while (mPendingEmails.pop(email) || timeoutWaits > 0) {
|
||||
if (email) {
|
||||
Poco::Net::MailMessage mailMessage;
|
||||
mailMessage.setSender(mEmailAccount.sender);
|
||||
Languages lang_code = ServerConfig::g_default_locale;
|
||||
if (email->getUser()) {
|
||||
Poco::AutoPtr<model::table::User> userModel = email->getUser()->getModel();
|
||||
|
||||
if (!userModel.isNull()) {
|
||||
userModel->lock("EmailManager::ThreadFunction");
|
||||
lang_code = LanguageManager::languageFromString(userModel->getLanguageKey());
|
||||
userModel->unlock();
|
||||
if (lang_code > LANG_COUNT) lang_code = ServerConfig::g_default_locale;
|
||||
}
|
||||
}
|
||||
if (catalogs[lang_code].isNull()) {
|
||||
catalogs[lang_code] = lm->getFreeCatalog(lang_code);
|
||||
}
|
||||
if (email->draft(&mailMessage, catalogs[lang_code])) {
|
||||
|
||||
mailClientSession.sendMessage(mailMessage);
|
||||
}
|
||||
else {
|
||||
// error drafting email, shouldn't happend
|
||||
printf("[EmailManager::ThreadFunction] Error drafting email\n");
|
||||
}
|
||||
delete email;
|
||||
email = nullptr;
|
||||
}
|
||||
if (mPendingEmails.empty()) {
|
||||
Poco::Thread::sleep(500);
|
||||
timeoutWaits--;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
mailClientSession.close();
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -29,7 +29,7 @@ public:
|
||||
|
||||
inline const std::string& getAdminReceiver() { return mEmailAccount.admin_receiver; }
|
||||
|
||||
inline void addEmail(model::Email* email) { mPendingEmails.push(email); }
|
||||
inline void addEmail(model::Email* email) { mPendingEmails.push(email); condSignal();}
|
||||
|
||||
protected:
|
||||
EmailManager();
|
||||
|
||||
@ -6,6 +6,10 @@
|
||||
|
||||
#include "../lib/ErrorList.h"
|
||||
|
||||
#include "../model/Email.h"
|
||||
|
||||
#include "EmailManager.h"
|
||||
|
||||
|
||||
ErrorManager* ErrorManager::getInstance()
|
||||
{
|
||||
@ -71,11 +75,11 @@ int ErrorManager::getErrors(ErrorList* send)
|
||||
|
||||
void ErrorManager::sendErrorsAsEmail()
|
||||
{
|
||||
auto message = new Poco::Net::MailMessage();
|
||||
/*auto message = new Poco::Net::MailMessage();
|
||||
message->setSender("gradido_loginServer@gradido.net");
|
||||
message->addRecipient(Poco::Net::MailRecipient(Poco::Net::MailRecipient::PRIMARY_RECIPIENT, "***REMOVED***"));
|
||||
message->setSubject("Error from Gradido Login Server");
|
||||
|
||||
*/
|
||||
std::string content;
|
||||
mWorkingMutex.lock();
|
||||
for (auto it1 = mErrorsMap.begin(); it1 != mErrorsMap.end(); it1++) {
|
||||
@ -95,8 +99,12 @@ void ErrorManager::sendErrorsAsEmail()
|
||||
mErrorsMap.clear();
|
||||
|
||||
mWorkingMutex.unlock();
|
||||
message->addContent(new Poco::Net::StringPartSource(content));
|
||||
UniLib::controller::TaskPtr sendErrorMessageTask(new SendErrorMessage(message, ServerConfig::g_CPUScheduler));
|
||||
sendErrorMessageTask->scheduleTask(sendErrorMessageTask);
|
||||
|
||||
auto email = new model::Email(content, model::EMAIL_ERROR);
|
||||
EmailManager::getInstance()->addEmail(email);
|
||||
|
||||
//message->addContent(new Poco::Net::StringPartSource(content));
|
||||
//UniLib::controller::TaskPtr sendErrorMessageTask(new SendErrorMessage(message, ServerConfig::g_CPUScheduler));
|
||||
//sendErrorMessageTask->scheduleTask(sendErrorMessageTask);
|
||||
|
||||
}
|
||||
@ -35,6 +35,14 @@ namespace controller {
|
||||
return Poco::AutoPtr<EmailVerificationCode>(result);
|
||||
}
|
||||
|
||||
Poco::AutoPtr<EmailVerificationCode> EmailVerificationCode::create()
|
||||
{
|
||||
auto code = createEmailVerificationCode();
|
||||
auto db = new model::table::EmailOptIn(code);
|
||||
auto result = new EmailVerificationCode(db);
|
||||
return Poco::AutoPtr<EmailVerificationCode>(result);
|
||||
}
|
||||
|
||||
Poco::UInt64 EmailVerificationCode::createEmailVerificationCode()
|
||||
{
|
||||
Poco::UInt64 resultCode;
|
||||
|
||||
@ -13,6 +13,7 @@ namespace controller {
|
||||
~EmailVerificationCode();
|
||||
|
||||
static Poco::AutoPtr<EmailVerificationCode> create(int user_id);
|
||||
static Poco::AutoPtr<EmailVerificationCode> create();
|
||||
inline Poco::AutoPtr<model::table::EmailOptIn> getModel() { return _getModel<model::table::EmailOptIn>(); }
|
||||
|
||||
std::string getLink();
|
||||
|
||||
@ -19,8 +19,8 @@ namespace controller {
|
||||
void release();
|
||||
protected:
|
||||
|
||||
template<class T>
|
||||
Poco::AutoPtr<T> _getModel();
|
||||
template<class T> Poco::AutoPtr<T> _getModel();
|
||||
template<class T> const T* _getModel() const;
|
||||
|
||||
// for poco auto ptr
|
||||
int mReferenceCount;
|
||||
@ -34,12 +34,26 @@ namespace controller {
|
||||
template<class T>
|
||||
Poco::AutoPtr<T> TableControllerBase::_getModel() {
|
||||
// TODO: Maybe update name for error search
|
||||
lock("TableControllerBase::getModel");
|
||||
lock("TableControllerBase::_getModel");
|
||||
T* result = static_cast<T*>(mDBModel.get());
|
||||
unlock();
|
||||
return Poco::AutoPtr<T>(result, true);
|
||||
}
|
||||
|
||||
template<class T>
|
||||
const T* TableControllerBase::_getModel() const {
|
||||
//lock("TableControllerBase::_getModel const");
|
||||
if (mDBModel.isNull()) {
|
||||
//unlock();
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
const T* result = static_cast<const T*>(mDBModel.get());
|
||||
//unlock();
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
#endif //GRADIDO_LOGIN_SERVER_MODEL_TABLE_CONTROLLER_BASE_INCLUDE
|
||||
@ -20,6 +20,7 @@ namespace controller {
|
||||
int load(const unsigned char* pubkey_array);
|
||||
|
||||
inline Poco::AutoPtr<model::table::User> getModel() { return _getModel<model::table::User>(); }
|
||||
inline const model::table::User* getModel() const { return _getModel<model::table::User>(); }
|
||||
|
||||
protected:
|
||||
User(model::table::User* dbModel);
|
||||
|
||||
@ -2,7 +2,10 @@
|
||||
|
||||
#include "../ServerConfig.h"
|
||||
|
||||
#include "Poco/Net/MailMessage.h"
|
||||
//#include "Poco/Net/MailMessage.h"
|
||||
#include "Poco/Net/MediaType.h"
|
||||
|
||||
#include "../SingletonManager/EmailManager.h"
|
||||
|
||||
SendErrorMessage::~SendErrorMessage()
|
||||
{
|
||||
@ -125,11 +128,12 @@ std::string ErrorList::getErrorsHtml()
|
||||
|
||||
void ErrorList::sendErrorsAsEmail(std::string rawHtml/* = ""*/)
|
||||
{
|
||||
auto message = new Poco::Net::MailMessage();
|
||||
auto em = EmailManager::getInstance();
|
||||
/*auto message = new Poco::Net::MailMessage();
|
||||
message->setSender("gradido_loginServer@gradido.net");
|
||||
message->addRecipient(Poco::Net::MailRecipient(Poco::Net::MailRecipient::PRIMARY_RECIPIENT, "***REMOVED***"));
|
||||
message->setSubject("Error from Gradido Login Server");
|
||||
|
||||
*/
|
||||
std::string content;
|
||||
while (mErrorStack.size() > 0) {
|
||||
auto error = mErrorStack.top();
|
||||
@ -137,12 +141,18 @@ void ErrorList::sendErrorsAsEmail(std::string rawHtml/* = ""*/)
|
||||
content += error->getString();
|
||||
delete error;
|
||||
}
|
||||
auto email = new model::Email(content, model::EMAIL_ERROR);
|
||||
|
||||
message->addContent(new Poco::Net::StringPartSource(content));
|
||||
//message->addContent(new Poco::Net::StringPartSource(content));
|
||||
if (rawHtml != "") {
|
||||
message->addContent(new Poco::Net::StringPartSource(rawHtml));
|
||||
Poco::Net::MediaType mt("text", "html");
|
||||
mt.setParameter("charset", "utf-8");
|
||||
|
||||
email->addContent(new Poco::Net::StringPartSource(rawHtml, mt.toString()));
|
||||
}
|
||||
UniLib::controller::TaskPtr sendErrorMessageTask(new SendErrorMessage(message, ServerConfig::g_CPUScheduler));
|
||||
sendErrorMessageTask->scheduleTask(sendErrorMessageTask);
|
||||
em->addEmail(email);
|
||||
|
||||
//UniLib::controller::TaskPtr sendErrorMessageTask(new SendErrorMessage(message, ServerConfig::g_CPUScheduler));
|
||||
//sendErrorMessageTask->scheduleTask(sendErrorMessageTask);
|
||||
|
||||
}
|
||||
@ -1,6 +1,8 @@
|
||||
#include "Email.h"
|
||||
#include "../SingletonManager/EmailManager.h"
|
||||
|
||||
#include "Poco/Net/MediaType.h"
|
||||
|
||||
namespace model {
|
||||
|
||||
const static char EmailText_emailVerification[] = {u8"\
|
||||
@ -46,6 +48,14 @@ Gradido Login Server\
|
||||
{
|
||||
}
|
||||
|
||||
Email::~Email()
|
||||
{
|
||||
while (mAdditionalStringPartSrcs.size() > 0) {
|
||||
delete mAdditionalStringPartSrcs.front();
|
||||
mAdditionalStringPartSrcs.pop();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
bool Email::draft(Net::MailMessage* mailMessage, LanguageCatalog* langCatalog)
|
||||
{
|
||||
@ -58,18 +68,21 @@ Gradido Login Server\
|
||||
static const char* functionName = "Email::draft";
|
||||
std::string content;
|
||||
|
||||
Poco::Net::MediaType mt("text", "plain");
|
||||
mt.setParameter("charset", "utf-8");
|
||||
|
||||
switch (mType) {
|
||||
case EMAIL_DEFAULT:
|
||||
mailMessage->addRecipient(adminRecipient);
|
||||
mailMessage->setSubject(langCatalog->gettext_str("Default Email Subject"));
|
||||
mailMessage->addContent(new Poco::Net::StringPartSource(langCatalog->gettext_str("Empty Email Content")));
|
||||
return true;
|
||||
mailMessage->addContent(new Poco::Net::StringPartSource(langCatalog->gettext_str("Empty Email Content"), mt.toString()));
|
||||
break;
|
||||
|
||||
case EMAIL_ERROR:
|
||||
mailMessage->addRecipient(adminRecipient);
|
||||
mailMessage->setSubject(langCatalog->gettext_str("Error from Gradido Login Server"));
|
||||
mailMessage->addContent(new Poco::Net::StringPartSource(mErrorHtml));
|
||||
return true;
|
||||
mailMessage->addContent(new Poco::Net::StringPartSource(mErrorHtml, mt.toString()));
|
||||
break;
|
||||
|
||||
case EMAIL_USER_VERIFICATION_CODE:
|
||||
if (userTableModel.isNull() || mUser->getModel()->getEmail() == "") {
|
||||
@ -89,9 +102,9 @@ Gradido Login Server\
|
||||
userTableModel->getFirstName(),
|
||||
userTableModel->getLastName(),
|
||||
mEmailVerificationCode->getLink()
|
||||
))
|
||||
), mt.toString())
|
||||
);
|
||||
return true;
|
||||
break;
|
||||
case EMAIL_USER_RESET_PASSWORD:
|
||||
if (userTableModel.isNull() || mUser->getModel()->getEmail() == "") {
|
||||
addError(new Error(functionName, "no receiver email set for user reset password email"));
|
||||
@ -110,9 +123,9 @@ Gradido Login Server\
|
||||
userTableModel->getFirstName(),
|
||||
userTableModel->getLastName(),
|
||||
mEmailVerificationCode->getLink()
|
||||
))
|
||||
), mt.toString())
|
||||
);
|
||||
return true;
|
||||
break;
|
||||
case EMAIL_ADMIN_RESET_PASSWORD_REQUEST_WITHOUT_MEMORIZED_PASSPHRASE:
|
||||
if (userTableModel.isNull() || mUser->getModel()->getEmail() == "") {
|
||||
addError(new Error(functionName, "no user email set for admin reset password email"));
|
||||
@ -125,13 +138,18 @@ Gradido Login Server\
|
||||
new Poco::Net::StringPartSource(replaceEmail(
|
||||
EmailText_adminEmailResetPassword,
|
||||
userTableModel->getEmail()
|
||||
))
|
||||
), mt.toString())
|
||||
);
|
||||
return true;
|
||||
break;
|
||||
default: return false;
|
||||
}
|
||||
|
||||
return false;
|
||||
while (mAdditionalStringPartSrcs.size() > 0) {
|
||||
mailMessage->addContent(mAdditionalStringPartSrcs.front());
|
||||
mAdditionalStringPartSrcs.pop();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
std::string Email::replaceUserNamesAndLink(const char* src, const std::string& first_name, const std::string& last_name, const std::string& link)
|
||||
@ -142,7 +160,7 @@ Gradido Login Server\
|
||||
|
||||
int findPos = result.find("[first_name]", findCursor);
|
||||
if (findPos != result.npos) {
|
||||
findCursor = findPos + 13;
|
||||
findCursor = findPos + first_name.size();
|
||||
result.replace(findPos, 12, first_name);
|
||||
}
|
||||
else {
|
||||
@ -151,7 +169,7 @@ Gradido Login Server\
|
||||
|
||||
findPos = result.find("[last_name]", findCursor);
|
||||
if (findPos != result.npos) {
|
||||
findCursor = findPos + 12;
|
||||
findCursor = findPos + last_name.size();
|
||||
result.replace(findPos, 11, last_name);
|
||||
}
|
||||
else {
|
||||
@ -160,7 +178,7 @@ Gradido Login Server\
|
||||
|
||||
findPos = result.find("[link]", findCursor);
|
||||
if (findPos != result.npos) {
|
||||
findCursor = findPos + 7;
|
||||
findCursor = findPos + link.size();
|
||||
result.replace(findPos, 6, link);
|
||||
}
|
||||
else {
|
||||
|
||||
@ -37,10 +37,13 @@ namespace model {
|
||||
Email(AutoPtr<controller::EmailVerificationCode> emailVerification, AutoPtr<controller::User> user, EmailType type);
|
||||
//! \param errors copy errors into own memory
|
||||
Email(const std::string& errorHtml, EmailType type);
|
||||
~Email();
|
||||
|
||||
inline EmailType getType() { return mType; }
|
||||
inline controller::User* getUser() { if (!mUser.isNull()) return mUser.get(); return nullptr; }
|
||||
|
||||
bool draft(Net::MailMessage* mailMessage, LanguageCatalog* langCatalog);
|
||||
inline void addContent(Poco::Net::StringPartSource* str_content) { mAdditionalStringPartSrcs.push(str_content); }
|
||||
|
||||
protected:
|
||||
std::string replaceUserNamesAndLink(const char* src, const std::string& first_name, const std::string& last_name, const std::string& link);
|
||||
@ -50,6 +53,8 @@ namespace model {
|
||||
AutoPtr<controller::User> mUser;
|
||||
std::string mErrorHtml;
|
||||
EmailType mType;
|
||||
|
||||
std::queue<Poco::Net::StringPartSource*> mAdditionalStringPartSrcs;
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@ -16,6 +16,8 @@
|
||||
|
||||
#include "../lib/JsonRequest.h"
|
||||
|
||||
#include "../controller/User.h"
|
||||
|
||||
|
||||
#include "sodium.h"
|
||||
|
||||
@ -169,6 +171,7 @@ bool Session::createUser(const std::string& first_name, const std::string& last_
|
||||
}*/
|
||||
|
||||
// check if user with that email already exist
|
||||
|
||||
auto dbConnection = ConnectionManager::getInstance()->getConnection(CONNECTION_MYSQL_LOGIN_SERVER);
|
||||
Poco::Data::Statement select(dbConnection);
|
||||
select << "SELECT email from users where email = ?;", useRef(email);
|
||||
@ -183,11 +186,12 @@ bool Session::createUser(const std::string& first_name, const std::string& last_
|
||||
}
|
||||
|
||||
mSessionUser = new User(email.data(), first_name.data(), last_name.data());
|
||||
mNewUser = controller::User::create(email, first_name, last_name);
|
||||
updateTimeout();
|
||||
|
||||
// Prepare E-Mail
|
||||
UniLib::controller::TaskPtr prepareEmail(new PrepareEmailTask(ServerConfig::g_CPUScheduler));
|
||||
prepareEmail->scheduleTask(prepareEmail);
|
||||
//UniLib::controller::TaskPtr prepareEmail(new PrepareEmailTask(ServerConfig::g_CPUScheduler));
|
||||
//prepareEmail->scheduleTask(prepareEmail);
|
||||
|
||||
// create user crypto key
|
||||
UniLib::controller::TaskPtr cryptoKeyTask(new UserCreateCryptoKey(mSessionUser, password, ServerConfig::g_CryptoCPUScheduler));
|
||||
@ -201,6 +205,8 @@ bool Session::createUser(const std::string& first_name, const std::string& last_
|
||||
writeUserIntoDB->scheduleTask(writeUserIntoDB);
|
||||
|
||||
createEmailVerificationCode();
|
||||
auto emailVerificationCodeObject = controller::EmailVerificationCode::create();
|
||||
emailVerificationCodeObject->getModel()->setCode(mEmailVerificationCode);
|
||||
|
||||
UniLib::controller::TaskPtr writeEmailVerification(new WriteEmailVerification(mSessionUser, mEmailVerificationCode, ServerConfig::g_CPUScheduler, 1));
|
||||
writeEmailVerification->setParentTaskPtrInArray(writeUserIntoDB, 0);
|
||||
@ -216,7 +222,7 @@ bool Session::createUser(const std::string& first_name, const std::string& last_
|
||||
*/
|
||||
|
||||
// depends on writeUser because need user_id, write email verification into db
|
||||
auto message = new Poco::Net::MailMessage;
|
||||
/*auto message = new Poco::Net::MailMessage;
|
||||
Poco::Net::MediaType mt("text", "plain");
|
||||
mt.setParameter("charset", "utf-8");
|
||||
message->setContentType(mt);
|
||||
@ -235,14 +241,15 @@ bool Session::createUser(const std::string& first_name, const std::string& last_
|
||||
|
||||
|
||||
message->addContent(new Poco::Net::StringPartSource(ss.str()));
|
||||
|
||||
UniLib::controller::TaskPtr sendEmail(new SendEmailTask(message, ServerConfig::g_CPUScheduler, 1));
|
||||
sendEmail->setParentTaskPtrInArray(prepareEmail, 0);
|
||||
sendEmail->setParentTaskPtrInArray(writeEmailVerification, 1);
|
||||
*/
|
||||
//UniLib::controller::TaskPtr sendEmail(new SendEmailTask(message, ServerConfig::g_CPUScheduler, 1));
|
||||
//Email(AutoPtr<controller::EmailVerificationCode> emailVerification, AutoPtr<controller::User> user, EmailType type);
|
||||
UniLib::controller::TaskPtr sendEmail(new SendEmailTask(new model::Email(emailVerificationCodeObject, mNewUser, model::EMAIL_USER_VERIFICATION_CODE), ServerConfig::g_CPUScheduler, 1));
|
||||
//sendEmail->setParentTaskPtrInArray(prepareEmail, 0);
|
||||
sendEmail->setParentTaskPtrInArray(writeEmailVerification, 0);
|
||||
sendEmail->setFinishCommand(new SessionStateUpdateCommand(SESSION_STATE_EMAIL_VERIFICATION_SEND, this));
|
||||
sendEmail->scheduleTask(sendEmail);
|
||||
|
||||
|
||||
// write user into db
|
||||
// generate and write email verification into db
|
||||
// send email
|
||||
|
||||
@ -12,6 +12,12 @@ namespace model {
|
||||
|
||||
}
|
||||
|
||||
EmailOptIn::EmailOptIn(const Poco::UInt64& code)
|
||||
: mUserId(0), mEmailVerificationCode(code)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
EmailOptIn::EmailOptIn()
|
||||
: mUserId(0), mEmailVerificationCode(0)
|
||||
{
|
||||
|
||||
@ -12,6 +12,7 @@ namespace model {
|
||||
{
|
||||
public:
|
||||
EmailOptIn(const Poco::UInt64& code, int user_id);
|
||||
EmailOptIn(const Poco::UInt64& code);
|
||||
EmailOptIn();
|
||||
~EmailOptIn();
|
||||
|
||||
|
||||
@ -2,21 +2,33 @@
|
||||
#include "PrepareEmailTask.h"
|
||||
#include "../lib/Profiler.h"
|
||||
#include "../SingletonManager/ErrorManager.h"
|
||||
#include "../SingletonManager/EmailManager.h"
|
||||
#include "../ServerConfig.h"
|
||||
|
||||
#include "Poco/Net/MediaType.h"
|
||||
|
||||
SendEmailTask::SendEmailTask(Poco::Net::MailMessage* mailMessage, UniLib::controller::CPUSheduler* cpuScheduler, size_t additionalTaskDependenceCount/* = 0*/)
|
||||
: UniLib::controller::CPUTask(cpuScheduler, additionalTaskDependenceCount+1), mMailMessage(mailMessage)
|
||||
: UniLib::controller::CPUTask(cpuScheduler, additionalTaskDependenceCount+1), mMailMessage(mailMessage), mEmail(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
SendEmailTask::SendEmailTask(model::Email*email, UniLib::controller::CPUSheduler* cpuScheduler, size_t additionalTaskDependenceCount/* = 0*/)
|
||||
: UniLib::controller::CPUTask(cpuScheduler, additionalTaskDependenceCount), mMailMessage(nullptr), mEmail(email)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
SendEmailTask::~SendEmailTask()
|
||||
{
|
||||
if (mMailMessage) {
|
||||
delete mMailMessage;
|
||||
mMailMessage = nullptr;
|
||||
}
|
||||
if (mEmail) {
|
||||
delete mEmail;
|
||||
mEmail = nullptr;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
int SendEmailTask::run()
|
||||
@ -27,17 +39,25 @@ int SendEmailTask::run()
|
||||
auto er = ErrorManager::getInstance();
|
||||
auto parent = getParent(0);
|
||||
|
||||
if (strcmp(parent->getResourceType(), "PrepareEmailTask") != 0) {
|
||||
er->addError(new Error("SendEmailTask", "first parent isn't PrepareEmailTask"));
|
||||
er->sendErrorsAsEmail();
|
||||
return -1;
|
||||
if (mMailMessage) {
|
||||
|
||||
if (strcmp(parent->getResourceType(), "PrepareEmailTask") != 0) {
|
||||
er->addError(new Error("SendEmailTask", "first parent isn't PrepareEmailTask"));
|
||||
er->sendErrorsAsEmail();
|
||||
return -1;
|
||||
}
|
||||
PrepareEmailTask* prepare = (PrepareEmailTask*)&(*parent);
|
||||
mMailMessage->setSender(ServerConfig::g_EmailAccount.sender);
|
||||
|
||||
if (prepare->send(mMailMessage)) {
|
||||
er->sendErrorsAsEmail();
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
PrepareEmailTask* prepare = (PrepareEmailTask*)&(*parent);
|
||||
mMailMessage->setSender(ServerConfig::g_EmailAccount.sender);
|
||||
|
||||
if (prepare->send(mMailMessage)) {
|
||||
er->sendErrorsAsEmail();
|
||||
return -1;
|
||||
else if (mEmail) {
|
||||
auto em = EmailManager::getInstance();
|
||||
em->addEmail(mEmail);
|
||||
mEmail = nullptr;
|
||||
}
|
||||
//printf("[SendEmailTask] time: %s\n", timeUsed.string().data());
|
||||
return 0;
|
||||
|
||||
@ -4,6 +4,8 @@
|
||||
#include "CPUTask.h"
|
||||
#include "Poco/Net/MailMessage.h"
|
||||
|
||||
#include "../model/Email.h"
|
||||
|
||||
/*
|
||||
* @author: Dario Rekowski
|
||||
*
|
||||
@ -17,6 +19,7 @@ class SendEmailTask : public UniLib::controller::CPUTask
|
||||
public:
|
||||
|
||||
SendEmailTask(Poco::Net::MailMessage* mailMessage, UniLib::controller::CPUSheduler* cpuScheduler, size_t additionalTaskDependenceCount = 0);
|
||||
SendEmailTask(model::Email* email, UniLib::controller::CPUSheduler* cpuScheduler, size_t additionalTaskDependenceCount = 0);
|
||||
virtual ~SendEmailTask();
|
||||
|
||||
virtual int run();
|
||||
@ -26,7 +29,7 @@ protected:
|
||||
|
||||
private:
|
||||
Poco::Net::MailMessage* mMailMessage;
|
||||
|
||||
model::Email* mEmail;
|
||||
};
|
||||
|
||||
|
||||
|
||||
@ -165,6 +165,8 @@ int SigningTransaction::run() {
|
||||
return -9;
|
||||
}
|
||||
|
||||
//sendErrorsAsEmail("<html><head><title>Hallo</title></head><body><font color='red'>Rote Test </font></body>");
|
||||
|
||||
Poco::JSON::Object object = *parsedJson.extract<Poco::JSON::Object::Ptr>();
|
||||
auto state = object.get("state");
|
||||
std::string stateString = state.convert<std::string>();
|
||||
|
||||
@ -67,7 +67,10 @@ namespace UniLib {
|
||||
//int status = SDL_CondWait(t->condition, t->mutex);
|
||||
try {
|
||||
condition.wait(mutex);
|
||||
if (exitCalled) return;
|
||||
if (exitCalled) {
|
||||
threadUnlock();
|
||||
return;
|
||||
}
|
||||
int ret = ThreadFunction();
|
||||
threadUnlock();
|
||||
if (ret)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user