blob: 0691465c2fd4d43e1ff109c0e40b6c2280f5e055 [file] [log] [blame]
Ed Tanous7045c8d2017-04-03 10:04:37 -07001#pragma once
2
Gunnar Mills1214b7e2020-06-04 10:11:30 -05003#include "common.h"
4#include "query_string.h"
5
Ratan Gupta6f359562019-04-03 10:39:08 +05306#include "sessions.hpp"
7
Ed Tanous8f626352018-12-19 14:51:54 -08008#include <boost/asio/io_context.hpp>
Ed Tanouse0d918b2018-03-27 17:41:04 -07009#include <boost/beast/http.hpp>
raviteja-b4722efe2020-02-03 12:23:18 -060010#include <boost/beast/ssl/ssl_stream.hpp>
Manojkiran Eda44250442020-06-16 12:51:38 +053011#include <boost/beast/websocket.hpp>
raviteja-b4722efe2020-02-03 12:23:18 -060012
Ed Tanous1abe55e2018-09-05 08:30:59 -070013namespace crow
14{
Ed Tanous7045c8d2017-04-03 10:04:37 -070015
Ed Tanous1abe55e2018-09-05 08:30:59 -070016struct Request
17{
raviteja-b4722efe2020-02-03 12:23:18 -060018#ifdef BMCWEB_ENABLE_SSL
19 using Adaptor = boost::beast::ssl_stream<boost::asio::ip::tcp::socket>;
20#else
21 using Adaptor = boost::asio::ip::tcp::socket;
22#endif
23
Ed Tanous43b761d2019-02-13 20:10:56 -080024 boost::beast::http::request<boost::beast::http::string_body>& req;
James Feistfe306722020-03-12 16:32:08 -070025 boost::beast::http::fields& fields;
Ed Tanous39e77502019-03-04 17:35:53 -080026 std::string_view url{};
Ed Tanous1abe55e2018-09-05 08:30:59 -070027 QueryString urlParams{};
28 bool isSecure{false};
Ed Tanous7045c8d2017-04-03 10:04:37 -070029
Ed Tanous1abe55e2018-09-05 08:30:59 -070030 const std::string& body;
Ed Tanouse0d918b2018-03-27 17:41:04 -070031
Ed Tanous1abe55e2018-09-05 08:30:59 -070032 void* middlewareContext{};
Ed Tanous8f626352018-12-19 14:51:54 -080033 boost::asio::io_context* ioService{};
Ed Tanous7045c8d2017-04-03 10:04:37 -070034
Ratan Gupta6f359562019-04-03 10:39:08 +053035 std::shared_ptr<crow::persistent_data::UserSession> session;
36
RAJESWARAN THILLAIGOVINDAN61dbeef2019-12-13 04:26:54 -060037 std::string userRole{};
raviteja-b4722efe2020-02-03 12:23:18 -060038 std::function<Adaptor&()> socket;
Ed Tanous271584a2019-07-09 16:24:22 -070039 Request(
40 boost::beast::http::request<boost::beast::http::string_body>& reqIn) :
41 req(reqIn),
James Feistfe306722020-03-12 16:32:08 -070042 fields(reqIn.base()), body(reqIn.body())
Gunnar Mills1214b7e2020-06-04 10:11:30 -050043 {}
Ed Tanous7045c8d2017-04-03 10:04:37 -070044
Ed Tanous271584a2019-07-09 16:24:22 -070045 boost::beast::http::verb method() const
Ed Tanous1abe55e2018-09-05 08:30:59 -070046 {
47 return req.method();
48 }
Ed Tanous7045c8d2017-04-03 10:04:37 -070049
Ed Tanous39e77502019-03-04 17:35:53 -080050 const std::string_view getHeaderValue(std::string_view key) const
Ed Tanous1abe55e2018-09-05 08:30:59 -070051 {
52 return req[key];
53 }
Ed Tanous7045c8d2017-04-03 10:04:37 -070054
Ed Tanous39e77502019-03-04 17:35:53 -080055 const std::string_view getHeaderValue(boost::beast::http::field key) const
Ed Tanous1abe55e2018-09-05 08:30:59 -070056 {
57 return req[key];
58 }
Ed Tanouse0d918b2018-03-27 17:41:04 -070059
Ed Tanous39e77502019-03-04 17:35:53 -080060 const std::string_view methodString() const
Ed Tanous1abe55e2018-09-05 08:30:59 -070061 {
62 return req.method_string();
63 }
Ed Tanouse0d918b2018-03-27 17:41:04 -070064
Ed Tanous39e77502019-03-04 17:35:53 -080065 const std::string_view target() const
Ed Tanous1abe55e2018-09-05 08:30:59 -070066 {
67 return req.target();
68 }
Ed Tanouse0d918b2018-03-27 17:41:04 -070069
Ed Tanous1abe55e2018-09-05 08:30:59 -070070 unsigned version()
71 {
72 return req.version();
73 }
Ed Tanouse0d918b2018-03-27 17:41:04 -070074
Ed Tanous1abe55e2018-09-05 08:30:59 -070075 bool isUpgrade()
76 {
77 return boost::beast::websocket::is_upgrade(req);
78 }
Ed Tanouse0d918b2018-03-27 17:41:04 -070079
Ed Tanous1abe55e2018-09-05 08:30:59 -070080 bool keepAlive()
81 {
82 return req.keep_alive();
83 }
Ed Tanous7045c8d2017-04-03 10:04:37 -070084};
Ed Tanouse0d918b2018-03-27 17:41:04 -070085
Ed Tanous1abe55e2018-09-05 08:30:59 -070086} // namespace crow