Handle new direct register after check email, instead forward to show passphrase, only success message and link to dashboard

This commit is contained in:
Dario 2020-06-16 11:34:43 +02:00
parent 5439aaf259
commit 57cada7252
5 changed files with 164 additions and 106 deletions

View File

@ -14,6 +14,7 @@ enum PageState
{
MAIL_NOT_SEND,
ASK_VERIFICATION_CODE,
EMAIL_ACTIVATED,
KONTO_ALREADY_EXIST
};
#line 1 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header.cpsp"
@ -35,7 +36,7 @@ void CheckEmailPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::
if (_compressResponse) response.set("Content-Encoding", "gzip");
Poco::Net::HTMLForm form(request, request.stream());
#line 18 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
#line 19 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
const char* pageName = "Email Verification";
auto lm = LanguageManager::getInstance();
@ -44,36 +45,45 @@ void CheckEmailPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::
auto langCatalog = lm->getFreeCatalog(lang);
unsigned long long verificationCode = 0;
if(!form.empty()) {
auto langBtn = form.get("lang-btn", "");
auto verficationCodeStr = form.get("email-verification-code", "0");
try {
verificationCode = stoull(verficationCodeStr);
} catch(...) {
verificationCode = 0;
}
auto updatedLang = LANG_NULL;
if(langBtn != "") {
lang = chooseLanguage(request, langBtn);
langCatalog = lm->getFreeCatalog(lang);
}
}
// remove old cookies if exist
auto sm = SessionManager::getInstance();
sm->deleteLoginCookies(request, response, mSession);
PageState state = ASK_VERIFICATION_CODE;
if(mSession) {
getErrors(mSession);
if(mSession->getSessionState() < SESSION_STATE_EMAIL_VERIFICATION_SEND) {
//state = MAIL_NOT_SEND;
if(mSession && model::table::EMAIL_OPT_IN_REGISTER_DIRECT == mSession->getEmailVerificationType())
{
state = EMAIL_ACTIVATED;
}
else
{
if(!form.empty()) {
auto langBtn = form.get("lang-btn", "");
auto verficationCodeStr = form.get("email-verification-code", "0");
try {
verificationCode = stoull(verficationCodeStr);
} catch(...) {
verificationCode = 0;
}
auto updatedLang = LANG_NULL;
if(langBtn != "") {
lang = chooseLanguage(request, langBtn);
langCatalog = lm->getFreeCatalog(lang);
}
}
// remove old cookies if exist
auto sm = SessionManager::getInstance();
sm->deleteLoginCookies(request, response, mSession);
if(mSession) {
getErrors(mSession);
if(mSession->getSessionState() < SESSION_STATE_EMAIL_VERIFICATION_SEND) {
//state = MAIL_NOT_SEND;
}
}
auto hasErrors = errorCount() > 0;
if(!verificationCode) {
verificationCode = getLastGetAsU64(request.getURI());
}
}
auto hasErrors = errorCount() > 0;
if(!verificationCode) {
verificationCode = getLastGetAsU64(request.getURI());
}
#line 3 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header.cpsp"
bool withMaterialIcons = false;
@ -130,20 +140,20 @@ void CheckEmailPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::
responseStream << " <div class=\"row\">\n";
responseStream << " <div class=\"col-12 logo-section\">\n";
responseStream << " <a href=\"";
#line 60 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
#line 70 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
responseStream << ( ServerConfig::g_php_serverPath );
responseStream << "\" class=\"logo\">\n";
responseStream << " <picture>\n";
responseStream << "\t\t\t\t<source srcset=\"";
#line 62 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
#line 72 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
responseStream << ( ServerConfig::g_php_serverPath );
responseStream << "img/logo_schrift.webp\" type=\"image/webp\">\n";
responseStream << "\t\t\t\t<source srcset=\"";
#line 63 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
#line 73 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
responseStream << ( ServerConfig::g_php_serverPath );
responseStream << "img/logo_schrift.png\" type=\"image/png\"> \n";
responseStream << "\t\t\t\t<img src=\"";
#line 64 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
#line 74 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
responseStream << ( ServerConfig::g_php_serverPath );
responseStream << "img/logo_schrift.png\" alt=\"logo\" />\n";
responseStream << "\t\t\t</picture>\n";
@ -155,25 +165,25 @@ void CheckEmailPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::
responseStream << " <div class=\"grid\">\n";
responseStream << " <div class=\"center-ul-container\">\n";
responseStream << " ";
#line 73 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
#line 83 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
responseStream << ( getErrorsHtml() );
responseStream << "\n";
responseStream << " </div>\n";
responseStream << " <div class=\"grid-body\">\n";
responseStream << " <form action=\"";
#line 76 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
#line 86 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
responseStream << ( ServerConfig::g_php_serverPath );
responseStream << "account/checkEmail\" method=\"GET\">\n";
responseStream << " <div class=\"row pull-right-row\">\n";
responseStream << " <div class=\"equel-grid pull-right\">\n";
responseStream << " <div class=\"grid-body-small text-center\">\n";
responseStream << " <button id=\"flag-england\" name=\"lang-btn\" value=\"en\" title=\"English\" type=\"submit\" ";
#line 80 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
#line 90 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
if(lang != LANG_EN) { responseStream << "class=\"btn btn-outline-secondary flag-btn\"";
#line 80 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
#line 90 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
}
else { responseStream << "class=\"btn btn-secondary disabled flag-btn\" disabled";
#line 81 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
#line 91 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
} responseStream << ">\n";
responseStream << " <span class=\"flag-england\"></span>\n";
responseStream << " </button>\n";
@ -182,69 +192,89 @@ void CheckEmailPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::
responseStream << " <div class=\"equel-grid pull-right\">\n";
responseStream << " <div class=\"grid-body-small text-center\">\n";
responseStream << " <button id=\"flag-germany\" name=\"lang-btn\" value=\"de\" title=\"Deutsch\" type=\"submit\" ";
#line 88 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
#line 98 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
if(lang != LANG_DE) { responseStream << "class=\"btn btn-outline-secondary flag-btn\"";
#line 88 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
#line 98 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
}
else { responseStream << "class=\"btn btn-secondary disabled flag-btn\" disabled";
#line 89 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
#line 99 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
} responseStream << ">\n";
responseStream << " <span class=\"flag-germany\"></span>\n";
responseStream << " </button>\n";
responseStream << " </div>\n";
responseStream << " </div>\n";
responseStream << " </div>\n";
responseStream << "\t\t\t\t";
#line 105 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
if(EMAIL_ACTIVATED == state) { responseStream << "\n";
responseStream << "\t\t\t\t\t<p>";
#line 106 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
responseStream << ( langCatalog->gettext("Deine E-Mail wurde erfolgreich bestätigt. Du kannst nun Gradidos versenden.") );
responseStream << "</p>\n";
responseStream << "\t\t\t\t\t<a class=\"btn btn-sm btn-primary\" href=\"";
#line 107 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
responseStream << ( ServerConfig::g_php_serverPath );
responseStream << "\">";
#line 107 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
responseStream << ( langCatalog->gettext("Zur Startseite") );
responseStream << "</a>\n";
responseStream << "\t\t\t\t";
#line 108 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
} else { responseStream << "\n";
responseStream << " <div class=\"item-wrapper\">\n";
responseStream << " <div class=\"form-group\">\n";
responseStream << " <label for=\"email-verification-code\">";
#line 97 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
#line 111 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
responseStream << ( langCatalog->gettext("Bitte gebe deinen E-Mail Verification Code ein:"));
responseStream << "</label>\n";
responseStream << " <input type=\"number\" class=\"form-control\" name=\"email-verification-code\" id=\"email-verification-code\" placeholder=\"";
#line 98 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
#line 112 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
responseStream << ( langCatalog->gettext("Email Verification Code"));
responseStream << "\" ";
#line 98 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
#line 112 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
if(verificationCode) { responseStream << "value=\"";
#line 98 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
#line 112 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
responseStream << ( verificationCode );
responseStream << "\" ";
#line 98 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
#line 112 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
} responseStream << ">\n";
responseStream << " </div>\n";
responseStream << " <button type=\"submit\" class=\"btn btn-sm btn-primary\">";
#line 100 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
#line 114 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
responseStream << ( langCatalog->gettext("&Uuml;berpr&uuml;fe Code"));
responseStream << "</button>\n";
responseStream << " </div>\n";
responseStream << " </form>\n";
responseStream << " <!--<p class=\"margin-top-10\">\n";
responseStream << "\t\t\t\t";
#line 104 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
#line 118 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
responseStream << ( langCatalog->gettext("Du hast bisher keinen Code erhalten?"));
responseStream << "<br> \n";
responseStream << "\t\t\t\t";
#line 105 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
#line 119 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
responseStream << ( langCatalog->gettext("E-Mail erneut zuschicken (in Arbeit)"));
responseStream << "\n";
responseStream << "\t\t\t </p>-->\n";
responseStream << " <p class=\"margin-top-10\">\n";
responseStream << "\t\t\t\t";
#line 108 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
#line 122 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
responseStream << ( langCatalog->gettext("Funktioniert dein E-Mail Verification Code nicht?"));
responseStream << "<br>\n";
responseStream << "\t\t\t\t";
#line 109 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
#line 123 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
responseStream << ( langCatalog->gettext("Schicke uns eine E-Mail und wir k&uuml;mmern uns darum: "));
responseStream << "<br>\n";
responseStream << " <b><a href=\"mailto:coin@gradido.net?subject=Invalid E-Mail Verification Code&amp;body=Hallo Dario,%0D%0A%0D%0Amein E-Mail Verification-Code: ";
#line 110 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
#line 124 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
responseStream << ( verificationCode );
responseStream << " funktioniert nicht,%0D%0Akannst du das prüfen?%0D%0A%0D%0AMit freundlichen Grüßen%0D%0A\">";
#line 110 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
#line 124 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
responseStream << ( langCatalog->gettext("E-Mail an Support schicken"));
responseStream << "</a></b>\n";
responseStream << "\t\t\t </p>\n";
responseStream << "\t\t\t ";
#line 126 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
} responseStream << "\n";
responseStream << " </div>\n";
responseStream << " </div>\n";
responseStream << " </div>\n";

View File

@ -367,8 +367,13 @@ Poco::Net::HTTPRequestHandler* PageRequestHandlerFactory::handleCheckEmail(Sessi
if (0 == retUpdateEmailVerification) {
//printf("[PageRequestHandlerFactory::handleCheckEmail] timeUsed: %s\n", timeUsed.string().data());
SessionHTTPRequestHandler* pageRequestHandler = nullptr;
if (model::table::EMAIL_OPT_IN_REGISTER_DIRECT == session->getEmailVerificationType()) {
pageRequestHandler = new CheckEmailPage(session);
} else {
pageRequestHandler = new PassphrasePage(session);
}
auto pageRequestHandler = new PassphrasePage(session);
pageRequestHandler->setProfiler(timeUsed);
return pageRequestHandler;

View File

@ -422,62 +422,66 @@ bool Session::ifUserExist(const std::string& email)
int Session::updateEmailVerification(Poco::UInt64 emailVerificationCode)
{
const static char* funcName = "Session::updateEmailVerification";
lock(funcName);
Poco::ScopedLock<Poco::Mutex> _lock(mWorkMutex);
Profiler usedTime;
auto em = ErrorManager::getInstance();
if (mEmailVerificationCodeObject.isNull()) {
em->addError(new Error(funcName, "email verification object is zero"));
em->sendErrorsAsEmail();
unlock();
return -2;
}
auto emailVerificationCodeModel = mEmailVerificationCodeObject->getModel();
if(emailVerificationCodeModel->getCode() == emailVerificationCode) {
auto email_verification_code_model = mEmailVerificationCodeObject->getModel();
if(email_verification_code_model->getCode() == emailVerificationCode) {
if (mSessionUser && mSessionUser->getDBId() == 0) {
//addError(new Error("E-Mail Verification", "Benutzer wurde nicht richtig gespeichert, bitte wende dich an den Server-Admin"));
em->addError(new Error(funcName, "user exist with 0 as id"));
em->sendErrorsAsEmail();
unlock();
//return false;
return -2;
}
// load correct user from db
if (mNewUser.isNull() || mNewUser->getModel()->getID() != emailVerificationCodeModel->getUserId()) {
if (mNewUser.isNull() || mNewUser->getModel()->getID() != email_verification_code_model->getUserId()) {
mNewUser = controller::User::create();
if (1 != mNewUser->load(emailVerificationCodeModel->getUserId())) {
em->addError(new ParamError(funcName, "user load didn't return 1 with user_id ", emailVerificationCodeModel->getUserId()));
if (1 != mNewUser->load(email_verification_code_model->getUserId())) {
em->addError(new ParamError(funcName, "user load didn't return 1 with user_id ", email_verification_code_model->getUserId()));
em->sendErrorsAsEmail();
unlock();
return -2;
}
}
auto userModel = mNewUser->getModel();
bool firstEmailActivation = false;
if (emailVerificationCodeModel->getType() == model::table::EMAIL_OPT_IN_REGISTER || emailVerificationCodeModel->getType() == model::table::EMAIL_OPT_IN_EMPTY) {
firstEmailActivation = true;
auto user_model = mNewUser->getModel();
bool first_email_activation = false;
auto verification_type = email_verification_code_model->getType();
if (model::table::EMAIL_OPT_IN_REGISTER == verification_type ||
model::table::EMAIL_OPT_IN_EMPTY == verification_type ||
model::table::EMAIL_OPT_IN_REGISTER_DIRECT == verification_type) {
first_email_activation = true;
}
if (firstEmailActivation && userModel->isEmailChecked()) {
if (first_email_activation && user_model->isEmailChecked()) {
mSessionUser = new User(mNewUser);
addError(new Error(gettext("E-Mail Verification"), gettext("Du hast dein Konto bereits aktiviert!")), false);
unlock();
return 1;
}
if (firstEmailActivation) {
userModel->setEmailChecked(true);
userModel->updateIntoDB("email_checked", 1);
if (userModel->errorCount() > 0) {
userModel->sendErrorsAsEmail();
if (first_email_activation) {
user_model->setEmailChecked(true);
user_model->updateIntoDB("email_checked", 1);
if (user_model->errorCount() > 0) {
user_model->sendErrorsAsEmail();
}
unlock();
updateState(SESSION_STATE_EMAIL_VERIFICATION_CODE_CHECKED);
return 0;
}
if (emailVerificationCodeModel->getType() == model::table::EMAIL_OPT_IN_RESET_PASSWORD) {
unlock();
if (email_verification_code_model->getType() == model::table::EMAIL_OPT_IN_RESET_PASSWORD) {
if (mEmailVerificationCodeObject->deleteFromDB()) {
mEmailVerificationCodeObject.assign(nullptr);
}
@ -493,7 +497,7 @@ int Session::updateEmailVerification(Poco::UInt64 emailVerificationCode)
em->addError(new Error(funcName, "invalid code path"));
em->sendErrorsAsEmail();
unlock();
return -2;
/*if (updated_rows == 1) {
@ -522,11 +526,11 @@ int Session::updateEmailVerification(Poco::UInt64 emailVerificationCode)
else {
addError(new Error(gettext("E-Mail Verification"), gettext("Falscher Code f&uuml;r aktiven Login")));
//printf("[%s] time: %s\n", funcName, usedTime.string().data());
unlock();
return -1;
}
//printf("[%s] time: %s\n", funcName, usedTime.string().data());
unlock();
return 0;
}

View File

@ -142,6 +142,10 @@ public:
inline SessionStates getSessionState() { SessionStates s; lock("Session::getSessionState"); s = mState; unlock(); return s; }
inline Poco::UInt64 getEmailVerificationCode() { if (mEmailVerificationCodeObject.isNull()) return 0; return mEmailVerificationCodeObject->getModel()->getCode(); }
inline model::table::EmailOptInType getEmailVerificationType() {
if (mEmailVerificationCodeObject.isNull()) return model::table::EMAIL_OPT_IN_EMPTY;
return mEmailVerificationCodeObject->getModel()->getType();
}
inline bool isActive() { bool bret = false; lock("Session::isActive"); bret = mActive; unlock(); return bret; }
inline void setActive(bool active) { lock("Sessions::setActive"); mActive = active; unlock(); }

View File

@ -12,6 +12,7 @@ enum PageState
{
MAIL_NOT_SEND,
ASK_VERIFICATION_CODE,
EMAIL_ACTIVATED,
KONTO_ALREADY_EXIST
};
%>
@ -23,36 +24,45 @@ enum PageState
auto langCatalog = lm->getFreeCatalog(lang);
unsigned long long verificationCode = 0;
if(!form.empty()) {
auto langBtn = form.get("lang-btn", "");
auto verficationCodeStr = form.get("email-verification-code", "0");
try {
verificationCode = stoull(verficationCodeStr);
} catch(...) {
verificationCode = 0;
}
auto updatedLang = LANG_NULL;
if(langBtn != "") {
lang = chooseLanguage(request, langBtn);
langCatalog = lm->getFreeCatalog(lang);
}
}
// remove old cookies if exist
auto sm = SessionManager::getInstance();
sm->deleteLoginCookies(request, response, mSession);
PageState state = ASK_VERIFICATION_CODE;
if(mSession) {
getErrors(mSession);
if(mSession->getSessionState() < SESSION_STATE_EMAIL_VERIFICATION_SEND) {
//state = MAIL_NOT_SEND;
if(mSession && model::table::EMAIL_OPT_IN_REGISTER_DIRECT == mSession->getEmailVerificationType())
{
state = EMAIL_ACTIVATED;
}
else
{
if(!form.empty()) {
auto langBtn = form.get("lang-btn", "");
auto verficationCodeStr = form.get("email-verification-code", "0");
try {
verificationCode = stoull(verficationCodeStr);
} catch(...) {
verificationCode = 0;
}
auto updatedLang = LANG_NULL;
if(langBtn != "") {
lang = chooseLanguage(request, langBtn);
langCatalog = lm->getFreeCatalog(lang);
}
}
// remove old cookies if exist
auto sm = SessionManager::getInstance();
sm->deleteLoginCookies(request, response, mSession);
if(mSession) {
getErrors(mSession);
if(mSession->getSessionState() < SESSION_STATE_EMAIL_VERIFICATION_SEND) {
//state = MAIL_NOT_SEND;
}
}
auto hasErrors = errorCount() > 0;
if(!verificationCode) {
verificationCode = getLastGetAsU64(request.getURI());
}
}
auto hasErrors = errorCount() > 0;
if(!verificationCode) {
verificationCode = getLastGetAsU64(request.getURI());
}
%><%@ include file="header.cpsp" %>
<div class="authentication-theme auth-style_1">
<div class="row">
@ -92,6 +102,10 @@ enum PageState
</div>
</div>
</div>
<% if(EMAIL_ACTIVATED == state) { %>
<p><%= langCatalog->gettext("Deine E-Mail wurde erfolgreich bestätigt. Du kannst nun Gradidos versenden.") %></p>
<a class="btn btn-sm btn-primary" href="<%= ServerConfig::g_php_serverPath %>"><%= langCatalog->gettext("Zur Startseite") %></a>
<% } else { %>
<div class="item-wrapper">
<div class="form-group">
<label for="email-verification-code"><%= langCatalog->gettext("Bitte gebe deinen E-Mail Verification Code ein:")%></label>
@ -109,6 +123,7 @@ enum PageState
<%= langCatalog->gettext("Schicke uns eine E-Mail und wir k&uuml;mmern uns darum: ")%><br>
<b><a href="mailto:coin@gradido.net?subject=Invalid E-Mail Verification Code&amp;body=Hallo Dario,%0D%0A%0D%0Amein E-Mail Verification-Code: <%= verificationCode %> funktioniert nicht,%0D%0Akannst du das prüfen?%0D%0A%0D%0AMit freundlichen Grüßen%0D%0A"><%= langCatalog->gettext("E-Mail an Support schicken")%></a></b>
</p>
<% } %>
</div>
</div>
</div>