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