From ceb104c053e9124465ac55cfb149fecde27422f2 Mon Sep 17 00:00:00 2001 From: Dario Date: Fri, 6 Nov 2020 15:47:02 +0100 Subject: [PATCH] give first user automatic the admin role and forward to groups page if now group is in db --- src/cpp/HTTPInterface/UserUpdateGroupPage.cpp | 81 +++++++++++-------- src/cpp/model/Session.cpp | 12 ++- src/cpsp/userUpdateGroup.cpsp | 34 +++++--- 3 files changed, 83 insertions(+), 44 deletions(-) diff --git a/src/cpp/HTTPInterface/UserUpdateGroupPage.cpp b/src/cpp/HTTPInterface/UserUpdateGroupPage.cpp index 5434356cb..e77304ae7 100644 --- a/src/cpp/HTTPInterface/UserUpdateGroupPage.cpp +++ b/src/cpp/HTTPInterface/UserUpdateGroupPage.cpp @@ -16,7 +16,8 @@ enum PageState { PAGE_STATE_OVERVIEW, - PAGE_STATE_REQUEST_IS_RUNNING + PAGE_STATE_REQUEST_IS_RUNNING, + PAGE_STATE_NO_GROUPS }; #line 1 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header.cpsp" @@ -38,7 +39,7 @@ void UserUpdateGroupPage::handleRequest(Poco::Net::HTTPServerRequest& request, P if (_compressResponse) response.set("Content-Encoding", "gzip"); Poco::Net::HTMLForm form(request, request.stream()); -#line 20 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\userUpdateGroup.cpsp" +#line 21 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\userUpdateGroup.cpsp" const char* pageName = gettext("Gruppe wählen"); auto user = mSession->getNewUser(); @@ -78,19 +79,28 @@ void UserUpdateGroupPage::handleRequest(Poco::Net::HTTPServerRequest& request, P } } } else { - pt->lock("userUpdateGroup Page"); - if(pt->hasPendingTask(user, model::table::TASK_TYPE_GROUP_ADD_MEMBER)) { - state = PAGE_STATE_REQUEST_IS_RUNNING; - std::vector> tasks = pt->getPendingTasks(user, model::table::TASK_TYPE_GROUP_ADD_MEMBER); - // should be only one - Poco::AutoPtr transaction = tasks[0].cast(); - if(transaction->getSignCount() == 0) { - pt->unlock(); - response.redirect(ServerConfig::g_serverPath + "/checkTransactions"); + if(groups.size() == 0) { + if(user->getModel()->getRole() == model::table::ROLE_ADMIN) { + response.redirect(ServerConfig::g_serverPath + "/groups"); return; } + state = PAGE_STATE_NO_GROUPS; + + } else { + pt->lock("userUpdateGroup Page"); + if(pt->hasPendingTask(user, model::table::TASK_TYPE_GROUP_ADD_MEMBER)) { + state = PAGE_STATE_REQUEST_IS_RUNNING; + std::vector> tasks = pt->getPendingTasks(user, model::table::TASK_TYPE_GROUP_ADD_MEMBER); + // should be only one + Poco::AutoPtr transaction = tasks[0].cast(); + if(transaction->getSignCount() == 0) { + pt->unlock(); + response.redirect(ServerConfig::g_serverPath + "/checkTransactions"); + return; + } + } + pt->unlock(); } - pt->unlock(); } @@ -153,93 +163,100 @@ void UserUpdateGroupPage::handleRequest(Poco::Net::HTTPServerRequest& request, P responseStream << " "; // end include header.cpsp responseStream << "\n"; -#line 78 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\userUpdateGroup.cpsp" +#line 88 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\userUpdateGroup.cpsp" responseStream << ( getErrorsHtml() ); responseStream << "\n"; responseStream << "
\n"; responseStream << "\t"; -#line 80 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\userUpdateGroup.cpsp" +#line 90 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\userUpdateGroup.cpsp" if(PAGE_STATE_OVERVIEW == state ) { responseStream << "\n"; responseStream << "
\n"; responseStream << "

"; -#line 82 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\userUpdateGroup.cpsp" +#line 92 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\userUpdateGroup.cpsp" responseStream << ( gettext("Gruppe wählen") ); responseStream << "

