| #ifndef THIRD_PARTY_GBMCWEB_HTTP_PARSING_H_ | |
| #define THIRD_PARTY_GBMCWEB_HTTP_PARSING_H_ | |
| #include <cstdint> | |
| #include <string_view> | |
| #include "boost/algorithm/string/predicate.hpp" // NOLINT | |
| #include "http_request.hpp" | |
| #include "logging.hpp" | |
| #include <nlohmann/json.hpp> | |
| enum class JsonParseResult : std::uint8_t { | |
| BadContentType, | |
| BadJsonData, | |
| Success, | |
| }; | |
| inline JsonParseResult parseRequestAsJson(const crow::Request& req, | |
| nlohmann::json& jsonOut) { | |
| std::string_view content_type = | |
| req.getHeaderValue(boost::beast::http::field::content_type); | |
| if (!boost::iequals(content_type, "application/json") && | |
| !boost::iequals(content_type, "application/json; charset=utf-8")) { | |
| BMCWEB_LOG_WARNING << "Failed to parse content type on request"; | |
| #ifndef BMCWEB_INSECURE_IGNORE_CONTENT_TYPE | |
| return JsonParseResult::BadContentType; | |
| #endif | |
| } | |
| jsonOut = nlohmann::json::parse(req.body(), nullptr, false); | |
| if (jsonOut.is_discarded()) { | |
| BMCWEB_LOG_WARNING << "Failed to parse json in request"; | |
| return JsonParseResult::BadJsonData; | |
| } | |
| return JsonParseResult::Success; | |
| } | |
| #endif // THIRD_PARTY_GBMCWEB_HTTP_PARSING_H_ |