1 /* 2 // Copyright (c) 2018 Intel Corporation 3 // 4 // Licensed under the Apache License, Version 2.0 (the "License"); 5 // you may not use this file except in compliance with the License. 6 // You may obtain a copy of the License at 7 // 8 // http://www.apache.org/licenses/LICENSE-2.0 9 // 10 // Unless required by applicable law or agreed to in writing, software 11 // distributed under the License is distributed on an "AS IS" BASIS, 12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 // See the License for the specific language governing permissions and 14 // limitations under the License. 15 */ 16 #pragma once 17 18 #include <bmcweb_config.h> 19 20 #include <app.hpp> 21 #include <async_resp.hpp> 22 #include <http_request.hpp> 23 #include <nlohmann/json.hpp> 24 #include <persistent_data.hpp> 25 #include <query.hpp> 26 #include <registries/privilege_registry.hpp> 27 #include <utils/systemd_utils.hpp> 28 29 namespace redfish 30 { 31 32 inline void 33 handleServiceRootGet(const std::shared_ptr<bmcweb::AsyncResp>& asyncResp) 34 { 35 std::string uuid = persistent_data::getConfig().systemUuid; 36 asyncResp->res.jsonValue["@odata.type"] = 37 "#ServiceRoot.v1_11_0.ServiceRoot"; 38 asyncResp->res.jsonValue["@odata.id"] = "/redfish/v1"; 39 asyncResp->res.jsonValue["Id"] = "RootService"; 40 asyncResp->res.jsonValue["Name"] = "Root Service"; 41 asyncResp->res.jsonValue["RedfishVersion"] = "1.9.0"; 42 asyncResp->res.jsonValue["Links"]["Sessions"]["@odata.id"] = 43 "/redfish/v1/SessionService/Sessions"; 44 asyncResp->res.jsonValue["AccountService"]["@odata.id"] = 45 "/redfish/v1/AccountService"; 46 asyncResp->res.jsonValue["Chassis"]["@odata.id"] = "/redfish/v1/Chassis"; 47 asyncResp->res.jsonValue["JsonSchemas"]["@odata.id"] = 48 "/redfish/v1/JsonSchemas"; 49 asyncResp->res.jsonValue["Managers"]["@odata.id"] = "/redfish/v1/Managers"; 50 asyncResp->res.jsonValue["SessionService"]["@odata.id"] = 51 "/redfish/v1/SessionService"; 52 asyncResp->res.jsonValue["Systems"]["@odata.id"] = "/redfish/v1/Systems"; 53 asyncResp->res.jsonValue["Registries"]["@odata.id"] = 54 "/redfish/v1/Registries"; 55 asyncResp->res.jsonValue["UpdateService"]["@odata.id"] = 56 "/redfish/v1/UpdateService"; 57 asyncResp->res.jsonValue["UUID"] = uuid; 58 asyncResp->res.jsonValue["CertificateService"]["@odata.id"] = 59 "/redfish/v1/CertificateService"; 60 asyncResp->res.jsonValue["Tasks"]["@odata.id"] = "/redfish/v1/TaskService"; 61 asyncResp->res.jsonValue["EventService"]["@odata.id"] = 62 "/redfish/v1/EventService"; 63 asyncResp->res.jsonValue["TelemetryService"]["@odata.id"] = 64 "/redfish/v1/TelemetryService"; 65 asyncResp->res.jsonValue["Cables"]["@odata.id"] = "/redfish/v1/Cables"; 66 67 nlohmann::json& protocolFeatures = 68 asyncResp->res.jsonValue["ProtocolFeaturesSupported"]; 69 protocolFeatures["ExcerptQuery"] = false; 70 71 protocolFeatures["ExpandQuery"]["ExpandAll"] = 72 bmcwebInsecureEnableQueryParams; 73 // This is the maximum level defined in ServiceRoot.v1_13_0.json 74 if (bmcwebInsecureEnableQueryParams) 75 { 76 protocolFeatures["ExpandQuery"]["MaxLevels"] = 6; 77 } 78 protocolFeatures["ExpandQuery"]["Levels"] = bmcwebInsecureEnableQueryParams; 79 protocolFeatures["ExpandQuery"]["Links"] = bmcwebInsecureEnableQueryParams; 80 protocolFeatures["ExpandQuery"]["NoLinks"] = 81 bmcwebInsecureEnableQueryParams; 82 protocolFeatures["FilterQuery"] = false; 83 protocolFeatures["OnlyMemberQuery"] = bmcwebInsecureEnableQueryParams; 84 protocolFeatures["SelectQuery"] = false; 85 protocolFeatures["DeepOperations"]["DeepPOST"] = false; 86 protocolFeatures["DeepOperations"]["DeepPATCH"] = false; 87 } 88 89 inline void requestRoutesServiceRoot(App& app) 90 { 91 BMCWEB_ROUTE(app, "/redfish/v1/") 92 .privileges(redfish::privileges::getServiceRoot) 93 .methods(boost::beast::http::verb::get)( 94 [&app](const crow::Request& req, 95 const std::shared_ptr<bmcweb::AsyncResp>& asyncResp) { 96 if (!redfish::setUpRedfishRoute(app, req, asyncResp->res)) 97 { 98 return; 99 } 100 handleServiceRootGet(asyncResp); 101 }); 102 } 103 104 } // namespace redfish 105