diff options
Diffstat (limited to 'src/webserver_run.cpp')
-rw-r--r-- | src/webserver_run.cpp | 153 |
1 files changed, 153 insertions, 0 deletions
diff --git a/src/webserver_run.cpp b/src/webserver_run.cpp new file mode 100644 index 0000000000..e5d272ead8 --- /dev/null +++ b/src/webserver_run.cpp @@ -0,0 +1,153 @@ +#include "webserver_run.hpp" + +#include "bmcweb_config.h" + +#include "app.hpp" +#include "cors_preflight.hpp" +#include "dbus_monitor.hpp" +#include "dbus_singleton.hpp" +#include "event_service_manager.hpp" +#include "google/google_service_root.hpp" +#include "hostname_monitor.hpp" +#include "ibm/management_console_rest.hpp" +#include "image_upload.hpp" +#include "kvm_websocket.hpp" +#include "login_routes.hpp" +#include "nbd_proxy.hpp" +#include "obmc_console.hpp" +#include "openbmc_dbus_rest.hpp" +#include "redfish.hpp" +#include "redfish_aggregator.hpp" +#include "security_headers.hpp" +#include "ssl_key_handler.hpp" +#include "user_monitor.hpp" +#include "vm_websocket.hpp" +#include "webassets.hpp" + +#include <systemd/sd-daemon.h> + +#include <boost/asio/io_context.hpp> +#include <sdbusplus/asio/connection.hpp> +#include <sdbusplus/bus.hpp> +#include <sdbusplus/server.hpp> + +constexpr int defaultPort = 18080; + +static void setupSocket(crow::App& app) +{ + int listenFd = sd_listen_fds(0); + if (1 == listenFd) + { + BMCWEB_LOG_INFO("attempting systemd socket activation"); + if (sd_is_socket_inet(SD_LISTEN_FDS_START, AF_UNSPEC, SOCK_STREAM, 1, + 0) != 0) + { + BMCWEB_LOG_INFO("Starting webserver on socket handle {}", + SD_LISTEN_FDS_START); + app.socket(SD_LISTEN_FDS_START); + } + else + { + BMCWEB_LOG_INFO( + "bad incoming socket, starting webserver on port {}", + defaultPort); + app.port(defaultPort); + } + } + else + { + BMCWEB_LOG_INFO("Starting webserver on port {}", defaultPort); + app.port(defaultPort); + } +} + +int run() +{ + auto io = std::make_shared<boost::asio::io_context>(); + App app(io); + + sdbusplus::asio::connection systemBus(*io); + crow::connections::systemBus = &systemBus; + + // Static assets need to be initialized before Authorization, because auth + // needs to build the whitelist from the static routes + +#ifdef BMCWEB_ENABLE_STATIC_HOSTING + crow::webassets::requestRoutes(app); +#endif + +#ifdef BMCWEB_ENABLE_KVM + crow::obmc_kvm::requestRoutes(app); +#endif + +#ifdef BMCWEB_ENABLE_REDFISH + redfish::RedfishService redfish(app); + + // Create EventServiceManager instance and initialize Config + redfish::EventServiceManager::getInstance(&*io); + +#ifdef BMCWEB_ENABLE_REDFISH_AGGREGATION + // Create RedfishAggregator instance and initialize Config + redfish::RedfishAggregator::getInstance(&*io); +#endif +#endif + +#ifdef BMCWEB_ENABLE_DBUS_REST + crow::dbus_monitor::requestRoutes(app); + crow::image_upload::requestRoutes(app); + crow::openbmc_mapper::requestRoutes(app); +#endif + +#ifdef BMCWEB_ENABLE_HOST_SERIAL_WEBSOCKET + crow::obmc_console::requestRoutes(app); +#endif + +#ifdef BMCWEB_ENABLE_VM_WEBSOCKET + crow::obmc_vm::requestRoutes(app); +#endif + +#ifdef BMCWEB_ENABLE_IBM_MANAGEMENT_CONSOLE + crow::ibm_mc::requestRoutes(app); + crow::ibm_mc_lock::Lock::getInstance(); +#endif + +#ifdef BMCWEB_ENABLE_GOOGLE_API + crow::google_api::requestRoutes(app); +#endif + + if (bmcwebInsecureDisableXssPrevention != 0) + { + cors_preflight::requestRoutes(app); + } + + crow::login_routes::requestRoutes(app); + + setupSocket(app); + +#ifdef BMCWEB_ENABLE_VM_NBDPROXY + crow::nbd_proxy::requestRoutes(app); +#endif + +#ifndef BMCWEB_ENABLE_REDFISH_DBUS_LOG_ENTRIES + int rc = redfish::EventServiceManager::startEventLogMonitor(*io); + if (rc != 0) + { + BMCWEB_LOG_ERROR("Redfish event handler setup failed..."); + return rc; + } +#endif + +#ifdef BMCWEB_ENABLE_SSL + BMCWEB_LOG_INFO("Start Hostname Monitor Service..."); + crow::hostname_monitor::registerHostnameSignal(); +#endif + + bmcweb::registerUserRemovedSignal(); + + app.run(); + io->run(); + + crow::connections::systemBus = nullptr; + + return 0; +} |