xref: /openbmc/bmcweb/src/webserver_run.cpp (revision 40e9b92ec19acffb46f83a6e55b18974da5d708e)
1 // SPDX-License-Identifier: Apache-2.0
2 // SPDX-FileCopyrightText: Copyright OpenBMC Authors
3 #include "webserver_run.hpp"
4 
5 #include "bmcweb_config.h"
6 
7 #include "app.hpp"
8 #include "dbus_monitor.hpp"
9 #include "dbus_singleton.hpp"
10 #include "event_service_manager.hpp"
11 #include "google/google_service_root.hpp"
12 #include "hostname_monitor.hpp"
13 #include "ibm/management_console_rest.hpp"
14 #include "image_upload.hpp"
15 #include "kvm_websocket.hpp"
16 #include "logging.hpp"
17 #include "login_routes.hpp"
18 #include "obmc_console.hpp"
19 #include "openbmc_dbus_rest.hpp"
20 #include "redfish.hpp"
21 #include "redfish_aggregator.hpp"
22 #include "user_monitor.hpp"
23 #include "vm_websocket.hpp"
24 #include "webassets.hpp"
25 
26 #include <boost/asio/io_context.hpp>
27 #include <sdbusplus/asio/connection.hpp>
28 #include <sdbusplus/asio/object_server.hpp>
29 
30 #include <algorithm>
31 #include <memory>
32 #include <string>
33 #include <string_view>
34 
35 static void setLogLevel(const std::string& logLevel)
36 {
37     const std::basic_string_view<char>* iter =
38         std::ranges::find(crow::mapLogLevelFromName, logLevel);
39     if (iter == crow::mapLogLevelFromName.end())
40     {
41         BMCWEB_LOG_ERROR("log-level {} not found", logLevel);
42         return;
43     }
44     crow::getBmcwebCurrentLoggingLevel() = crow::getLogLevelFromName(logLevel);
45     BMCWEB_LOG_INFO("Requested log-level change to: {}", logLevel);
46 }
47 
48 int run()
49 {
50     auto io = std::make_shared<boost::asio::io_context>();
51     App app(io);
52 
53     std::shared_ptr<sdbusplus::asio::connection> systemBus =
54         std::make_shared<sdbusplus::asio::connection>(*io);
55     crow::connections::systemBus = systemBus.get();
56 
57     auto server = sdbusplus::asio::object_server(systemBus);
58 
59     std::shared_ptr<sdbusplus::asio::dbus_interface> iface =
60         server.add_interface("/xyz/openbmc_project/bmcweb",
61                              "xyz.openbmc_project.bmcweb");
62 
63     iface->register_method("SetLogLevel", setLogLevel);
64 
65     iface->initialize();
66 
67     // Static assets need to be initialized before Authorization, because auth
68     // needs to build the whitelist from the static routes
69 
70     if constexpr (BMCWEB_STATIC_HOSTING)
71     {
72         crow::webassets::requestRoutes(app);
73     }
74 
75     if constexpr (BMCWEB_KVM)
76     {
77         crow::obmc_kvm::requestRoutes(app);
78     }
79 
80     if constexpr (BMCWEB_REDFISH)
81     {
82         redfish::RedfishService redfish(app);
83 
84         // Create EventServiceManager instance and initialize Config
85         redfish::EventServiceManager::getInstance(&*io);
86 
87         if constexpr (BMCWEB_REDFISH_AGGREGATION)
88         {
89             // Create RedfishAggregator instance and initialize Config
90             redfish::RedfishAggregator::getInstance(&*io);
91         }
92     }
93 
94     if constexpr (BMCWEB_REST)
95     {
96         crow::dbus_monitor::requestRoutes(app);
97         crow::image_upload::requestRoutes(app);
98         crow::openbmc_mapper::requestRoutes(app);
99     }
100 
101     if constexpr (BMCWEB_HOST_SERIAL_SOCKET)
102     {
103         crow::obmc_console::requestRoutes(app);
104     }
105 
106     crow::obmc_vm::requestRoutes(app);
107 
108     if constexpr (BMCWEB_IBM_MANAGEMENT_CONSOLE)
109     {
110         crow::ibm_mc::requestRoutes(app);
111     }
112 
113     if constexpr (BMCWEB_GOOGLE_API)
114     {
115         crow::google_api::requestRoutes(app);
116     }
117 
118     crow::login_routes::requestRoutes(app);
119 
120     if constexpr (!BMCWEB_INSECURE_DISABLE_SSL)
121     {
122         BMCWEB_LOG_INFO("Start Hostname Monitor Service...");
123         crow::hostname_monitor::registerHostnameSignal();
124     }
125 
126     bmcweb::registerUserRemovedSignal();
127 
128     app.run();
129 
130     systemBus->request_name("xyz.openbmc_project.bmcweb");
131 
132     io->run();
133 
134     crow::connections::systemBus = nullptr;
135 
136     return 0;
137 }
138