xref: /openbmc/bmcweb/features/redfish/lib/bios.hpp (revision d82a3acd1abc04a13f90cef5234416c3e18da0e1)
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> &params) 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> &params) 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