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