| #include "tlbmc/redfish/request.h" |
| |
| #include <string> |
| #include <string_view> |
| #include <utility> |
| |
| #include "absl/status/statusor.h" |
| #include "absl/strings/match.h" |
| #include "absl/strings/string_view.h" |
| #include "redfish_v1.pb.h" |
| #include "g3/macros.h" |
| #include "tlbmc/redfish/query_parameters.h" |
| |
| namespace milotic_tlbmc { |
| |
| RedfishRequest::RedfishRequest(const ::redfish::v1::Request& request, |
| boost::beast::http::verb method) { |
| request_.target(TrimTlbmcPrefix(request.url())); |
| request_.method(method); |
| |
| if (!request.json_str().empty()) { |
| request_.body() = request.json_str(); |
| } else if (request.has_octet_stream()) { |
| request_.body() = request.octet_stream(); |
| } |
| |
| for (const auto& [key, value] : request.headers()) { |
| request_.base().insert(key, value); |
| }; |
| } |
| absl::StatusOr<RedfishRequest> RedfishRequest::Create( |
| boost::beast::http::request<boost::beast::http::string_body>&& request) { |
| RedfishRequest redfish_request(std::move(request)); |
| |
| redfish_request.SetTlbmcOnly(HasTlbmcPrefix(redfish_request.Target())); |
| |
| // Trim tlbmc prefix before doing anything else |
| boost::urls::url target(TrimTlbmcPrefix(redfish_request.Target())); |
| |
| // Remove Query Parameters from the target |
| redfish_request.request_.target(target.encoded_path()); |
| |
| ECCLESIA_ASSIGN_OR_RETURN(redfish_request.query_parameters_, |
| QueryParameters::Create(target.params())); |
| |
| return redfish_request; |
| } |
| |
| std::string_view RedfishRequest::Target() const { return request_.target(); } |
| |
| boost::beast::http::verb RedfishRequest::Method() const { |
| return request_.method(); |
| } |
| |
| std::string_view RedfishRequest::GetHeaderValue(std::string_view key) const { |
| return request_[key]; |
| } |
| |
| std::string_view RedfishRequest::Body() const { return request_.body(); } |
| |
| std::string_view RedfishRequest::TrimTlbmcPrefix(std::string_view url) { |
| if (absl::StartsWith(url, kTlbmcPrefix)) { |
| // Need to preserve the leading '/' |
| url = url.substr(kTlbmcPrefix.size() - 1); |
| } |
| return url; |
| } |
| |
| bool RedfishRequest::HasTlbmcPrefix(std::string_view url) { |
| return absl::StartsWith(url, kTlbmcPrefix); |
| } |
| |
| } // namespace milotic_tlbmc |