TrinityCore
LoginRESTService.h
Go to the documentation of this file.
1/*
2 * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the
6 * Free Software Foundation; either version 2 of the License, or (at your
7 * option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#ifndef LoginRESTService_h__
19#define LoginRESTService_h__
20
21#include "HttpService.h"
22#include "Login.pb.h"
23#include "LoginHttpSession.h"
24
25namespace Battlenet
26{
27enum class SrpVersion : int8
28{
29 v1 = 1,
30 v2 = 2
31};
32
34{
35 Sha256 = 0,
36 Sha512 = 1
37};
38
39enum class BanMode
40{
41 BAN_IP = 0,
42 BAN_ACCOUNT = 1
43};
44
45class LoginRESTService : public Trinity::Net::Http::HttpService<LoginHttpSession>
46{
47public:
53
55
56 static LoginRESTService& Instance();
57
58 bool StartNetwork(Trinity::Asio::IoContext& ioContext, std::string const& bindIp, uint16 port, int32 threadCount = 1) override;
59
60 std::string const& GetHostnameForClient(boost::asio::ip::address const& address) const;
61 uint16 GetPort() const { return _port; }
62
63 std::shared_ptr<Trinity::Net::Http::SessionState> CreateNewSessionState(boost::asio::ip::address const& address) override;
64
65private:
66 static void OnSocketAccept(boost::asio::ip::tcp::socket&& sock, uint32 threadIndex);
67
68 static std::string ExtractAuthorization(HttpRequest const& request);
69
70 RequestHandlerResult HandleGetForm(std::shared_ptr<LoginHttpSession> session, HttpRequestContext& context) const;
71 static RequestHandlerResult HandleGetGameAccounts(std::shared_ptr<LoginHttpSession> session, HttpRequestContext& context);
72 RequestHandlerResult HandleGetPortal(std::shared_ptr<LoginHttpSession> session, HttpRequestContext& context) const;
73
74 RequestHandlerResult HandlePostLogin(std::shared_ptr<LoginHttpSession> session, HttpRequestContext& context) const;
75 static RequestHandlerResult HandlePostLoginSrpChallenge(std::shared_ptr<LoginHttpSession> session, HttpRequestContext& context);
76 RequestHandlerResult HandlePostRefreshLoginTicket(std::shared_ptr<LoginHttpSession> session, HttpRequestContext& context) const;
77
78 static std::unique_ptr<Trinity::Crypto::SRP::BnetSRP6Base> CreateSrpImplementation(SrpVersion version, SrpHashFunction hashFunction,
79 std::string const& username, Trinity::Crypto::SRP::Salt const& salt, Trinity::Crypto::SRP::Verifier const& verifier);
80
81 void MigrateLegacyPasswordHashes() const;
82
84 std::string _bindIP;
86 std::array<std::string, 2> _hostnames;
87 std::array<boost::asio::ip::address, 2> _addresses;
89};
90}
91
92#define sLoginService Battlenet::LoginRESTService::Instance()
93
94#endif // LoginRESTService_h__
int8_t int8
Definition: Define.h:140
int32_t int32
Definition: Define.h:138
uint16_t uint16
Definition: Define.h:143
uint32_t uint32
Definition: Define.h:142
@ BAN_ACCOUNT
@ BAN_IP
std::array< boost::asio::ip::address, 2 > _addresses
RequestHandlerResult HandleGetPortal(std::shared_ptr< LoginHttpSession > session, HttpRequestContext &context) const
std::array< std::string, 2 > _hostnames
RequestHandlerResult HandlePostLogin(std::shared_ptr< LoginHttpSession > session, HttpRequestContext &context) const
std::shared_ptr< Trinity::Net::Http::SessionState > CreateNewSessionState(boost::asio::ip::address const &address) override
RequestHandlerResult HandleGetForm(std::shared_ptr< LoginHttpSession > session, HttpRequestContext &context) const
std::string const & GetHostnameForClient(boost::asio::ip::address const &address) const
Trinity::Net::Http::RequestHandlerResult RequestHandlerResult
static std::string ExtractAuthorization(HttpRequest const &request)
static RequestHandlerResult HandleGetGameAccounts(std::shared_ptr< LoginHttpSession > session, HttpRequestContext &context)
Trinity::Net::Http::RequestContext HttpRequestContext
RequestHandlerResult HandlePostRefreshLoginTicket(std::shared_ptr< LoginHttpSession > session, HttpRequestContext &context) const
JSON::Login::FormInputs _formInputs
bool StartNetwork(Trinity::Asio::IoContext &ioContext, std::string const &bindIp, uint16 port, int32 threadCount=1) override
static LoginRESTService & Instance()
static void OnSocketAccept(boost::asio::ip::tcp::socket &&sock, uint32 threadIndex)
static RequestHandlerResult HandlePostLoginSrpChallenge(std::shared_ptr< LoginHttpSession > session, HttpRequestContext &context)
static std::unique_ptr< Trinity::Crypto::SRP::BnetSRP6Base > CreateSrpImplementation(SrpVersion version, SrpHashFunction hashFunction, std::string const &username, Trinity::Crypto::SRP::Salt const &salt, Trinity::Crypto::SRP::Verifier const &verifier)
Trinity::Net::Http::Response HttpResponse
Trinity::Net::Http::Request HttpRequest
HttpService(std::string_view loggerSuffix)
Definition: HttpService.h:119
std::array< uint8, SALT_LENGTH > Salt
Definition: SRP6.h:33
std::vector< uint8 > Verifier
Definition: SRP6.h:35
boost::beast::http::response< ResponseBody > Response
Definition: HttpCommon.h:31
boost::beast::http::request< RequestBody > Request
Definition: HttpCommon.h:30