\n"; responseStream << "
\n"; responseStream << "\t

"; -#line 84 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\userUpdateGroup.cpsp" +#line 94 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\userUpdateGroup.cpsp" responseStream << ( gettext("Bitte wähle die Gruppe/Gemeinschaft aus, zu der du gehörst.") ); responseStream << "

\n"; responseStream << "\t

"; -#line 85 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\userUpdateGroup.cpsp" +#line 95 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\userUpdateGroup.cpsp" responseStream << ( gettext("Du bekommst eine Bestätigungsmail, nachdem dein Beitritt bestätigt wurde.") ); responseStream << "

\n"; responseStream << "\t
\n"; responseStream << "\t\t
\n"; responseStream << "\t\t\t
\n"; responseStream << "\t\t\t\t
"; -#line 89 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\userUpdateGroup.cpsp" +#line 99 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\userUpdateGroup.cpsp" responseStream << ( gettext("Auswahl") ); responseStream << "
\n"; responseStream << "\t\t\t\t
Name
\n"; responseStream << "\t\t\t\t
Alias
\n"; responseStream << "\t\t\t\t
Url
\n"; responseStream << "\t\t\t\t
"; -#line 93 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\userUpdateGroup.cpsp" +#line 103 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\userUpdateGroup.cpsp" responseStream << ( gettext("Description") ); responseStream << "
\n"; responseStream << "\t\t\t
\n"; responseStream << "\t\t\t"; -#line 95 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\userUpdateGroup.cpsp" +#line 105 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\userUpdateGroup.cpsp" for(auto it = groups.begin(); it != groups.end(); it++) { auto group_model = (*it)->getModel(); responseStream << "\n"; responseStream << "\t\t\t\t
\n"; responseStream << "\t\t\t\t\t
getID()); responseStream << "\" />
\n"; responseStream << "\t\t\t\t\t
"; -#line 99 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\userUpdateGroup.cpsp" +#line 109 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\userUpdateGroup.cpsp" responseStream << ( group_model->getName() ); responseStream << "
\n"; responseStream << "\t\t\t\t\t
"; -#line 100 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\userUpdateGroup.cpsp" +#line 110 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\userUpdateGroup.cpsp" responseStream << ( group_model->getAlias() ); responseStream << "
\n"; responseStream << "\t\t\t\t\t
"; -#line 101 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\userUpdateGroup.cpsp" +#line 111 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\userUpdateGroup.cpsp" responseStream << ( group_model->getUrl() ); responseStream << "
\n"; responseStream << "\t\t\t\t\t
"; -#line 102 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\userUpdateGroup.cpsp" +#line 112 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\userUpdateGroup.cpsp" responseStream << ( group_model->getDescription()); responseStream << "
\n"; responseStream << "\t\t\t\t
\n"; responseStream << "\t\t\t"; -#line 104 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\userUpdateGroup.cpsp" +#line 114 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\userUpdateGroup.cpsp" } responseStream << "\n"; responseStream << "\t\t\t\n"; responseStream << "\t\t
\n"; responseStream << "\t
\n"; responseStream << "\t"; -#line 108 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\userUpdateGroup.cpsp" +#line 118 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\userUpdateGroup.cpsp" } else if(PAGE_STATE_REQUEST_IS_RUNNING == state) { responseStream << "\n"; responseStream << "\t\t

"; -#line 109 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\userUpdateGroup.cpsp" +#line 119 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\userUpdateGroup.cpsp" responseStream << ( gettext("Deine Beitrittsanfrage wird bearbeitet, du bekommst eine E-Mail wenn sie bestätigt oder abgelehnt wurde.") ); responseStream << "

\n"; responseStream << "\t\t

"; -#line 110 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\userUpdateGroup.cpsp" +#line 120 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\userUpdateGroup.cpsp" responseStream << ( gettext("Abmelden") ); responseStream << "

\n"; responseStream << "\t"; -#line 111 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\userUpdateGroup.cpsp" +#line 121 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\userUpdateGroup.cpsp" + } else if(PAGE_STATE_NO_GROUPS == state) { responseStream << "\n"; + responseStream << "\t\t

