xref: /openbmc/bmcweb/redfish-core/lib/manager_logservices_dbus_eventlog.hpp (revision c621786ea25e9a82187a52a95e9810cf989ace72)
1ab8aaebaSOliver Brewka // SPDX-License-Identifier: Apache-2.0
2ab8aaebaSOliver Brewka // SPDX-FileCopyrightText: Copyright OpenBMC Authors
3ab8aaebaSOliver Brewka // SPDX-FileCopyrightText: Copyright 2018 Intel Corporation
4ab8aaebaSOliver Brewka #pragma once
5ab8aaebaSOliver Brewka 
6ab8aaebaSOliver Brewka #include "app.hpp"
7ab8aaebaSOliver Brewka #include "async_resp.hpp"
8ab8aaebaSOliver Brewka #include "error_messages.hpp"
9ab8aaebaSOliver Brewka #include "http_request.hpp"
10ab8aaebaSOliver Brewka #include "query.hpp"
11ab8aaebaSOliver Brewka #include "registries/privilege_registry.hpp"
12ab8aaebaSOliver Brewka #include "utils/eventlog_utils.hpp"
13ab8aaebaSOliver Brewka 
14ab8aaebaSOliver Brewka #include <boost/beast/http/field.hpp>
15ab8aaebaSOliver Brewka #include <boost/beast/http/status.hpp>
16ab8aaebaSOliver Brewka #include <boost/beast/http/verb.hpp>
17ab8aaebaSOliver Brewka #include <boost/system/linux_error.hpp>
18ab8aaebaSOliver Brewka #include <boost/url/format.hpp>
19ab8aaebaSOliver Brewka #include <boost/url/url.hpp>
20ab8aaebaSOliver Brewka #include <sdbusplus/message.hpp>
21ab8aaebaSOliver Brewka #include <sdbusplus/message/native_types.hpp>
22ab8aaebaSOliver Brewka #include <sdbusplus/unpack_properties.hpp>
23ab8aaebaSOliver Brewka 
24ab8aaebaSOliver Brewka #include <memory>
25ab8aaebaSOliver Brewka #include <string>
26ab8aaebaSOliver Brewka 
27ab8aaebaSOliver Brewka namespace redfish
28ab8aaebaSOliver Brewka {
29ab8aaebaSOliver Brewka 
handleManagersDBusEventLogEntryCollection(crow::App & app,const crow::Request & req,const std::shared_ptr<bmcweb::AsyncResp> & asyncResp,const std::string & managerId)30ab8aaebaSOliver Brewka inline void handleManagersDBusEventLogEntryCollection(
31ab8aaebaSOliver Brewka     crow::App& app, const crow::Request& req,
32ab8aaebaSOliver Brewka     const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
33ab8aaebaSOliver Brewka     const std::string& managerId)
34ab8aaebaSOliver Brewka {
35ab8aaebaSOliver Brewka     if (!redfish::setUpRedfishRoute(app, req, asyncResp))
36ab8aaebaSOliver Brewka     {
37ab8aaebaSOliver Brewka         return;
38ab8aaebaSOliver Brewka     }
39ab8aaebaSOliver Brewka     if (managerId != BMCWEB_REDFISH_MANAGER_URI_NAME)
40ab8aaebaSOliver Brewka     {
41ab8aaebaSOliver Brewka         messages::resourceNotFound(asyncResp->res, "Manager", managerId);
42ab8aaebaSOliver Brewka         return;
43ab8aaebaSOliver Brewka     }
44ab8aaebaSOliver Brewka     eventlog_utils::dBusEventLogEntryCollection(
45ab8aaebaSOliver Brewka         asyncResp, eventlog_utils::LogServiceParent::Managers);
46ab8aaebaSOliver Brewka }
47ab8aaebaSOliver Brewka 
handleManagersDBusEventLogEntryGet(crow::App & app,const crow::Request & req,const std::shared_ptr<bmcweb::AsyncResp> & asyncResp,const std::string & managerId,const std::string & entryId)48ab8aaebaSOliver Brewka inline void handleManagersDBusEventLogEntryGet(
49ab8aaebaSOliver Brewka     crow::App& app, const crow::Request& req,
50ab8aaebaSOliver Brewka     const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
51ab8aaebaSOliver Brewka     const std::string& managerId, const std::string& entryId)
52ab8aaebaSOliver Brewka {
53ab8aaebaSOliver Brewka     if (!redfish::setUpRedfishRoute(app, req, asyncResp))
54ab8aaebaSOliver Brewka     {
55ab8aaebaSOliver Brewka         return;
56ab8aaebaSOliver Brewka     }
57ab8aaebaSOliver Brewka     if (managerId != BMCWEB_REDFISH_MANAGER_URI_NAME)
58ab8aaebaSOliver Brewka     {
59ab8aaebaSOliver Brewka         messages::resourceNotFound(asyncResp->res, "Manager", managerId);
60ab8aaebaSOliver Brewka         return;
61ab8aaebaSOliver Brewka     }
62ab8aaebaSOliver Brewka 
63ab8aaebaSOliver Brewka     eventlog_utils::dBusEventLogEntryGet(
64ab8aaebaSOliver Brewka         asyncResp, eventlog_utils::LogServiceParent::Managers, entryId);
65ab8aaebaSOliver Brewka }
66ab8aaebaSOliver Brewka 
handleManagersDBusEventLogEntryPatch(crow::App & app,const crow::Request & req,const std::shared_ptr<bmcweb::AsyncResp> & asyncResp,const std::string & managerId,const std::string & entryId)67ab8aaebaSOliver Brewka inline void handleManagersDBusEventLogEntryPatch(
68ab8aaebaSOliver Brewka     crow::App& app, const crow::Request& req,
69ab8aaebaSOliver Brewka     const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
70ab8aaebaSOliver Brewka     const std::string& managerId, const std::string& entryId)
71ab8aaebaSOliver Brewka {
72ab8aaebaSOliver Brewka     if (!redfish::setUpRedfishRoute(app, req, asyncResp))
73ab8aaebaSOliver Brewka     {
74ab8aaebaSOliver Brewka         return;
75ab8aaebaSOliver Brewka     }
76ab8aaebaSOliver Brewka     if (managerId != BMCWEB_REDFISH_MANAGER_URI_NAME)
77ab8aaebaSOliver Brewka     {
78ab8aaebaSOliver Brewka         messages::resourceNotFound(asyncResp->res, "Manager", managerId);
79ab8aaebaSOliver Brewka         return;
80ab8aaebaSOliver Brewka     }
81ab8aaebaSOliver Brewka 
82ab8aaebaSOliver Brewka     eventlog_utils::dBusEventLogEntryPatch(req, asyncResp, entryId);
83ab8aaebaSOliver Brewka }
84ab8aaebaSOliver Brewka 
handleManagersDBusEventLogEntryDelete(crow::App & app,const crow::Request & req,const std::shared_ptr<bmcweb::AsyncResp> & asyncResp,const std::string & managerId,const std::string & entryId)85ab8aaebaSOliver Brewka inline void handleManagersDBusEventLogEntryDelete(
86ab8aaebaSOliver Brewka     crow::App& app, const crow::Request& req,
87ab8aaebaSOliver Brewka     const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
88ab8aaebaSOliver Brewka     const std::string& managerId, const std::string& entryId)
89ab8aaebaSOliver Brewka {
90ab8aaebaSOliver Brewka     if (!redfish::setUpRedfishRoute(app, req, asyncResp))
91ab8aaebaSOliver Brewka     {
92ab8aaebaSOliver Brewka         return;
93ab8aaebaSOliver Brewka     }
94ab8aaebaSOliver Brewka     if (managerId != BMCWEB_REDFISH_MANAGER_URI_NAME)
95ab8aaebaSOliver Brewka     {
96ab8aaebaSOliver Brewka         messages::resourceNotFound(asyncResp->res, "Manager", managerId);
97ab8aaebaSOliver Brewka         return;
98ab8aaebaSOliver Brewka     }
99ab8aaebaSOliver Brewka 
100ab8aaebaSOliver Brewka     eventlog_utils::dBusEventLogEntryDelete(asyncResp, entryId);
101ab8aaebaSOliver Brewka }
102ab8aaebaSOliver Brewka 
handleManagersDBusLogServiceActionsClear(crow::App & app,const crow::Request & req,const std::shared_ptr<bmcweb::AsyncResp> & asyncResp,const std::string & managerId)103ab8aaebaSOliver Brewka inline void handleManagersDBusLogServiceActionsClear(
104ab8aaebaSOliver Brewka     crow::App& app, const crow::Request& req,
105ab8aaebaSOliver Brewka     const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
106ab8aaebaSOliver Brewka     const std::string& managerId)
107ab8aaebaSOliver Brewka {
108ab8aaebaSOliver Brewka     if (!redfish::setUpRedfishRoute(app, req, asyncResp))
109ab8aaebaSOliver Brewka     {
110ab8aaebaSOliver Brewka         return;
111ab8aaebaSOliver Brewka     }
112ab8aaebaSOliver Brewka     if (!http_helpers::isContentTypeAllowed(
113ab8aaebaSOliver Brewka             req.getHeaderValue("Accept"),
114ab8aaebaSOliver Brewka             http_helpers::ContentType::OctetStream, true))
115ab8aaebaSOliver Brewka     {
116ab8aaebaSOliver Brewka         asyncResp->res.result(boost::beast::http::status::bad_request);
117ab8aaebaSOliver Brewka     }
118ab8aaebaSOliver Brewka     if (managerId != BMCWEB_REDFISH_MANAGER_URI_NAME)
119ab8aaebaSOliver Brewka     {
120ab8aaebaSOliver Brewka         messages::resourceNotFound(asyncResp->res, "Manager", managerId);
121ab8aaebaSOliver Brewka         return;
122ab8aaebaSOliver Brewka     }
123ab8aaebaSOliver Brewka     eventlog_utils::dBusLogServiceActionsClear(asyncResp);
124ab8aaebaSOliver Brewka }
125ab8aaebaSOliver Brewka 
handleManagersDBusEventLogEntryDownload(crow::App & app,const crow::Request & req,const std::shared_ptr<bmcweb::AsyncResp> & asyncResp,const std::string & managerId,const std::string & entryId)126ab8aaebaSOliver Brewka inline void handleManagersDBusEventLogEntryDownload(
127ab8aaebaSOliver Brewka     crow::App& app, const crow::Request& req,
128ab8aaebaSOliver Brewka     const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
129ab8aaebaSOliver Brewka     const std::string& managerId, const std::string& entryId)
130ab8aaebaSOliver Brewka {
131ab8aaebaSOliver Brewka     if (!redfish::setUpRedfishRoute(app, req, asyncResp))
132ab8aaebaSOliver Brewka     {
133ab8aaebaSOliver Brewka         return;
134ab8aaebaSOliver Brewka     }
135ab8aaebaSOliver Brewka     if (!http_helpers::isContentTypeAllowed(
136ab8aaebaSOliver Brewka             req.getHeaderValue("Accept"),
137ab8aaebaSOliver Brewka             http_helpers::ContentType::OctetStream, true))
138ab8aaebaSOliver Brewka     {
139ab8aaebaSOliver Brewka         asyncResp->res.result(boost::beast::http::status::bad_request);
140ab8aaebaSOliver Brewka     }
141ab8aaebaSOliver Brewka     if (managerId != BMCWEB_REDFISH_MANAGER_URI_NAME)
142ab8aaebaSOliver Brewka     {
143ab8aaebaSOliver Brewka         messages::resourceNotFound(asyncResp->res, "Manager", managerId);
144ab8aaebaSOliver Brewka         return;
145ab8aaebaSOliver Brewka     }
146ab8aaebaSOliver Brewka     eventlog_utils::downloadEventLogEntry(asyncResp, entryId, "System");
147ab8aaebaSOliver Brewka }
148ab8aaebaSOliver Brewka 
requestRoutesManagersDBusEventLog(App & app)149*c621786eSEd Tanous inline void requestRoutesManagersDBusEventLog(App& app)
150ab8aaebaSOliver Brewka {
151ab8aaebaSOliver Brewka     BMCWEB_ROUTE(app,
152ab8aaebaSOliver Brewka                  "/redfish/v1/Managers/<str>/LogServices/EventLog/Entries/")
153ab8aaebaSOliver Brewka         .privileges(redfish::privileges::getLogEntryCollection)
154ab8aaebaSOliver Brewka         .methods(boost::beast::http::verb::get)(std::bind_front(
155ab8aaebaSOliver Brewka             handleManagersDBusEventLogEntryCollection, std::ref(app)));
156ab8aaebaSOliver Brewka     BMCWEB_ROUTE(
157ab8aaebaSOliver Brewka         app, "/redfish/v1/Managers/<str>/LogServices/EventLog/Entries/<str>/")
158ab8aaebaSOliver Brewka         .privileges(redfish::privileges::getLogEntry)
159ab8aaebaSOliver Brewka         .methods(boost::beast::http::verb::get)(
160ab8aaebaSOliver Brewka             std::bind_front(handleManagersDBusEventLogEntryGet, std::ref(app)));
161ab8aaebaSOliver Brewka 
162ab8aaebaSOliver Brewka     BMCWEB_ROUTE(
163ab8aaebaSOliver Brewka         app, "/redfish/v1/Managers/<str>/LogServices/EventLog/Entries/<str>/")
164ab8aaebaSOliver Brewka         .privileges(redfish::privileges::patchLogEntry)
165ab8aaebaSOliver Brewka         .methods(boost::beast::http::verb::patch)(std::bind_front(
166ab8aaebaSOliver Brewka             handleManagersDBusEventLogEntryPatch, std::ref(app)));
167ab8aaebaSOliver Brewka 
168ab8aaebaSOliver Brewka     BMCWEB_ROUTE(
169ab8aaebaSOliver Brewka         app, "/redfish/v1/Managers/<str>/LogServices/EventLog/Entries/<str>/")
170ab8aaebaSOliver Brewka         .privileges(
171ab8aaebaSOliver Brewka             redfish::privileges::
172ab8aaebaSOliver Brewka                 deleteLogEntrySubOverComputerSystemLogServiceCollectionLogServiceLogEntryCollection)
173ab8aaebaSOliver Brewka         .methods(boost::beast::http::verb::delete_)(std::bind_front(
174ab8aaebaSOliver Brewka             handleManagersDBusEventLogEntryDelete, std::ref(app)));
175ab8aaebaSOliver Brewka 
176ab8aaebaSOliver Brewka     BMCWEB_ROUTE(
177ab8aaebaSOliver Brewka         app,
178ab8aaebaSOliver Brewka         "/redfish/v1/Managers/<str>/LogServices/EventLog/Actions/LogService.ClearLog/")
179ab8aaebaSOliver Brewka         .privileges(redfish::privileges::
180ab8aaebaSOliver Brewka                         postLogServiceSubOverComputerSystemLogServiceCollection)
181ab8aaebaSOliver Brewka         .methods(boost::beast::http::verb::post)(std::bind_front(
182ab8aaebaSOliver Brewka             handleManagersDBusLogServiceActionsClear, std::ref(app)));
183ab8aaebaSOliver Brewka     BMCWEB_ROUTE(
184ab8aaebaSOliver Brewka         app,
185ab8aaebaSOliver Brewka         "/redfish/v1/Managers/<str>/LogServices/EventLog/Entries/<str>/attachment/")
186ab8aaebaSOliver Brewka         .privileges(redfish::privileges::getLogEntry)
187ab8aaebaSOliver Brewka         .methods(boost::beast::http::verb::get)(std::bind_front(
188ab8aaebaSOliver Brewka             handleManagersDBusEventLogEntryDownload, std::ref(app)));
189ab8aaebaSOliver Brewka }
190ab8aaebaSOliver Brewka } // namespace redfish
191