| #pragma once |
| |
| #ifdef BMCWEB_ENABLE_GRPC |
| #include "absl/log/log.h" |
| #include "bmcweb_authorizer_singleton.h" |
| #endif |
| |
| #include "common.hpp" |
| #include "sessions.hpp" |
| |
| #include <boost/asio/io_context.hpp> |
| #include <boost/asio/ip/address.hpp> |
| #include <boost/beast/http/message.hpp> |
| #include <boost/beast/http/string_body.hpp> |
| #include <boost/beast/websocket.hpp> |
| #include <boost/url/url.hpp> |
| |
| #include <string> |
| #include <string_view> |
| #include <system_error> |
| #include <unordered_set> |
| |
| namespace crow |
| { |
| |
| struct Request |
| { |
| boost::beast::http::request<boost::beast::http::string_body> req; |
| |
| private: |
| boost::urls::url urlBase; |
| |
| public: |
| bool isSecure{false}; |
| |
| boost::asio::io_context* ioService{}; |
| boost::asio::ip::address ipAddress; |
| |
| std::shared_ptr<persistent_data::UserSession> session; |
| |
| bool isSubscriptionRequest = false; |
| |
| // Dynamic fine grained authorization |
| bool fromGrpc = false; |
| bool with_trust_bundle = false; |
| bool peer_authenticated = false; |
| std::unordered_set<std::string> peer_privileges; |
| |
| std::string userRole; |
| Request(boost::beast::http::request<boost::beast::http::string_body> reqIn, |
| std::error_code& ec); |
| |
| Request(std::string_view bodyIn, std::error_code& ec); |
| |
| Request(const Request& other) = default; |
| Request(Request&& other) = default; |
| |
| Request& operator=(const Request&) = delete; |
| Request& operator=(const Request&&) = delete; |
| ~Request() = default; |
| |
| boost::beast::http::verb method() const |
| { |
| return req.method(); |
| } |
| |
| boost::beast::http::request<boost::beast::http::string_body> request() const { |
| return req; |
| } |
| |
| std::string_view getHeaderValue(std::string_view key) const |
| { |
| return req[key]; |
| } |
| |
| std::string_view getHeaderValue(boost::beast::http::field key) const |
| { |
| return req[key]; |
| } |
| |
| std::string_view methodString() const |
| { |
| return req.method_string(); |
| } |
| |
| std::string_view target() const |
| { |
| return req.target(); |
| } |
| |
| boost::urls::url& mutableUrl() |
| { |
| return urlBase; |
| } |
| |
| boost::urls::url_view url() const |
| { |
| return {urlBase}; |
| } |
| |
| const boost::beast::http::fields& fields() const |
| { |
| return req.base(); |
| } |
| |
| const std::string& body() const |
| { |
| return req.body(); |
| } |
| |
| bool target(std::string_view target) |
| { |
| req.target(target); |
| return setUrlInfo(); |
| } |
| |
| unsigned version() const |
| { |
| return req.version(); |
| } |
| |
| bool isUpgrade() const |
| { |
| return boost::beast::websocket::is_upgrade(req); |
| } |
| |
| bool keepAlive() const |
| { |
| return req.keep_alive(); |
| } |
| |
| private: |
| bool setUrlInfo(); |
| }; |
| |
| } // namespace crow |