"; +#line 122 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\userUpdateGroup.cpsp" + responseStream << ( gettext("Noch keine Gruppen vorhanden, bitte warte bis der Admin welche hinzugefügt hat.") ); + responseStream << "\n"; + responseStream << "\t"; +#line 123 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\userUpdateGroup.cpsp" } responseStream << "\n"; responseStream << "

\n"; // begin include footer.cpsp diff --git a/src/cpp/model/Session.cpp b/src/cpp/model/Session.cpp index f86177795..336de07a0 100644 --- a/src/cpp/model/Session.cpp +++ b/src/cpp/model/Session.cpp @@ -27,6 +27,8 @@ #include "../controller/UserBackup.h" #include "../controller/EmailVerificationCode.h" +#include "table/UserRole.h" + #include "table/ModelBase.h" @@ -353,7 +355,6 @@ bool Session::createUserDirect(const std::string& first_name, const std::string& user_model->insertIntoDB(true); auto user_id = user_model->getID(); - // one retry in case of connection error if (!user_id) { user_model->insertIntoDB(true); @@ -366,6 +367,15 @@ bool Session::createUserDirect(const std::string& first_name, const std::string& } } + + // if it gets id 1, it's the first user, so we should give him the admin role + if (user_id == 1) { + Poco::AutoPtr user_role(new model::table::UserRole(user_id, model::table::ROLE_ADMIN)); + user_role->insertIntoDB(false); + mNewUser->reload(); + } + + generateKeys(true, true); // calculate encryption key, could need some time, will save encrypted privkey to db diff --git a/src/cpsp/userUpdateGroup.cpsp b/src/cpsp/userUpdateGroup.cpsp index 5bf43375a..7802f0156 100644 --- a/src/cpsp/userUpdateGroup.cpsp +++ b/src/cpsp/userUpdateGroup.cpsp @@ -13,7 +13,8 @@ enum PageState { PAGE_STATE_OVERVIEW, - PAGE_STATE_REQUEST_IS_RUNNING + PAGE_STATE_REQUEST_IS_RUNNING, + PAGE_STATE_NO_GROUPS }; %> @@ -56,19 +57,28 @@ enum PageState { } } } else { - pt->lock("userUpdateGroup Page"); - if(pt->hasPendingTask(user, model::table::TASK_TYPE_GROUP_ADD_MEMBER)) { - state = PAGE_STATE_REQUEST_IS_RUNNING; - std::vector> tasks = pt->getPendingTasks(user, model::table::TASK_TYPE_GROUP_ADD_MEMBER); - // should be only one - Poco::AutoPtr transaction = tasks[0].cast(); - if(transaction->getSignCount() == 0) { - pt->unlock(); - response.redirect(ServerConfig::g_serverPath + "/checkTransactions"); + if(groups.size() == 0) { + if(user->getModel()->getRole() == model::table::ROLE_ADMIN) { + response.redirect(ServerConfig::g_serverPath + "/groups"); return; } + state = PAGE_STATE_NO_GROUPS; + + } else { + pt->lock("userUpdateGroup Page"); + if(pt->hasPendingTask(user, model::table::TASK_TYPE_GROUP_ADD_MEMBER)) { + state = PAGE_STATE_REQUEST_IS_RUNNING; + std::vector> tasks = pt->getPendingTasks(user, model::table::TASK_TYPE_GROUP_ADD_MEMBER); + // should be only one + Poco::AutoPtr transaction = tasks[0].cast(); + if(transaction->getSignCount() == 0) { + pt->unlock(); + response.redirect(ServerConfig::g_serverPath + "/checkTransactions"); + return; + } + } + pt->unlock(); } - pt->unlock(); } @@ -108,6 +118,8 @@ enum PageState { <% } else if(PAGE_STATE_REQUEST_IS_RUNNING == state) { %>

<%= gettext("Deine Beitrittsanfrage wird bearbeitet, du bekommst eine E-Mail wenn sie bestätigt oder abgelehnt wurde.") %>

<%= gettext("Abmelden") %>

+ <% } else if(PAGE_STATE_NO_GROUPS == state) { %> +

<%= gettext("Noch keine Gruppen vorhanden, bitte warte bis der Admin welche hinzugefügt hat.") %> <% } %> <%@ include file="footer.cpsp" %>