#ifndef __WEBAPPLICATION_H__ #define __WEBAPPLICATION_H__ #include "Singleton.h" #include #include #include namespace Wt { class WServer; class WApplication; class WEnvironment; namespace Auth { class AuthService; class PasswordService; class AuthTokenResult; } // namespace Auth }; // namespace Wt class Session; class LoginPage; class NavigationBar; namespace WebToolkit { class Application : public Wt::WApplication { public: Application(const Wt::WEnvironment &env, bool embedded); ~Application(); protected: void authEvent(); void handlePathChange(const std::string &path); private: std::unique_ptr m_session; Wt::JSignal<> m_startup; Wt::JSignal<> m_quit; Wt::WContainerWidget *m_root = nullptr; NavigationBar *m_navigationBar = nullptr; std::unique_ptr m_loginPage; LoginPage *m_loginPageRef = nullptr; Wt::JSignal<> m_logout; }; class Server { friend class Amass::Singleton; public: ~Server(); void initializeAuthenticationService(); Wt::Auth::AuthService &authService(); const Wt::Auth::PasswordService &passwordService(); void insertCookie(const std::string &cookie); Wt::Http::Cookie updateCookie(const std::string &oldCookie, const Wt::Auth::AuthTokenResult &result, bool secure); protected: Server(uint16_t port, const std::string &applicationRoot, const std::string &documentRoot); std::unique_ptr createApplication(const Wt::WEnvironment &env, bool embedded); private: std::unique_ptr m_server; std::unique_ptr m_authService; std::unique_ptr m_passwordService; std::unordered_set m_cookies; }; } // namespace WebToolkit #endif // __WEBAPPLICATION_H__