summaryrefslogtreecommitdiff
path: root/src/webserver_run.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/webserver_run.cpp')
-rw-r--r--src/webserver_run.cpp153
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;
+}