Admin Email Verification resend via json hinzugefügt

This commit is contained in:
Dario 2020-03-19 22:08:14 +01:00
parent 750f73aa6b
commit 458c99958f
7 changed files with 191 additions and 1 deletions

View File

@ -0,0 +1,150 @@
#include "JsonAdminEmailVerificationResend.h"
#include "Poco/URI.h"
#include "../SingletonManager/SessionManager.h"
#include "../SingletonManager/EmailManager.h"
#include "../controller/User.h"
Poco::JSON::Object* JsonAdminEmailVerificationResend::handle(Poco::Dynamic::Var params)
{
std::string email;
int session_id = 0;
Poco::JSON::Object* result = new Poco::JSON::Object;
bool parameterReaded = false;
// 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("session_id").convert(session_id);
parameterReaded = true;
}
catch (Poco::Exception& ex) {
printf("[JsonGetRunningUserTasks::handle] try to use params as jsonObject: %s\n", ex.displayText().data());
result->set("state", "error");
result->set("msg", "json exception");
result->set("details", ex.displayText());
}
}
else if (params.isStruct()) {
auto _email = params["email"];
auto _session_id = params["session_id"];
parameterReaded = true;
//std::string miau = params["miau"];
}
else if (params.isVector()) {
const Poco::URI::QueryParameters queryParams = params.extract<Poco::URI::QueryParameters>();
for (auto it = queryParams.begin(); it != queryParams.end(); it++) {
if (it->first == "email") {
email = it->second;
break;
}
else if (it->first == "session_id") {
try {
session_id = stoi(it->second);
}
catch (const std::invalid_argument& ia) {
result->set("state", "error");
result->set("msg", "error parsing query params, invalid argument: ");
result->set("details", ia.what());
return result;
}
catch (const std::out_of_range& oor) {
result->set("state", "error");
result->set("msg", "error parsing query params, Out of Range error: ");
result->set("details", oor.what());
return result;
}
catch (const std::logic_error & ler) {
result->set("state", "error");
result->set("msg", "error parsing query params, Logical error: ");
result->set("details", ler.what());
return result;
}
catch (Poco::Exception& ex) {
//printf("[JsonGetLogin::handle] exception: %s\n", ex.displayText().data());
result->set("state", "error");
result->set("msg", "error parsing query params, Poco Error");
result->set("details", ex.displayText());
return result;
}
}
}
parameterReaded = true;
}
else if (params.isArray()) {
result->set("state", "error");
result->set("msg", "array not implemented yet");
}
else if (params.isList()) {
result->set("state", "error");
result->set("msg", "list not implemented yet");
}
else if (params.isString()) {
result->set("state", "error");
result->set("msg", "string not implemented yet");
}
else if (params.isDeque()) {
result->set("state", "error");
result->set("msg", "deque not implemented yet");
}
else {
result->set("state", "error");
result->set("msg", "format not implemented");
result->set("details", std::string(params.type().name()));
}
if (parameterReaded && email != "" && session_id != 0) {
auto sm = SessionManager::getInstance();
auto em = EmailManager::getInstance();
auto session = sm->getSession(session_id);
if (session) {
auto user = session->getNewUser();
if (!user.isNull()) {
auto userModel = user->getModel();
if (userModel->getRole() == model::table::ROLE_ADMIN) {
auto receiverUser = controller::User::create();
if (1 == receiverUser->load(email)) {
em->addEmail(new model::Email(receiverUser, model::EMAIL_ADMIN_USER_VERIFICATION_CODE_RESEND));
result->set("state", "success");
}
else {
result->set("state", "error");
result->set("msg", "receiver user not found");
}
}
else {
result->set("state", "error");
result->set("msg", "user isn't admin");
}
}
else {
result->set("state", "error");
result->set("msg", "session hasn't valid user");
}
}
else {
result->set("state", "error");
result->set("msg", "session not found");
}
//result->set("runningTasks", tasksJson);
}
else if (parameterReaded) {
result->set("state", "error");
result->set("msg", "empty email or session_id");
}
else {
result->set("state", "error");
result->set("msg", "error reading parameter");
}
return result;
}

View File

@ -0,0 +1,16 @@
#ifndef __JSON_VERIFICATION_EMAIL_RESEND_H
#define __JSON_VERIFICATION_EMAIL_RESEND_H
#include "JsonRequestHandler.h"
class JsonAdminEmailVerificationResend : public JsonRequestHandler
{
public:
Poco::JSON::Object* handle(Poco::Dynamic::Var params);
protected:
};
#endif // __JSON_VERIFICATION_EMAIL_RESEND_H

View File

@ -9,6 +9,7 @@
#include "JsonTransaction.h"
#include "JsonGetRunningUserTasks.h"
#include "JsonGetUsers.h"
#include "JsonAdminEmailVerificationResend.h"
JsonRequestHandlerFactory::JsonRequestHandlerFactory()
: mRemoveGETParameters("^/([a-zA-Z0-9_-]*)"), mLogging(Poco::Logger::get("requestLog"))
@ -39,6 +40,9 @@ Poco::Net::HTTPRequestHandler* JsonRequestHandlerFactory::createRequestHandler(c
}
else if (url_first_part == "/getUsers") {
return new JsonGetUsers;
}
else if (url_first_part == "/adminEmailVerificationResend") {
return new JsonAdminEmailVerificationResend;
}
return new JsonUnknown;

View File

@ -29,6 +29,7 @@ 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();}
protected:

View File

@ -83,7 +83,6 @@ MemoryManager::MemoryManager()
mMemoryPageStacks[2] = new MemoryPageStack(65); // pubkey hex
mMemoryPageStacks[3] = new MemoryPageStack(96); // privkey encrypted
mMemoryPageStacks[4] = new MemoryPageStack(161); // privkey hex
}
MemoryManager::~MemoryManager()

View File

@ -29,6 +29,21 @@ Mit freundlichen Grüßen\n\
Dario, Gradido Server Admin\n\
"};
const static char EmailText_adminEmailVerificationResend[] = { u8"\
Hallo [first_name] [last_name],\n\
\n\
Der Admin hat ein erneutes zusenden deiner Bestätigungsemail angefordert. \n\
Du hast vor einer Weile ein Gradido Konto mit dieser E-Mail angelegt, aber es noch nicht bestätigt. \n\
\n\
Bitte klicke zur Bestätigung auf den Link: [link]\n\
oder kopiere den obigen Link in Dein Browserfenster.\n\
\n\
Mit freundlichen Grüßen\n\
Dario, Gradido Server Admin\n\
" };
const static char EmailText_emailResetPassword[] = { u8"\
Hallo [first_name] [last_name],\n\
\n\
@ -118,6 +133,7 @@ Gradido Login-Server\n\
case EMAIL_USER_VERIFICATION_CODE:
case EMAIL_ADMIN_USER_VERIFICATION_CODE:
case EMAIL_ADMIN_USER_VERIFICATION_CODE_RESEND:
if (userTableModel.isNull() || mUser->getModel()->getEmail() == "") {
addError(new Error(functionName, "no receiver email set for user email verification email"));
return false;
@ -133,6 +149,9 @@ Gradido Login-Server\n\
if (mType == EMAIL_ADMIN_USER_VERIFICATION_CODE) {
messageTemplate = EmailText_adminEmailVerification;
}
else if (mType == EMAIL_ADMIN_USER_VERIFICATION_CODE_RESEND) {
messageTemplate = EmailText_adminEmailVerificationResend;
}
mailMessage->addContent(
new Poco::Net::StringPartSource(replaceUserNamesAndLink(

View File

@ -28,6 +28,7 @@ namespace model {
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,