xref: /openbmc/bmcweb/redfish-core/include/utils/etag_utils.hpp (revision 08fad5d9dc59323a8916ff97a035221621047d8c)
1 // SPDX-License-Identifier: Apache-2.0
2 // SPDX-FileCopyrightText: Copyright OpenBMC Authors
3 #pragma once
4 
5 #include "async_resp.hpp"
6 #include "http_response.hpp"
7 #include "json_utils.hpp"
8 
9 #include <nlohmann/json.hpp>
10 
11 #include <functional>
12 #include <memory>
13 #include <utility>
14 
15 namespace redfish
16 {
17 
18 namespace etag_utils
19 {
20 
21 namespace details
22 {
23 
etagOmitDateTimeHandler(const std::function<void (crow::Response &)> & oldCompleteRequestHandler,crow::Response & res)24 inline void etagOmitDateTimeHandler(
25     const std::function<void(crow::Response&)>& oldCompleteRequestHandler,
26     crow::Response& res)
27 {
28     size_t hash = json_util::hashJsonWithoutKey(res.jsonValue, "DateTime");
29     res.setCurrentOverrideEtag("\"" + intToHexString(hash, 8) + "\"");
30     oldCompleteRequestHandler(res);
31 }
32 
33 } // namespace details
34 
setEtagOmitDateTimeHandler(const std::shared_ptr<bmcweb::AsyncResp> & asyncResp)35 inline void setEtagOmitDateTimeHandler(
36     const std::shared_ptr<bmcweb::AsyncResp>& asyncResp)
37 {
38     std::function<void(crow::Response&)> oldCompleteRequestHandler =
39         asyncResp->res.releaseCompleteRequestHandler();
40     asyncResp->res.setCompleteRequestHandler(
41         std::bind_front(details::etagOmitDateTimeHandler,
42                         std::move(oldCompleteRequestHandler)));
43 }
44 
45 } // namespace etag_utils
46 
47 } // namespace redfish
48