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: 20*cb13a392SEd Tanous void doGet(crow::Response& res, const crow::Request&, 21*cb13a392SEd 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 3572d566d9SGunnar Mills // Get the ActiveSoftwareImage 3672d566d9SGunnar Mills fw_util::getActiveFwVersion(asyncResp, fw_util::biosPurpose, "", true); 37d82a3acdSCarol Wang } 38d82a3acdSCarol Wang }; 39d82a3acdSCarol Wang /** 40d82a3acdSCarol Wang * BiosReset class supports handle POST method for Reset bios. 41d82a3acdSCarol Wang * The class retrieves and sends data directly to D-Bus. 42d82a3acdSCarol Wang */ 43d82a3acdSCarol Wang class BiosReset : public Node 44d82a3acdSCarol Wang { 45d82a3acdSCarol Wang public: 4652cc112dSEd Tanous BiosReset(App& app) : 47d82a3acdSCarol Wang Node(app, "/redfish/v1/Systems/system/Bios/Actions/Bios.ResetBios/") 48d82a3acdSCarol Wang { 49d82a3acdSCarol Wang entityPrivileges = { 50d82a3acdSCarol Wang {boost::beast::http::verb::post, {{"ConfigureManager"}}}}; 51d82a3acdSCarol Wang } 52d82a3acdSCarol Wang 53d82a3acdSCarol Wang private: 54d82a3acdSCarol Wang /** 55d82a3acdSCarol Wang * Function handles POST method request. 56d82a3acdSCarol Wang * Analyzes POST body message before sends Reset request data to D-Bus. 57d82a3acdSCarol Wang */ 58*cb13a392SEd Tanous void doPost(crow::Response& res, const crow::Request&, 59*cb13a392SEd Tanous const std::vector<std::string>&) override 60d82a3acdSCarol Wang { 61d82a3acdSCarol Wang auto asyncResp = std::make_shared<AsyncResp>(res); 62d82a3acdSCarol Wang 63d82a3acdSCarol Wang crow::connections::systemBus->async_method_call( 64d82a3acdSCarol Wang [asyncResp](const boost::system::error_code ec) { 65d82a3acdSCarol Wang if (ec) 66d82a3acdSCarol Wang { 67d82a3acdSCarol Wang BMCWEB_LOG_ERROR << "Failed to reset bios: " << ec; 68d82a3acdSCarol Wang messages::internalError(asyncResp->res); 69d82a3acdSCarol Wang return; 70d82a3acdSCarol Wang } 71d82a3acdSCarol Wang }, 72d82a3acdSCarol Wang "org.open_power.Software.Host.Updater", 73d82a3acdSCarol Wang "/xyz/openbmc_project/software", 74d82a3acdSCarol Wang "xyz.openbmc_project.Common.FactoryReset", "Reset"); 75d82a3acdSCarol Wang } 76d82a3acdSCarol Wang }; 77d82a3acdSCarol Wang } // namespace redfish 78