This commit is contained in:
Bartosz Wieczorek 2018-01-25 14:28:45 +01:00
parent 2c50e3ee7f
commit 7a540334bd
4 changed files with 27 additions and 35 deletions

View File

@ -23,6 +23,9 @@
#include <Wt/WTextArea.h>
#include <eedb/widgets/BootstrapTheme.hpp>
#include <Wt/Auth/AuthWidget.h>
using std::move;
namespace eedb {
@ -43,8 +46,9 @@ EEDB::EEDB(std::unique_ptr< Session > session, AuthPageFactory authPageFactory,
_authPage->registerOnUserWeakLogin([&] { authEventLogin(LoginState::weak); });
_authPage->registerOnUserStrongLogin([&] { authEventLogin(LoginState::strong); });
_authPage->registerOnUserLogout([=] { authEventLogout(); });
_authPage->attachTo(root());
_authPage->processEnvironment();
root()->addWidget(_authPage->detach());
}
void EEDB::authEventLogin(EEDB::LoginState state) {

View File

@ -1,24 +1,28 @@
#pragma once
#include <functional>
#include <memory>
namespace Wt {
class WContainerWidget;
}
namespace Wt::Auth {
class AuthWidget;
}
namespace eedb {
class AuthPage {
public:
virtual ~AuthPage() = default;
virtual void attachTo(Wt::WContainerWidget * parent) = 0;
virtual void detach() = 0;
virtual void processEnvironment() = 0;
virtual std::unique_ptr< Wt::Auth::AuthWidget > detach() = 0;
virtual void processEnvironment() = 0;
virtual void registerOnNeedVerification(std::function< void() > f) = 0;
virtual void registerOnUserWeakLogin(std::function< void() > f) = 0;
virtual void registerOnUserStrongLogin(std::function< void() > f) = 0;
virtual void registerOnUserLogout(std::function< void() > f) = 0;
virtual void registerOnNeedVerification(std::function< void() > f) = 0;
virtual void registerOnUserWeakLogin(std::function< void() > f) = 0;
virtual void registerOnUserStrongLogin(std::function< void() > f) = 0;
virtual void registerOnUserLogout(std::function< void() > f) = 0;
};
} // namespace eedb

View File

@ -6,18 +6,6 @@
#include <Wt/Auth/AuthWidget.h>
#include <Wt/WContainerWidget.h>
namespace std {
template <>
struct default_delete< Wt::Auth::AuthWidget > {
void operator()(Wt::Auth::AuthWidget * ptr) {
if(ptr && !ptr->parent()) {
delete ptr;
}
}
};
} // namespace std
namespace eedb {
struct DefaultAuthPage::DefaultAuthPagePriv {
@ -57,35 +45,32 @@ DefaultAuthPage::DefaultAuthPage(const auth::Services & baseAuth,
});
}
void DefaultAuthPage::attachTo(Wt::WContainerWidget * parent) {
parent->addWidget(std::move(_priv->_authWidget));
}
void DefaultAuthPage::detach() {
auto parent = dynamic_cast< Wt::WContainerWidget * >(_priv->_authWidget->parent());
if(parent) {
parent->removeWidget(_priv->_authWidget.get());
std::unique_ptr< Wt::Auth::AuthWidget > DefaultAuthPage::detach() {
if(_priv->_authWidget) {
return std::move(_priv->_authWidget);
}
return {};
}
void DefaultAuthPage::processEnvironment() {
_priv->_authWidget->processEnvironment();
if(_priv->_authWidget)
_priv->_authWidget->processEnvironment();
}
void DefaultAuthPage::registerOnNeedVerification(std::function< void() > f) {
_priv->_onNeedEmailVerification.connect([=]() { f(); });
_priv->_onNeedEmailVerification.connect(f);
}
void DefaultAuthPage::registerOnUserWeakLogin(std::function< void() > f) {
_priv->_onUserWeakLogin.connect([=]() { f(); });
_priv->_onUserWeakLogin.connect(f);
}
void DefaultAuthPage::registerOnUserStrongLogin(std::function< void() > f) {
_priv->_onUserStrongLogin.connect([=]() { f(); });
_priv->_onUserStrongLogin.connect(f);
}
void DefaultAuthPage::registerOnUserLogout(std::function< void() > f) {
_priv->_onUserLogout.connect([=]() { f(); });
_priv->_onUserLogout.connect(f);
}
void DefaultAuthPage::notifyUserStrongLogin() const {

View File

@ -21,8 +21,7 @@ class DefaultAuthPage final : public AuthPage {
std::unique_ptr< Wt::Auth::AbstractUserDatabase > userDatabase,
Wt::Auth::Login & session);
void attachTo(Wt::WContainerWidget * parent) override;
void detach() override;
std::unique_ptr< Wt::Auth::AuthWidget > detach() override;
void processEnvironment() override;
void registerOnNeedVerification(std::function< void() > f) override;