From 4f2a0c5d4d32ce6d73b968b00b8f90c97482f205 Mon Sep 17 00:00:00 2001 From: Kevin Whitaker Date: Tue, 21 Feb 2017 01:31:07 -0500 Subject: [PATCH] Finish adding user creation to admin screen. --- src/WebInterface.cpp | 5 +++++ src/WebInterface.h | 1 + src/ui/AdminInterface.cpp | 43 +++++++++++++++++++++++++++++++++++++++ src/ui/AdminInterface.h | 10 +++++++++ src/ui/LoginInterface.h | 2 +- 5 files changed, 60 insertions(+), 1 deletion(-) diff --git a/src/WebInterface.cpp b/src/WebInterface.cpp index 6d42271..86a5950 100644 --- a/src/WebInterface.cpp +++ b/src/WebInterface.cpp @@ -57,6 +57,11 @@ WebInterface::~WebInterface() delete priv_int; } +void WebInterface::createUser(Wt::Dbo::Session* session, std::string username, std::string rawPassword, bool isAdmin) +{ + priv_int->loginUI->createUser(session, username, rawPassword, isAdmin); +} + void WebInterface::loginCompleted() { //Login completed, now bring up main inteface. diff --git a/src/WebInterface.h b/src/WebInterface.h index dca1285..d4c2f01 100644 --- a/src/WebInterface.h +++ b/src/WebInterface.h @@ -39,6 +39,7 @@ public: void skipVoteUpdateFromServer(User userVoting, bool forSkip); void voteNextSongFromServer(User userVoting, AudioTrack trackVoted); void voteNextPollClosedFromServer(AudioTrack winner); + void createUser(Wt::Dbo::Session* session, std::string username, std::string rawPassword, bool isAdmin); User currentUser; private: struct internal; diff --git a/src/ui/AdminInterface.cpp b/src/ui/AdminInterface.cpp index 0d683e8..f3a7eb7 100644 --- a/src/ui/AdminInterface.cpp +++ b/src/ui/AdminInterface.cpp @@ -18,8 +18,51 @@ */ #include "AdminInterface.h" +#include "../db/UserAction.h" AdminInterface::AdminInterface(WebInterface* app) { this->app = app; + this->setMaximumSize(Wt::WLength::Auto,Wt::WLength(175,Wt::WLength::Pixel)); + this->setOverflow(OverflowHidden); + userLayout = new Wt::WHBoxLayout(); + usernameField = new Wt::WLineEdit(); + passwordField = new Wt::WLineEdit(); + addBtn = new Wt::WPushButton(""); + + this->setLayout(userLayout); + userLayout->addWidget(usernameField); + userLayout->addWidget(passwordField); + userLayout->addWidget(addBtn); + passwordField->setEchoMode(Wt::WLineEdit::EchoMode::Password); + addBtn->setTextFormat(Wt::XHTMLText); + addBtn->decorationStyle().font().setFamily(Wt::WFont::Default,"FontAwesome"); + addBtn->clicked().connect(this, &AdminInterface::addClicked); +} + +void AdminInterface::addClicked() +{ + Wt::Dbo::Session sqlSession; + sqlSession.setConnectionPool(*GroovePlayerMgr::getInstance()->connectionPool); + sqlSession.mapClass("user"); + sqlSession.mapClass("tracks"); + sqlSession.mapClass("actions"); + Wt::Dbo::Transaction addUserTransaction(sqlSession); + + //Make sure user is valid to add + if(usernameField->text().empty() || passwordField->text().empty()) + { + usernameField->setText(""); + passwordField->setText(""); + return; + } + int usernameMatching = sqlSession.query("select count(username) from user").where("username = ?").bind(usernameField->text().toUTF8()); + if(usernameMatching > 0) + { + usernameField->setText("already exists"); + return; + } + + //Add user + app->createUser(&sqlSession, usernameField->text().toUTF8(), passwordField->text().toUTF8(), false); } diff --git a/src/ui/AdminInterface.h b/src/ui/AdminInterface.h index df428d3..f444d0e 100644 --- a/src/ui/AdminInterface.h +++ b/src/ui/AdminInterface.h @@ -22,12 +22,22 @@ #include #include "../WebInterface.h" +#include +#include +#include class AdminInterface : public Wt::WContainerWidget { public: AdminInterface(WebInterface* app); WebInterface* app; + + Wt::WHBoxLayout* userLayout; + Wt::WLineEdit* usernameField; + Wt::WLineEdit* passwordField; + Wt::WPushButton* addBtn; + + void addClicked(); }; #endif // ADMININTERFACE_H diff --git a/src/ui/LoginInterface.h b/src/ui/LoginInterface.h index 6ac4e03..b75ce36 100644 --- a/src/ui/LoginInterface.h +++ b/src/ui/LoginInterface.h @@ -34,6 +34,7 @@ class LoginInterface : public Wt::WContainerWidget public: LoginInterface(WebInterface* app); void checkSessionValidity(); + void createUser(Wt::Dbo::Session* session, std::string username, std::string rawPassword, bool isAdmin); private: Wt::WPushButton* loginButton; Wt::WVBoxLayout* loginLayout; @@ -47,7 +48,6 @@ private: Wt::WText* loginMessage; WebInterface* app; void loginCheck(); - void createUser(Wt::Dbo::Session* session, std::string username, std::string rawPassword, bool isAdmin); int getUserCount(Wt::Dbo::Session* session); User getUserForLoginCookie(Wt::Dbo::Session* session, std::string cookie); User getUserForLoginAuth(Wt::Dbo::Session* session, std::string username, std::string rawPassword); -- GitLab