#include "WebApplication.h" #include "BoostLog.h" #include "Hello.h" #include "Restful.h" #include "Session.h" #include #include #include #include #include #include #include #include #include #include WebApplication::WebApplication(uint16_t port, const std::string &documentRoot) { try { std::vector args; args.push_back(std::format("--docroot={};/resources", documentRoot)); args.push_back(std::format("--approot={}/resources", documentRoot)); args.push_back(std::format("--http-listen=127.0.0.1:{}", port)); initializeAuthenticationService(); m_server = std::make_unique(std::format("{}/resources", documentRoot), args); m_sqlConnectionPool = createConnectionPool(std::format("{}/database.sqlite", documentRoot)); m_server->addEntryPoint(Wt::EntryPointType::Application, std::bind(&WebApplication::createApplication, this, std::placeholders::_1, false)); m_server->addEntryPoint(Wt::EntryPointType::WidgetSet, std::bind(&WebApplication::createApplication, this, std::placeholders::_1, true), "/wt/app.js"); m_server->addResource(std::make_shared(*m_sqlConnectionPool), "/auth"); m_server->addResource(std::make_shared(), "/plaintext"); m_server->addResource(std::make_shared(std::format("{}/database.sqlite", documentRoot)), "/db"); m_server->start(); } catch (const std::exception &e) { LOG(error) << e.what(); } } std::unique_ptr WebApplication::createConnectionPool(const std::string &sqlite3) { auto connection = std::make_unique(sqlite3); connection->setProperty("show-queries", "true"); connection->setDateTimeStorage(Wt::Dbo::SqlDateTimeType::DateTime, Wt::Dbo::backend::DateTimeStorage::PseudoISO8601AsText); return std::make_unique(std::move(connection), 10); } std::unique_ptr WebApplication::createApplication(const Wt::WEnvironment &env, bool embedded) { return std::make_unique(env, *m_sqlConnectionPool, embedded); } WebApplication::~WebApplication() { } void WebApplication::initializeAuthenticationService() { m_authService = std::make_unique(); m_authService->setAuthTokensEnabled(true, "logincookie"); m_passwordService = std::make_unique(*m_authService); auto verifier = std::make_unique(); verifier->addHashFunction(std::make_unique(7)); m_passwordService->setVerifier(std::move(verifier)); m_passwordService->setPasswordThrottle(std::make_unique()); m_passwordService->setStrengthValidator(std::make_unique()); } const Wt::Auth::AuthService &WebApplication::authService() { return *m_authService; } const Wt::Auth::PasswordService &WebApplication::passwordService() { return *m_passwordService; }