1d82a3acdSCarol Wang #pragma once 2d82a3acdSCarol Wang 3d82a3acdSCarol Wang #include "node.hpp" 4d82a3acdSCarol Wang 572d566d9SGunnar Mills #include <utils/fw_utils.hpp> 6d82a3acdSCarol Wang namespace redfish 7d82a3acdSCarol Wang { 8d82a3acdSCarol Wang /** 9d82a3acdSCarol Wang * BiosService class supports handle get method for bios. 10d82a3acdSCarol Wang */ 11d82a3acdSCarol Wang class BiosService : public Node 12d82a3acdSCarol Wang { 13d82a3acdSCarol Wang public: 1452cc112dSEd Tanous BiosService(App& app) : Node(app, "/redfish/v1/Systems/system/Bios/") 15d82a3acdSCarol Wang { 16d82a3acdSCarol Wang entityPrivileges = {{boost::beast::http::verb::get, {{"Login"}}}}; 17d82a3acdSCarol Wang } 18d82a3acdSCarol Wang 19d82a3acdSCarol Wang private: 20cb13a392SEd Tanous void doGet(crow::Response& res, const crow::Request&, 21cb13a392SEd Tanous const std::vector<std::string>&) override 22d82a3acdSCarol Wang { 23d82a3acdSCarol Wang auto asyncResp = std::make_shared<AsyncResp>(res); 24d82a3acdSCarol Wang 25d82a3acdSCarol Wang asyncResp->res.jsonValue["@odata.id"] = 26d82a3acdSCarol Wang "/redfish/v1/Systems/system/Bios"; 27d82a3acdSCarol Wang asyncResp->res.jsonValue["@odata.type"] = "#Bios.v1_1_0.Bios"; 28d82a3acdSCarol Wang asyncResp->res.jsonValue["Name"] = "BIOS Configuration"; 29d82a3acdSCarol Wang asyncResp->res.jsonValue["Description"] = "BIOS Configuration Service"; 30d82a3acdSCarol Wang asyncResp->res.jsonValue["Id"] = "BIOS"; 31d82a3acdSCarol Wang asyncResp->res.jsonValue["Actions"]["#Bios.ResetBios"] = { 32d82a3acdSCarol Wang {"target", 33d82a3acdSCarol Wang "/redfish/v1/Systems/system/Bios/Actions/Bios.ResetBios"}}; 3472d566d9SGunnar Mills 35*f97ddba7SGunnar Mills // Get the ActiveSoftwareImage and SoftwareImages 36*f97ddba7SGunnar Mills fw_util::populateFirmwareInformation(asyncResp, fw_util::biosPurpose, 37*f97ddba7SGunnar Mills "", true); 38d82a3acdSCarol Wang } 39d82a3acdSCarol Wang }; 40d82a3acdSCarol Wang /** 41d82a3acdSCarol Wang * BiosReset class supports handle POST method for Reset bios. 42d82a3acdSCarol Wang * The class retrieves and sends data directly to D-Bus. 43d82a3acdSCarol Wang */ 44d82a3acdSCarol Wang class BiosReset : public Node 45d82a3acdSCarol Wang { 46d82a3acdSCarol Wang public: 4752cc112dSEd Tanous BiosReset(App& app) : 48d82a3acdSCarol Wang Node(app, "/redfish/v1/Systems/system/Bios/Actions/Bios.ResetBios/") 49d82a3acdSCarol Wang { 50d82a3acdSCarol Wang entityPrivileges = { 51d82a3acdSCarol Wang {boost::beast::http::verb::post, {{"ConfigureManager"}}}}; 52d82a3acdSCarol Wang } 53d82a3acdSCarol Wang 54d82a3acdSCarol Wang private: 55d82a3acdSCarol Wang /** 56d82a3acdSCarol Wang * Function handles POST method request. 57d82a3acdSCarol Wang * Analyzes POST body message before sends Reset request data to D-Bus. 58d82a3acdSCarol Wang */ 59cb13a392SEd Tanous void doPost(crow::Response& res, const crow::Request&, 60cb13a392SEd Tanous const std::vector<std::string>&) override 61d82a3acdSCarol Wang { 62d82a3acdSCarol Wang auto asyncResp = std::make_shared<AsyncResp>(res); 63d82a3acdSCarol Wang 64d82a3acdSCarol Wang crow::connections::systemBus->async_method_call( 65d82a3acdSCarol Wang [asyncResp](const boost::system::error_code ec) { 66d82a3acdSCarol Wang if (ec) 67d82a3acdSCarol Wang { 68d82a3acdSCarol Wang BMCWEB_LOG_ERROR << "Failed to reset bios: " << ec; 69d82a3acdSCarol Wang messages::internalError(asyncResp->res); 70d82a3acdSCarol Wang return; 71d82a3acdSCarol Wang } 72d82a3acdSCarol Wang }, 73d82a3acdSCarol Wang "org.open_power.Software.Host.Updater", 74d82a3acdSCarol Wang "/xyz/openbmc_project/software", 75d82a3acdSCarol Wang "xyz.openbmc_project.Common.FactoryReset", "Reset"); 76d82a3acdSCarol Wang } 77d82a3acdSCarol Wang }; 78d82a3acdSCarol Wang } // namespace redfish 79