#ifndef __WEBAPPLICATION_H__ #define __WEBAPPLICATION_H__ #include "Database/User.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(); bool inDocusaurus() const; protected: void authEvent(); void handlePathChange(const std::string &path); private: std::unique_ptr m_session; bool m_extern = false; Wt::JSignal<> m_startup; Wt::WContainerWidget *m_root = nullptr; NavigationBar *m_navigationBar = nullptr; std::unique_ptr m_loginPage; LoginPage *m_loginPageRef = nullptr; Wt::JSignal<> m_logout; std::string m_loginedRedirectUrl; }; 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, const Wt::Auth::User &user); Wt::Http::Cookie updateCookie(const std::string &oldCookie, const Wt::Auth::AuthTokenResult &result, bool secure); std::optional user(const std::string &cookie); void removeCookie(const std::string &cookie); 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_map m_cookies; }; } // namespace WebToolkit #endif // __WEBAPPLICATION_H__