// // License type: BSD 3-Clause License // License copy: https://github.com/Telecominfraproject/wlan-cloud-ucentralgw/blob/master/LICENSE // // Created by Stephane Bourque on 2021-03-04. // Arilia Wireless Inc. // #include #include "Poco/URI.h" #include "RESTAPI_server.h" #include "RESTAPI_oauth2Handler.h" #include "RESTAPI_system_command.h" #include "RESTAPI_user_handler.h" #include "RESTAPI_users_handler.h" #include "RESTAPI_action_links.h" #include "RESTAPI_systemEndpoints_handler.h" #include "RESTAPI_AssetServer.h" #include "RESTAPI_avatarHandler.h" #include "Daemon.h" #include "Utils.h" namespace uCentral { class RESTAPI_Server *RESTAPI_Server::instance_ = nullptr; int RESTAPI_Server::Start() { Logger_.information("Starting."); AsserDir_ = Daemon()->ConfigPath("ucentral.restapi.wwwassets"); AccessPolicy_ = Daemon()->ConfigGetString("ucentral.document.policy.access", "/wwwassets/access_policy.html"); PasswordPolicy_ = Daemon()->ConfigGetString("ucentral.document.policy.password", "/wwwassets/possword_policy.html"); for(const auto & Svr: ConfigServersList_) { Logger_.information(Poco::format("Starting: %s:%s Keyfile:%s CertFile: %s", Svr.Address(), std::to_string(Svr.Port()), Svr.KeyFile(),Svr.CertFile())); auto Sock{Svr.CreateSecureSocket(Logger_)}; Svr.LogCert(Logger_); if(!Svr.RootCA().empty()) Svr.LogCas(Logger_); auto Params = new Poco::Net::HTTPServerParams; Params->setMaxThreads(50); Params->setMaxQueued(200); Params->setKeepAlive(true); auto NewServer = std::make_unique(new RequestHandlerFactory, Pool_, Sock, Params); NewServer->start(); RESTServers_.push_back(std::move(NewServer)); } return 0; } Poco::Net::HTTPRequestHandler *RequestHandlerFactory::createRequestHandler(const Poco::Net::HTTPServerRequest & Request) { Logger_.debug(Poco::format("REQUEST(%s): %s %s", uCentral::Utils::FormatIPv6(Request.clientAddress().toString()), Request.getMethod(), Request.getURI())); Poco::URI uri(Request.getURI()); const auto & Path = uri.getPath(); RESTAPIHandler::BindingMap Bindings; return RESTAPI_Router< RESTAPI_oauth2Handler, RESTAPI_users_handler, RESTAPI_user_handler, RESTAPI_system_command, RESTAPI_AssetServer, RESTAPI_systemEndpoints_handler, RESTAPI_action_links, RESTAPI_avatarHandler >(Path,Bindings,Logger_); } void RESTAPI_Server::Stop() { Logger_.information("Stopping "); for( const auto & svr : RESTServers_ ) svr->stop(); } } // namespace