From ac5aee6a98be6434e1f93bf5c973701e41a4540a Mon Sep 17 00:00:00 2001 From: Shauren Date: Thu, 21 Mar 2024 21:07:23 +0100 Subject: Core: Updated to 10.2.6.53840 --- src/server/bnetserver/REST/LoginHttpSession.h | 49 +++++++++++++++++++++++---- 1 file changed, 43 insertions(+), 6 deletions(-) (limited to 'src/server/bnetserver/REST/LoginHttpSession.h') diff --git a/src/server/bnetserver/REST/LoginHttpSession.h b/src/server/bnetserver/REST/LoginHttpSession.h index 2ee70d5afa5..6bd1ec113d0 100644 --- a/src/server/bnetserver/REST/LoginHttpSession.h +++ b/src/server/bnetserver/REST/LoginHttpSession.h @@ -18,8 +18,10 @@ #ifndef TRINITYCORE_LOGIN_HTTP_SESSION_H #define TRINITYCORE_LOGIN_HTTP_SESSION_H +#include "HttpSocket.h" #include "HttpSslSocket.h" #include "SRP6.h" +#include namespace Battlenet { @@ -28,12 +30,16 @@ struct LoginSessionState : public Trinity::Net::Http::SessionState std::unique_ptr Srp; }; -class LoginHttpSession : public Trinity::Net::Http::SslSocket +class LoginHttpSessionWrapper; +std::shared_ptr ObtainSessionState(Trinity::Net::Http::RequestContext& context, boost::asio::ip::address const& remoteAddress); + +template typename SocketImpl> +class LoginHttpSession : public SocketImpl> { -public: - static constexpr std::string_view SESSION_ID_COOKIE = "JSESSIONID"; + using BaseSocket = SocketImpl>; - explicit LoginHttpSession(boost::asio::ip::tcp::socket&& socket); +public: + explicit LoginHttpSession(boost::asio::ip::tcp::socket&& socket, LoginHttpSessionWrapper& owner); ~LoginHttpSession(); void Start() override; @@ -42,10 +48,41 @@ public: Trinity::Net::Http::RequestHandlerResult RequestHandler(Trinity::Net::Http::RequestContext& context) override; - LoginSessionState* GetSessionState() const { return static_cast(_state.get()); } + LoginSessionState* GetSessionState() const { return static_cast(this->_state.get()); } protected: - std::shared_ptr ObtainSessionState(Trinity::Net::Http::RequestContext& context) const override; + std::shared_ptr ObtainSessionState(Trinity::Net::Http::RequestContext& context) const override + { + return Battlenet::ObtainSessionState(context, this->GetRemoteIpAddress()); + } + + LoginHttpSessionWrapper& _owner; +}; + +class LoginHttpSessionWrapper : public Trinity::Net::Http::AbstractSocket, public std::enable_shared_from_this +{ +public: + static constexpr std::string_view SESSION_ID_COOKIE = "JSESSIONID"; + + explicit LoginHttpSessionWrapper(boost::asio::ip::tcp::socket&& socket); + + void Start() { return std::visit([&](auto&& socket) { return socket->Start(); }, _socket); } + bool Update() { return std::visit([&](auto&& socket) { return socket->Update(); }, _socket); } + boost::asio::ip::address GetRemoteIpAddress() const { return std::visit([&](auto&& socket) { return socket->GetRemoteIpAddress(); }, _socket); } + bool IsOpen() const { return std::visit([&](auto&& socket) { return socket->IsOpen(); }, _socket); } + void CloseSocket() { return std::visit([&](auto&& socket) { return socket->CloseSocket(); }, _socket); } + + void SendResponse(Trinity::Net::Http::RequestContext& context) override { return std::visit([&](auto&& socket) { return socket->SendResponse(context); }, _socket); } + void QueueQuery(QueryCallback&& queryCallback) override { return std::visit([&](auto&& socket) { return socket->QueueQuery(std::move(queryCallback)); }, _socket); } + std::string GetClientInfo() const override { return std::visit([&](auto&& socket) { return socket->GetClientInfo(); }, _socket); } + Optional GetSessionId() const override { return std::visit([&](auto&& socket) { return socket->GetSessionId(); }, _socket); } + LoginSessionState* GetSessionState() const { return std::visit([&](auto&& socket) { return socket->GetSessionState(); }, _socket); } + +private: + std::variant< + std::shared_ptr>, + std::shared_ptr> + > _socket; }; } #endif // TRINITYCORE_LOGIN_HTTP_SESSION_H -- cgit v1.2.3