blob: 742e9510816ab49cbfa95ea9762c5554d50a22a4 [file] [log] [blame]
#ifndef THIRD_PARTY_MILOTIC_EXTERNAL_CC_TLBMC_REDFISH_REQUEST_H_
#define THIRD_PARTY_MILOTIC_EXTERNAL_CC_TLBMC_REDFISH_REQUEST_H_
#include <string>
#include <string_view>
#include <unordered_set>
#include <utility>
#include "absl/status/statusor.h"
#include "boost/beast/http/string_body.hpp" //NOLINT
#include "boost/beast/http/verb.hpp" //NOLINT`
#include "boost/url/url.hpp" // NOLINT
#include "redfish_v1.pb.h"
#include "tlbmc/redfish/query_parameters.h"
namespace milotic_tlbmc {
constexpr std::string_view kTlbmcPrefix = "/tlbmc/";
class RedfishRequest {
public:
RedfishRequest(const redfish::v1::Request &request,
boost::beast::http::verb method);
explicit RedfishRequest(
boost::beast::http::request<boost::beast::http::string_body> &&request)
: request_(std::move(request)) {}
static absl::StatusOr<RedfishRequest> Create(
boost::beast::http::request<boost::beast::http::string_body> &&request);
RedfishRequest(RedfishRequest &&request) = default;
RedfishRequest &operator=(RedfishRequest &&request) = default;
RedfishRequest(const RedfishRequest &request) = delete;
RedfishRequest &operator=(const RedfishRequest &request) = delete;
std::string_view Target() const;
void SetTarget(std::string_view target) { request_.target(target); }
boost::beast::http::verb Method() const;
std::string_view GetHeaderValue(std::string_view key) const;
std::string_view Body() const;
void SetFromGrpc(bool from_grpc) { from_grpc_ = from_grpc; }
bool FromGrpc() const { return from_grpc_; }
void SetWithTrustBundle(bool with_trust_bundle) {
with_trust_bundle_ = with_trust_bundle;
}
bool WithTrustBundle() const { return with_trust_bundle_; }
void SetPeerAuthenticated(bool peer_authenticated) {
peer_authenticated_ = peer_authenticated;
}
bool PeerAuthenticated() const { return peer_authenticated_; }
void SetPeerPrivileges(
const std::unordered_set<std::string> &peer_privileges) {
peer_privileges_ = peer_privileges;
}
const std::unordered_set<std::string> &PeerPrivileges() const {
return peer_privileges_;
}
const QueryParameters &GetQueryParameters() const {
return query_parameters_;
}
bool TlbmcOnly() const { return tlbmc_only_; }
void SetTlbmcOnly(bool tlbmc_only) { tlbmc_only_ = tlbmc_only; }
protected:
static std::string_view TrimTlbmcPrefix(std::string_view url);
static bool HasTlbmcPrefix(std::string_view url);
boost::beast::http::request<boost::beast::http::string_body> request_;
bool from_grpc_ = false;
bool with_trust_bundle_ = false;
bool peer_authenticated_ = false;
bool tlbmc_only_ = false;
std::unordered_set<std::string> peer_privileges_;
QueryParameters query_parameters_;
};
} // namespace milotic_tlbmc
#endif // THIRD_PARTY_MILOTIC_EXTERNAL_CC_TLBMC_REDFISH_REQUEST_H_