diff --git a/loginserver/account_management.cpp b/loginserver/account_management.cpp index c2c0e5fa2..131fb1ad0 100644 --- a/loginserver/account_management.cpp +++ b/loginserver/account_management.cpp @@ -242,15 +242,16 @@ bool AccountManagement::UpdateLoginserverUserCredentials( return true; } -bool AccountManagement::CheckExternalLoginserverUserCredentials( +uint32 AccountManagement::CheckExternalLoginserverUserCredentials( const std::string &in_account_username, const std::string &in_account_password ) { auto res = task_runner.Enqueue( - [&]() -> bool { - bool running = true; - bool ret = false; + [&]() -> uint32 { + bool running = true; + uint32 ret = 0; + EQ::Net::DaybreakConnectionManager mgr; std::shared_ptr c; @@ -284,8 +285,9 @@ bool AccountManagement::CheckExternalLoginserverUserCredentials( switch (opcode) { case 0x0017: //OP_ChatMessage { - size_t buffer_len = - in_account_username.length() + in_account_password.length() + 2; + size_t buffer_len = + in_account_username.length() + in_account_password.length() + 2; + std::unique_ptr buffer(new char[buffer_len]); strcpy(&buffer[0], in_account_username.c_str()); @@ -318,9 +320,10 @@ bool AccountManagement::CheckExternalLoginserverUserCredentials( EQ::Net::StaticPacket sp(&decrypted[0], encrypt_size); auto response_error = sp.GetUInt16(1); + auto m_dbid = sp.GetUInt32(8); { - ret = response_error <= 101; + ret = (response_error <= 101 ? m_dbid : 0); running = false; } break; @@ -332,7 +335,7 @@ bool AccountManagement::CheckExternalLoginserverUserCredentials( EQ::Net::DNSLookup( "login.eqemulator.net", 5999, false, [&](const std::string &addr) { if (addr.empty()) { - ret = false; + ret = 0; running = false; } diff --git a/loginserver/account_management.h b/loginserver/account_management.h index 4ab3d8973..17bdfafba 100644 --- a/loginserver/account_management.h +++ b/loginserver/account_management.h @@ -76,7 +76,7 @@ public: * @param in_account_password * @return */ - static bool CheckExternalLoginserverUserCredentials( + static uint32 CheckExternalLoginserverUserCredentials( const std::string &in_account_username, const std::string &in_account_password ); diff --git a/loginserver/loginserver_webserver.cpp b/loginserver/loginserver_webserver.cpp index 28f4e0fa7..dbc41c6a4 100644 --- a/loginserver/loginserver_webserver.cpp +++ b/loginserver/loginserver_webserver.cpp @@ -191,13 +191,14 @@ namespace LoginserverWebserver { return; } - bool credentials_valid = AccountManagement::CheckExternalLoginserverUserCredentials( + uint32 account_id = AccountManagement::CheckExternalLoginserverUserCredentials( username, password ); - if (credentials_valid) { - response["message"] = "Credentials valid!"; + if (account_id > 0) { + response["message"] = "Credentials valid!"; + response["data"]["account_id"] = account_id; } else { response["error"] = "Credentials invalid!"; @@ -246,7 +247,7 @@ namespace LoginserverWebserver { ss.str(request.body); ss >> request_body; } - catch (std::exception&) { + catch (std::exception &) { request_body["error"] = "Payload invalid"; return request_body;