blob: beb26477a5c775cf3370dfbecd37ca164df8ee70 [file] [log] [blame]
#pragma once
#include "app.hpp"
#include "error_messages.hpp"
#include "http_request.hpp"
#include "http_response.hpp"
#include "query.hpp"
#include "registries/privilege_registry.hpp"
#include "utility.hpp"
#include <boost/url/format.hpp>
#include <nlohmann/json.hpp>
#include <memory>
#include <ranges>
#include <string>
#include <string_view>
namespace redfish
{
inline void redfishOdataGet(const crow::Request& /*req*/,
const std::shared_ptr<bmcweb::AsyncResp>& asyncResp)
{
nlohmann::json::object_t obj;
obj["@odata.context"] = "/redfish/v1/$metadata";
nlohmann::json::array_t value;
for (std::string_view service :
{"$metadata", "odata", "JsonSchemas", "Service", "ServiceRoot",
"Systems", "Chassis", "Managers", "SessionService", "AccountService",
"UpdateService"})
{
nlohmann::json::object_t serviceObj;
serviceObj["kind"] = "Singleton";
serviceObj["name"] = "$metadata";
boost::urls::url url = boost::urls::format("/redfish/v1/{}", service);
if (service == "Service")
{
url = boost::urls::url("/redfish/v1");
}
serviceObj["url"] = url;
value.emplace_back(std::move(serviceObj));
}
obj["value"] = std::move(value);
asyncResp->res.jsonValue = std::move(obj);
}
inline void requestRoutesOdata(App& app)
{
BMCWEB_ROUTE(app, "/redfish/v1/odata/")
.methods(boost::beast::http::verb::get)(redfishOdataGet);
}
} // namespace redfish