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 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 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 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 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 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 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 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