diff --git a/src/WebInterface.cpp b/src/WebInterface.cpp index 6d4227162b9993ea49f61f7fe0d12de720045e06..86a5950faa22c131d743af16cabebbbbca2fa0e1 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 dca1285338ce611c4d8fb30ab408db643961ffca..d4c2f016da6eb12fe2c2d4466577eba55f0d4a2a 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 0d683e84ddcf89a86a793c39ebb27cd8093ec28b..f3a7eb7fc1ef01a8acaaa7ab17f4ae432937a057 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 df428d39d2d30341c2224097dad1c0e52cb8c6cb..f444d0e659053edb3c0f69445b4050f8f6f0b998 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 6ac4e03c4749be70aef888c4a828ae84519db7c5..b75ce36f2f74d8743cad06b06b0c558636f9270e 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);