1*d5c0172eSEd Tanous #pragma once 2*d5c0172eSEd Tanous 3*d5c0172eSEd Tanous #include "app.hpp" 4*d5c0172eSEd Tanous #include "error_messages.hpp" 5*d5c0172eSEd Tanous #include "http_request.hpp" 6*d5c0172eSEd Tanous #include "http_response.hpp" 7*d5c0172eSEd Tanous #include "query.hpp" 8*d5c0172eSEd Tanous #include "registries/privilege_registry.hpp" 9*d5c0172eSEd Tanous #include "utility.hpp" 10*d5c0172eSEd Tanous 11*d5c0172eSEd Tanous #include <boost/url/format.hpp> 12*d5c0172eSEd Tanous #include <nlohmann/json.hpp> 13*d5c0172eSEd Tanous 14*d5c0172eSEd Tanous #include <memory> 15*d5c0172eSEd Tanous #include <ranges> 16*d5c0172eSEd Tanous #include <string> 17*d5c0172eSEd Tanous #include <string_view> 18*d5c0172eSEd Tanous 19*d5c0172eSEd Tanous namespace redfish 20*d5c0172eSEd Tanous { 21*d5c0172eSEd Tanous 22*d5c0172eSEd Tanous inline void redfishOdataGet(const crow::Request& /*req*/, 23*d5c0172eSEd Tanous const std::shared_ptr<bmcweb::AsyncResp>& asyncResp) 24*d5c0172eSEd Tanous { 25*d5c0172eSEd Tanous nlohmann::json::object_t obj; 26*d5c0172eSEd Tanous obj["@odata.context"] = "/redfish/v1/$metadata"; 27*d5c0172eSEd Tanous nlohmann::json::array_t value; 28*d5c0172eSEd Tanous for (std::string_view service : 29*d5c0172eSEd Tanous {"$metadata", "odata", "JsonSchemas", "Service", "ServiceRoot", 30*d5c0172eSEd Tanous "Systems", "Chassis", "Managers", "SessionService", "AccountService", 31*d5c0172eSEd Tanous "UpdateService"}) 32*d5c0172eSEd Tanous { 33*d5c0172eSEd Tanous nlohmann::json::object_t serviceObj; 34*d5c0172eSEd Tanous serviceObj["kind"] = "Singleton"; 35*d5c0172eSEd Tanous serviceObj["name"] = "$metadata"; 36*d5c0172eSEd Tanous boost::urls::url url = boost::urls::format("/redfish/v1/{}", service); 37*d5c0172eSEd Tanous if (service == "Service") 38*d5c0172eSEd Tanous { 39*d5c0172eSEd Tanous url = boost::urls::url("/redfish/v1"); 40*d5c0172eSEd Tanous } 41*d5c0172eSEd Tanous serviceObj["url"] = url; 42*d5c0172eSEd Tanous value.emplace_back(std::move(serviceObj)); 43*d5c0172eSEd Tanous } 44*d5c0172eSEd Tanous 45*d5c0172eSEd Tanous obj["value"] = std::move(value); 46*d5c0172eSEd Tanous 47*d5c0172eSEd Tanous asyncResp->res.jsonValue = std::move(obj); 48*d5c0172eSEd Tanous } 49*d5c0172eSEd Tanous 50*d5c0172eSEd Tanous inline void requestRoutesOdata(App& app) 51*d5c0172eSEd Tanous { 52*d5c0172eSEd Tanous BMCWEB_ROUTE(app, "/redfish/v1/odata/") 53*d5c0172eSEd Tanous .methods(boost::beast::http::verb::get)(redfishOdataGet); 54*d5c0172eSEd Tanous } 55*d5c0172eSEd Tanous 56*d5c0172eSEd Tanous } // namespace redfish 57