From 93b2414cffcd5c3b5d55f2741172de0fbebbbedd Mon Sep 17 00:00:00 2001 From: Jadit19 Date: Fri, 25 Oct 2024 21:59:50 +0530 Subject: [PATCH 1/3] rename message folder to messages --- example/main.cpp | 8 ++-- include/mochios/client/client.h | 16 ++++---- include/mochios/helpers/client.h | 10 ++--- include/mochios/interceptors/interceptor.h | 8 ++-- .../mochios/interceptors/request/user_agent.h | 4 +- include/mochios/interceptors/response/json.h | 4 +- .../mochios/{message => messages}/message.h | 4 +- .../mochios/{message => messages}/request.h | 6 +-- .../mochios/{message => messages}/response.h | 6 +-- src/client/client.cpp | 38 +++++++++---------- src/helpers/client.cpp | 18 ++++----- src/interceptors/request/user_agent.cpp | 2 +- src/interceptors/response/json.cpp | 2 +- src/message/message.cpp | 15 -------- src/messages/message.cpp | 15 ++++++++ src/{message => messages}/request.cpp | 8 ++-- src/{message => messages}/response.cpp | 10 ++--- 17 files changed, 87 insertions(+), 87 deletions(-) rename include/mochios/{message => messages}/message.h (92%) rename include/mochios/{message => messages}/request.h (77%) rename include/mochios/{message => messages}/response.h (71%) delete mode 100644 src/message/message.cpp create mode 100644 src/messages/message.cpp rename src/{message => messages}/request.cpp (78%) rename src/{message => messages}/response.cpp (80%) diff --git a/example/main.cpp b/example/main.cpp index fd8222d..67f85d1 100644 --- a/example/main.cpp +++ b/example/main.cpp @@ -6,17 +6,17 @@ int main(int argc, char **argv) { connection.port = 80; mochios::Client client(connection); - client.interceptors.request.use([](mochios::message::Request &request) { + client.interceptors.request.use([](mochios::messages::Request &request) { logger::info("Intercepting request!"); request.print(); }); - mochios::message::Response response; + mochios::messages::Response response; - mochios::message::Request healthRequest("/health"); + mochios::messages::Request healthRequest("/health"); response = client.get(healthRequest); logger::success(response.body); - mochios::message::Request request("/about"); + mochios::messages::Request request("/about"); response = client.get(request); logger::success(response.body.dumps(2)); diff --git a/include/mochios/client/client.h b/include/mochios/client/client.h index e3ebc60..dc88200 100644 --- a/include/mochios/client/client.h +++ b/include/mochios/client/client.h @@ -21,7 +21,7 @@ class Client { mochios::client::Connection connection; void connect(); - mochios::message::Response sendHelper(mochios::message::Request &request); + mochios::messages::Response sendHelper(mochios::messages::Request &request); public: Client(const mochios::client::Connection &connection); @@ -29,13 +29,13 @@ class Client { mochios::interceptor::Interceptors interceptors; - mochios::message::Response get(mochios::message::Request &request); - mochios::message::Response post(mochios::message::Request &request); - mochios::message::Response put(mochios::message::Request &request); - mochios::message::Response patch(mochios::message::Request &request); - mochios::message::Response del(mochios::message::Request &request); - mochios::message::Response options(mochios::message::Request &request); - mochios::message::Response head(mochios::message::Request &request); + mochios::messages::Response get(mochios::messages::Request &request); + mochios::messages::Response post(mochios::messages::Request &request); + mochios::messages::Response put(mochios::messages::Request &request); + mochios::messages::Response patch(mochios::messages::Request &request); + mochios::messages::Response del(mochios::messages::Request &request); + mochios::messages::Response options(mochios::messages::Request &request); + mochios::messages::Response head(mochios::messages::Request &request); }; } // namespace mochios \ No newline at end of file diff --git a/include/mochios/helpers/client.h b/include/mochios/helpers/client.h index 81d185b..d8c20f4 100644 --- a/include/mochios/helpers/client.h +++ b/include/mochios/helpers/client.h @@ -8,20 +8,20 @@ #include #include -#include -#include +#include +#include namespace mochios { namespace helpers { std::pair -buildRequest(mochios::message::Request &request); +buildRequest(mochios::messages::Request &request); -void buildResponse(mochios::message::Response &res, +void buildResponse(mochios::messages::Response &res, std::stringstream &response); -mochios::message::Response send(mochios::message::Request &request, +mochios::messages::Response send(mochios::messages::Request &request, const int &socket); } // namespace helpers diff --git a/include/mochios/interceptors/interceptor.h b/include/mochios/interceptors/interceptor.h index 8beaa33..587601f 100644 --- a/include/mochios/interceptors/interceptor.h +++ b/include/mochios/interceptors/interceptor.h @@ -2,8 +2,8 @@ #include -#include -#include +#include +#include namespace mochios { @@ -30,8 +30,8 @@ template class Manager { }; typedef struct { - mochios::interceptor::Manager request; - mochios::interceptor::Manager response; + mochios::interceptor::Manager request; + mochios::interceptor::Manager response; } Interceptors; } // namespace interceptor diff --git a/include/mochios/interceptors/request/user_agent.h b/include/mochios/interceptors/request/user_agent.h index e9b6e0f..7beb1d6 100644 --- a/include/mochios/interceptors/request/user_agent.h +++ b/include/mochios/interceptors/request/user_agent.h @@ -1,6 +1,6 @@ #pragma once -#include +#include #include namespace mochios { @@ -9,7 +9,7 @@ namespace interceptor { namespace request { -void userAgent(mochios::message::Request &request); +void userAgent(mochios::messages::Request &request); } // namespace request diff --git a/include/mochios/interceptors/response/json.h b/include/mochios/interceptors/response/json.h index f1439a0..9c2502f 100644 --- a/include/mochios/interceptors/response/json.h +++ b/include/mochios/interceptors/response/json.h @@ -2,7 +2,7 @@ #include -#include +#include namespace mochios { @@ -10,7 +10,7 @@ namespace interceptor { namespace response { -void json(mochios::message::Response &response); +void json(mochios::messages::Response &response); } // namespace response diff --git a/include/mochios/message/message.h b/include/mochios/messages/message.h similarity index 92% rename from include/mochios/message/message.h rename to include/mochios/messages/message.h index c27537a..ab17990 100644 --- a/include/mochios/message/message.h +++ b/include/mochios/messages/message.h @@ -5,7 +5,7 @@ namespace mochios { -namespace message { +namespace messages { class Message { private: @@ -27,6 +27,6 @@ class Message { virtual void print() = 0; }; -} // namespace message +} // namespace messages } // namespace mochios \ No newline at end of file diff --git a/include/mochios/message/request.h b/include/mochios/messages/request.h similarity index 77% rename from include/mochios/message/request.h rename to include/mochios/messages/request.h index 3898774..feb45ab 100644 --- a/include/mochios/message/request.h +++ b/include/mochios/messages/request.h @@ -1,11 +1,11 @@ #pragma once #include -#include +#include namespace mochios { -namespace message { +namespace messages { class Request : public Message { private: @@ -19,6 +19,6 @@ class Request : public Message { void print() override; }; -} // namespace message +} // namespace messages } // namespace mochios \ No newline at end of file diff --git a/include/mochios/message/response.h b/include/mochios/messages/response.h similarity index 71% rename from include/mochios/message/response.h rename to include/mochios/messages/response.h index 9e7dde4..5b90f51 100644 --- a/include/mochios/message/response.h +++ b/include/mochios/messages/response.h @@ -1,10 +1,10 @@ #pragma once -#include +#include namespace mochios { -namespace message { +namespace messages { class Response : public Message { private: @@ -18,6 +18,6 @@ class Response : public Message { void print() override; }; -} // namespace message +} // namespace messages } // namespace mochios \ No newline at end of file diff --git a/src/client/client.cpp b/src/client/client.cpp index 558bec6..353200a 100644 --- a/src/client/client.cpp +++ b/src/client/client.cpp @@ -31,44 +31,44 @@ mochios::Client::~Client() { return; } -mochios::message::Response -mochios::Client::get(mochios::message::Request &request) { +mochios::messages::Response +mochios::Client::get(mochios::messages::Request &request) { request.method = mochios::enums::method::GET; return this->sendHelper(request); } -mochios::message::Response -mochios::Client::post(mochios::message::Request &request) { +mochios::messages::Response +mochios::Client::post(mochios::messages::Request &request) { request.method = mochios::enums::method::POST; return this->sendHelper(request); } -mochios::message::Response -mochios::Client::put(mochios::message::Request &request) { +mochios::messages::Response +mochios::Client::put(mochios::messages::Request &request) { request.method = mochios::enums::method::PUT; return this->sendHelper(request); } -mochios::message::Response -mochios::Client::patch(mochios::message::Request &request) { +mochios::messages::Response +mochios::Client::patch(mochios::messages::Request &request) { request.method = mochios::enums::method::PATCH; return this->sendHelper(request); } -mochios::message::Response -mochios::Client::del(mochios::message::Request &request) { +mochios::messages::Response +mochios::Client::del(mochios::messages::Request &request) { request.method = mochios::enums::method::DELETE; return this->sendHelper(request); } -mochios::message::Response -mochios::Client::options(mochios::message::Request &request) { +mochios::messages::Response +mochios::Client::options(mochios::messages::Request &request) { request.method = mochios::enums::method::OPTIONS; return this->sendHelper(request); } -mochios::message::Response -mochios::Client::head(mochios::message::Request &request) { +mochios::messages::Response +mochios::Client::head(mochios::messages::Request &request) { request.method = mochios::enums::method::HEAD; return this->sendHelper(request); } @@ -92,19 +92,19 @@ void mochios::Client::connect() { } } -mochios::message::Response -mochios::Client::sendHelper(mochios::message::Request &request) { +mochios::messages::Response +mochios::Client::sendHelper(mochios::messages::Request &request) { request.set("Host", this->connection.host); request.set("Accept", "*/*"); request.set("Connection", "close"); - for (const std::function + for (const std::function &requestInterceptor : this->interceptors.request.interceptors) { requestInterceptor(request); } this->connect(); - mochios::message::Response res = + mochios::messages::Response res = mochios::helpers::send(request, this->socket); - for (const std::function + for (const std::function &responseInterceptor : this->interceptors.response.interceptors) { responseInterceptor(res); } diff --git a/src/helpers/client.cpp b/src/helpers/client.cpp index ce4674d..d3d37e2 100644 --- a/src/helpers/client.cpp +++ b/src/helpers/client.cpp @@ -1,7 +1,7 @@ #include std::pair -mochios::helpers::buildRequest(mochios::message::Request &request) { +mochios::helpers::buildRequest(mochios::messages::Request &request) { std::ostringstream oss; oss << request.method << " " << request.path; if (request.queries.size() > 0) { @@ -35,7 +35,7 @@ mochios::helpers::buildRequest(mochios::message::Request &request) { return std::make_pair(oss.str(), jsonifiedBody); } -void mochios::helpers::buildResponse(mochios::message::Response &res, +void mochios::helpers::buildResponse(mochios::messages::Response &res, std::stringstream &response) { std::string line; @@ -61,15 +61,15 @@ void mochios::helpers::buildResponse(mochios::message::Response &res, return; } -mochios::message::Response -mochios::helpers::send(mochios::message::Request &request, const int &socket) { +mochios::messages::Response +mochios::helpers::send(mochios::messages::Request &request, const int &socket) { std::pair requestString = mochios::helpers::buildRequest(request); if (brewtils::sys::send(socket, requestString.first.c_str(), requestString.first.size(), 0) < 0) { logger::error("Error sending request headers", - "mochios::message::Response " - "mochios::helpers::send(mochios::message::Request &request, " + "mochios::messages::Response " + "mochios::helpers::send(mochios::messages::Request &request, " "const mochios::enums::method &method, const int &socket)"); } if (requestString.second.size() > 0) { @@ -77,8 +77,8 @@ mochios::helpers::send(mochios::message::Request &request, const int &socket) { requestString.second.size(), 0) < 0) { logger::error( "Error sending request body", - "mochios::message::Response " - "mochios::helpers::send(mochios::message::Request &request, " + "mochios::messages::Response " + "mochios::helpers::send(mochios::messages::Request &request, " "const mochios::enums::method &method, const int &socket)"); } } @@ -92,7 +92,7 @@ mochios::helpers::send(mochios::message::Request &request, const int &socket) { } close(socket); - mochios::message::Response res; + mochios::messages::Response res; std::string line; std::getline(oss, line); std::vector parts = brewtils::string::split(line, " "); diff --git a/src/interceptors/request/user_agent.cpp b/src/interceptors/request/user_agent.cpp index f0e82d1..e8eccaf 100644 --- a/src/interceptors/request/user_agent.cpp +++ b/src/interceptors/request/user_agent.cpp @@ -3,6 +3,6 @@ const std::string mochiosUserAgent = "mochios/" + mochios::version; void mochios::interceptor::request::userAgent( - mochios::message::Request &request) { + mochios::messages::Request &request) { request.set("User-Agent", mochiosUserAgent); } \ No newline at end of file diff --git a/src/interceptors/response/json.cpp b/src/interceptors/response/json.cpp index bc0f939..024dd8e 100644 --- a/src/interceptors/response/json.cpp +++ b/src/interceptors/response/json.cpp @@ -1,7 +1,7 @@ #include void mochios::interceptor::response::json( - mochios::message::Response &response) { + mochios::messages::Response &response) { if (response.get("content-type") != "application/json") { return; } diff --git a/src/message/message.cpp b/src/message/message.cpp deleted file mode 100644 index 9e15d59..0000000 --- a/src/message/message.cpp +++ /dev/null @@ -1,15 +0,0 @@ -#include - -mochios::message::Message::Message() { return; } - -mochios::message::Message::~Message() { return; } - -void mochios::message::Message::set(const std::string &key, - const std::string &value) { - this->headers[brewtils::string::lower(key)] = value; - return; -} - -const std::string mochios::message::Message::get(const std::string &key) const { - return this->headers.at(brewtils::string::lower(key)); -} diff --git a/src/messages/message.cpp b/src/messages/message.cpp new file mode 100644 index 0000000..92a7073 --- /dev/null +++ b/src/messages/message.cpp @@ -0,0 +1,15 @@ +#include + +mochios::messages::Message::Message() { return; } + +mochios::messages::Message::~Message() { return; } + +void mochios::messages::Message::set(const std::string &key, + const std::string &value) { + this->headers[brewtils::string::lower(key)] = value; + return; +} + +const std::string mochios::messages::Message::get(const std::string &key) const { + return this->headers.at(brewtils::string::lower(key)); +} diff --git a/src/message/request.cpp b/src/messages/request.cpp similarity index 78% rename from src/message/request.cpp rename to src/messages/request.cpp index 37b99e9..f2b4e7f 100644 --- a/src/message/request.cpp +++ b/src/messages/request.cpp @@ -1,12 +1,12 @@ -#include +#include -mochios::message::Request::Request(const std::string &path) : path(path) { +mochios::messages::Request::Request(const std::string &path) : path(path) { return; } -mochios::message::Request::~Request() { return; } +mochios::messages::Request::~Request() { return; } -void mochios::message::Request::print() { +void mochios::messages::Request::print() { logger::debug("Request:"); logger::debug(" path: " + this->path); logger::debug(" method: " + this->method); diff --git a/src/message/response.cpp b/src/messages/response.cpp similarity index 80% rename from src/message/response.cpp rename to src/messages/response.cpp index e363c73..e8f88de 100644 --- a/src/message/response.cpp +++ b/src/messages/response.cpp @@ -1,14 +1,14 @@ -#include +#include -mochios::message::Response::Response() { return; } +mochios::messages::Response::Response() { return; } -mochios::message::Response::~Response() { return; } +mochios::messages::Response::~Response() { return; } -void mochios::message::Response::print() { +void mochios::messages::Response::print() { logger::debug("Response:"); logger::debug(" status: " + std::to_string(this->status)); logger::debug(" statusText: " + this->statusText); - + logger::debug(" headers:"); for (const std::pair &header : this->headers) { logger::debug(" " + header.first + ": " + header.second); From c686ea5e269e72bad1484c3b13ddc904b1a2065f Mon Sep 17 00:00:00 2001 From: Jadit19 Date: Sat, 26 Oct 2024 23:06:39 +0530 Subject: [PATCH 2/3] add cookies and other changes --- include/mochios/client/client.h | 2 + include/mochios/helpers/cookie.h | 17 +++++ include/mochios/interceptors/request/cookie.h | 18 ++++++ include/mochios/messages/cookie.h | 34 ++++++++++ include/mochios/messages/message.h | 3 + src/client/client.cpp | 16 ++++- src/helpers/client.cpp | 9 ++- src/helpers/cookie.cpp | 32 ++++++++++ src/interceptors/request/cookie.cpp | 20 ++++++ src/messages/cookie.cpp | 62 +++++++++++++++++++ src/messages/message.cpp | 13 +++- src/messages/request.cpp | 5 ++ src/messages/response.cpp | 5 ++ 13 files changed, 230 insertions(+), 6 deletions(-) create mode 100644 include/mochios/helpers/cookie.h create mode 100644 include/mochios/interceptors/request/cookie.h create mode 100644 include/mochios/messages/cookie.h create mode 100644 src/helpers/cookie.cpp create mode 100644 src/interceptors/request/cookie.cpp create mode 100644 src/messages/cookie.cpp diff --git a/include/mochios/client/client.h b/include/mochios/client/client.h index dc88200..d67bd00 100644 --- a/include/mochios/client/client.h +++ b/include/mochios/client/client.h @@ -8,6 +8,7 @@ #include #include +#include #include #include @@ -19,6 +20,7 @@ class Client { struct addrinfo *server; mochios::client::Connection connection; + mochios::interceptor::Interceptors internalInterceptors; void connect(); mochios::messages::Response sendHelper(mochios::messages::Request &request); diff --git a/include/mochios/helpers/cookie.h b/include/mochios/helpers/cookie.h new file mode 100644 index 0000000..9ed784f --- /dev/null +++ b/include/mochios/helpers/cookie.h @@ -0,0 +1,17 @@ +#pragma once + +#include + +namespace mochios { + +namespace helpers { + +namespace cookie { + +std::string serialize(const mochios::messages::Cookie &cookie); + +} // namespace cookie + +} // namespace helpers + +} // namespace mochios \ No newline at end of file diff --git a/include/mochios/interceptors/request/cookie.h b/include/mochios/interceptors/request/cookie.h new file mode 100644 index 0000000..5ea8bf6 --- /dev/null +++ b/include/mochios/interceptors/request/cookie.h @@ -0,0 +1,18 @@ +#pragma once + +#include +#include + +namespace mochios { + +namespace interceptor { + +namespace request { + +void cookie(mochios::messages::Request &request); + +} // namespace request + +} // namespace interceptor + +} // namespace mochios \ No newline at end of file diff --git a/include/mochios/messages/cookie.h b/include/mochios/messages/cookie.h new file mode 100644 index 0000000..1bc526f --- /dev/null +++ b/include/mochios/messages/cookie.h @@ -0,0 +1,34 @@ +#pragma once + +#include +#include +#include + +namespace mochios { + +namespace messages { + +class Cookie { +public: + bool secure; + bool httpOnly; + bool partitioned; + + std::string name; + std::string value; + std::string domain; + std::string path; + std::string expires; + std::string maxAge; + std::string sameSite; + + Cookie(); + Cookie(const std::string &data); + ~Cookie(); + + std::string serialize() const; +}; + +} // namespace messages + +} // namespace mochios \ No newline at end of file diff --git a/include/mochios/messages/message.h b/include/mochios/messages/message.h index ab17990..a2913e3 100644 --- a/include/mochios/messages/message.h +++ b/include/mochios/messages/message.h @@ -3,6 +3,8 @@ #include #include +#include + namespace mochios { namespace messages { @@ -19,6 +21,7 @@ class Message { std::map headers; std::map params; std::map queries; + std::vector cookies; json::object body; void set(const std::string &key, const std::string &value); diff --git a/src/client/client.cpp b/src/client/client.cpp index 353200a..8e90680 100644 --- a/src/client/client.cpp +++ b/src/client/client.cpp @@ -18,8 +18,10 @@ mochios::Client::Client(const mochios::client::Connection &connection) this->connect(); close(this->socket); - this->interceptors.request.use(mochios::interceptor::request::userAgent); - this->interceptors.response.use(mochios::interceptor::response::json); + this->internalInterceptors.request.use( + mochios::interceptor::request::userAgent); + this->internalInterceptors.request.use(mochios::interceptor::request::cookie); + this->internalInterceptors.response.use(mochios::interceptor::response::json); return; } @@ -101,9 +103,19 @@ mochios::Client::sendHelper(mochios::messages::Request &request) { &requestInterceptor : this->interceptors.request.interceptors) { requestInterceptor(request); } + for (const std::function + &requestInterceptor : + this->internalInterceptors.request.interceptors) { + requestInterceptor(request); + } this->connect(); mochios::messages::Response res = mochios::helpers::send(request, this->socket); + for (const std::function + &responseInterceptor : + this->internalInterceptors.response.interceptors) { + responseInterceptor(res); + } for (const std::function &responseInterceptor : this->interceptors.response.interceptors) { responseInterceptor(res); diff --git a/src/helpers/client.cpp b/src/helpers/client.cpp index d3d37e2..615e57d 100644 --- a/src/helpers/client.cpp +++ b/src/helpers/client.cpp @@ -46,8 +46,15 @@ void mochios::helpers::buildResponse(mochios::messages::Response &res, continue; } - std::string key = line.substr(0, separator); + std::string key = brewtils::string::lower(line.substr(0, separator)); std::string value = line.substr(separator + 2, line.size() - separator - 3); + if (key == "set-cookie") { + mochios::messages::Cookie *newCookie = + new mochios::messages::Cookie(value); + res.cookies.push_back(newCookie); + continue; + } + res.set(key, value); } diff --git a/src/helpers/cookie.cpp b/src/helpers/cookie.cpp new file mode 100644 index 0000000..339f24b --- /dev/null +++ b/src/helpers/cookie.cpp @@ -0,0 +1,32 @@ +#include + +std::string +mochios::helpers::cookie::serialize(const mochios::messages::Cookie &cookie) { + std::string cookieString = brewtils::url::encode(cookie.name) + "=" + + brewtils::url::encode(cookie.value); + if (!cookie.domain.empty()) { + cookieString += "; Domain=" + cookie.domain; + } + if (!cookie.path.empty()) { + cookieString += "; Path=" + cookie.path; + } + if (!cookie.expires.empty()) { + cookieString += "; Expires=" + cookie.expires; + } + if (!cookie.maxAge.empty()) { + cookieString += "; Max-Age=" + cookie.maxAge; + } + if (!cookie.sameSite.empty()) { + cookieString += "; SameSite=" + cookie.sameSite; + } + if (cookie.secure) { + cookieString += "; Secure"; + } + if (cookie.httpOnly) { + cookieString += "; HttpOnly"; + } + if (cookie.partitioned) { + cookieString += "; Partitioned"; + } + return cookieString; +} \ No newline at end of file diff --git a/src/interceptors/request/cookie.cpp b/src/interceptors/request/cookie.cpp new file mode 100644 index 0000000..4408e4f --- /dev/null +++ b/src/interceptors/request/cookie.cpp @@ -0,0 +1,20 @@ +#include + +void mochios::interceptor::request::cookie( + mochios::messages::Request &request) { + bool isFirst = true; + std::string value = ""; + for (const mochios::messages::Cookie *cookie : request.cookies) { + if (isFirst) { + isFirst = false; + } else { + value += "; "; + } + value += cookie->name + "=" + cookie->value; + } + + if (!value.empty()) { + request.headers["Cookie"] = value; + } + return; +} \ No newline at end of file diff --git a/src/messages/cookie.cpp b/src/messages/cookie.cpp new file mode 100644 index 0000000..f33c5c8 --- /dev/null +++ b/src/messages/cookie.cpp @@ -0,0 +1,62 @@ +#include +#include + +mochios::messages::Cookie::Cookie() + : secure(false), httpOnly(false), partitioned(false), name(""), value(""), + domain(""), path(""), expires(""), maxAge(""), sameSite("") { + return; +} + +mochios::messages::Cookie::Cookie(const std::string &data) { + std::string key, value; + std::vector kv; + std::vector parts = brewtils::string::split(data, ";"); + + for (const std::string &part : parts) { + kv = brewtils::string::split(part, "="); + if (kv.size() == 0) { + continue; + } + + key = brewtils::string::lower( + brewtils::url::decode(brewtils::string::trim(kv[0]))); + if (kv.size() == 1) { + if (key == "secure") { + this->secure = true; + } else if (key == "httponly") { + this->httpOnly = true; + } else if (key == "partitioned") { + this->partitioned = true; + } + continue; + } + + value = brewtils::url::decode(brewtils::string::trim(kv[1])); + if (key == "domain") { + this->domain = value; + } else if (key == "path") { + this->path = value; + } else if (key == "expires") { + this->expires = value; + } else if (key == "max-age") { + this->maxAge = value; + } else if (key == "samesite") { + this->sameSite = value; + } else { + this->name = brewtils::url::decode(brewtils::string::trim(kv[0])); + this->value = value; + } + } + + if (this->name.empty()) { + logger::warning("Cookie name empty in data: " + data); + } + + return; +} + +mochios::messages::Cookie::~Cookie() { return; } + +std::string mochios::messages::Cookie::serialize() const { + return mochios::helpers::cookie::serialize(*this); +} \ No newline at end of file diff --git a/src/messages/message.cpp b/src/messages/message.cpp index 92a7073..6cd440b 100644 --- a/src/messages/message.cpp +++ b/src/messages/message.cpp @@ -2,14 +2,21 @@ mochios::messages::Message::Message() { return; } -mochios::messages::Message::~Message() { return; } +mochios::messages::Message::~Message() { + for (mochios::messages::Cookie *cookie : this->cookies) { + delete cookie; + } + + return; +} void mochios::messages::Message::set(const std::string &key, - const std::string &value) { + const std::string &value) { this->headers[brewtils::string::lower(key)] = value; return; } -const std::string mochios::messages::Message::get(const std::string &key) const { +const std::string +mochios::messages::Message::get(const std::string &key) const { return this->headers.at(brewtils::string::lower(key)); } diff --git a/src/messages/request.cpp b/src/messages/request.cpp index f2b4e7f..70bfe76 100644 --- a/src/messages/request.cpp +++ b/src/messages/request.cpp @@ -25,6 +25,11 @@ void mochios::messages::Request::print() { logger::debug(" " + query.first + ": " + query.second); } + logger::debug(" cookies:"); + for (mochios::messages::Cookie *cookie : this->cookies) { + logger::debug(" " + cookie->serialize()); + } + logger::debug(" body:"); logger::debug(" " + this->body.dumps(2, 2)); return; diff --git a/src/messages/response.cpp b/src/messages/response.cpp index e8f88de..810d686 100644 --- a/src/messages/response.cpp +++ b/src/messages/response.cpp @@ -24,6 +24,11 @@ void mochios::messages::Response::print() { logger::debug(" " + query.first + ": " + query.second); } + logger::debug(" cookies:"); + for (mochios::messages::Cookie *cookie : this->cookies) { + logger::debug(" " + cookie->serialize()); + } + logger::debug(" body:"); logger::debug(" " + this->body.dumps(2, 2)); return; From adb1d69b34e37d98ba9621939f1146208d4d899a Mon Sep 17 00:00:00 2001 From: Jadit19 Date: Sat, 26 Oct 2024 23:22:25 +0530 Subject: [PATCH 3/3] namespace helpers->client --- include/mochios/helpers/client.h | 6 +++++- src/client/client.cpp | 2 +- src/helpers/client.cpp | 24 +++++++++++++----------- 3 files changed, 19 insertions(+), 13 deletions(-) diff --git a/include/mochios/helpers/client.h b/include/mochios/helpers/client.h index d8c20f4..8d1ee21 100644 --- a/include/mochios/helpers/client.h +++ b/include/mochios/helpers/client.h @@ -15,6 +15,8 @@ namespace mochios { namespace helpers { +namespace client { + std::pair buildRequest(mochios::messages::Request &request); @@ -22,7 +24,9 @@ void buildResponse(mochios::messages::Response &res, std::stringstream &response); mochios::messages::Response send(mochios::messages::Request &request, - const int &socket); + const int &socket); + +} // namespace client } // namespace helpers diff --git a/src/client/client.cpp b/src/client/client.cpp index 8e90680..9983d20 100644 --- a/src/client/client.cpp +++ b/src/client/client.cpp @@ -110,7 +110,7 @@ mochios::Client::sendHelper(mochios::messages::Request &request) { } this->connect(); mochios::messages::Response res = - mochios::helpers::send(request, this->socket); + mochios::helpers::client::send(request, this->socket); for (const std::function &responseInterceptor : this->internalInterceptors.response.interceptors) { diff --git a/src/helpers/client.cpp b/src/helpers/client.cpp index 615e57d..f2a3680 100644 --- a/src/helpers/client.cpp +++ b/src/helpers/client.cpp @@ -1,7 +1,7 @@ #include std::pair -mochios::helpers::buildRequest(mochios::messages::Request &request) { +mochios::helpers::client::buildRequest(mochios::messages::Request &request) { std::ostringstream oss; oss << request.method << " " << request.path; if (request.queries.size() > 0) { @@ -35,8 +35,8 @@ mochios::helpers::buildRequest(mochios::messages::Request &request) { return std::make_pair(oss.str(), jsonifiedBody); } -void mochios::helpers::buildResponse(mochios::messages::Response &res, - std::stringstream &response) { +void mochios::helpers::client::buildResponse(mochios::messages::Response &res, + std::stringstream &response) { std::string line; // Headers @@ -69,15 +69,17 @@ void mochios::helpers::buildResponse(mochios::messages::Response &res, } mochios::messages::Response -mochios::helpers::send(mochios::messages::Request &request, const int &socket) { +mochios::helpers::client::send(mochios::messages::Request &request, + const int &socket) { std::pair requestString = - mochios::helpers::buildRequest(request); + mochios::helpers::client::buildRequest(request); if (brewtils::sys::send(socket, requestString.first.c_str(), requestString.first.size(), 0) < 0) { - logger::error("Error sending request headers", - "mochios::messages::Response " - "mochios::helpers::send(mochios::messages::Request &request, " - "const mochios::enums::method &method, const int &socket)"); + logger::error( + "Error sending request headers", + "mochios::messages::Response " + "mochios::helpers::client::send(mochios::messages::Request &request, " + "const mochios::enums::method &method, const int &socket)"); } if (requestString.second.size() > 0) { if (brewtils::sys::send(socket, requestString.second.c_str(), @@ -85,7 +87,7 @@ mochios::helpers::send(mochios::messages::Request &request, const int &socket) { logger::error( "Error sending request body", "mochios::messages::Response " - "mochios::helpers::send(mochios::messages::Request &request, " + "mochios::helpers::client::send(mochios::messages::Request &request, " "const mochios::enums::method &method, const int &socket)"); } } @@ -108,6 +110,6 @@ mochios::helpers::send(mochios::messages::Request &request, const int &socket) { res.statusText = parts[2]; } - mochios::helpers::buildResponse(res, oss); + mochios::helpers::client::buildResponse(res, oss); return res; } \ No newline at end of file