diff options
Diffstat (limited to 'src')
5 files changed, 48 insertions, 9 deletions
diff --git a/src/server/database/Database/Implementation/LoginDatabase.cpp b/src/server/database/Database/Implementation/LoginDatabase.cpp index 083bdb383f1..0c989ab401b 100644 --- a/src/server/database/Database/Implementation/LoginDatabase.cpp +++ b/src/server/database/Database/Implementation/LoginDatabase.cpp @@ -138,6 +138,7 @@ void LoginDatabaseConnection::DoPrepareStatements() PrepareStatement(LOGIN_SEL_BNET_ACCOUNT_ID_BY_GAME_ACCOUNT, "SELECT battlenet_account FROM account WHERE id = ?", CONNECTION_SYNCH); PrepareStatement(LOGIN_UPD_BNET_GAME_ACCOUNT_LINK, "UPDATE account SET battlenet_account = ?, battlenet_index = ? WHERE id = ?", CONNECTION_ASYNC); PrepareStatement(LOGIN_SEL_BNET_MAX_ACCOUNT_INDEX, "SELECT MAX(battlenet_index) FROM account WHERE battlenet_account = ?", CONNECTION_SYNCH); + PrepareStatement(LOGIN_SEL_BNET_GAME_ACCOUNT_LIST, "SELECT a.id, a.username FROM account a LEFT JOIN battlenet_accounts ba ON a.battlenet_account = ba.id WHERE ba.email = ?", CONNECTION_SYNCH); PrepareStatement(LOGIN_UPD_BNET_FAILED_LOGINS, "UPDATE battlenet_accounts SET failed_logins = failed_logins + 1 WHERE id = ?", CONNECTION_ASYNC); PrepareStatement(LOGIN_INS_BNET_ACCOUNT_AUTO_BANNED, "INSERT INTO battlenet_account_bans(id, bandate, unbandate, bannedby, banreason) VALUES(?, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()+?, 'Trinity Auth', 'Failed login autoban')", CONNECTION_ASYNC); diff --git a/src/server/database/Database/Implementation/LoginDatabase.h b/src/server/database/Database/Implementation/LoginDatabase.h index bddb119544e..bc95b3c273d 100644 --- a/src/server/database/Database/Implementation/LoginDatabase.h +++ b/src/server/database/Database/Implementation/LoginDatabase.h @@ -129,6 +129,7 @@ enum LoginDatabaseStatements LOGIN_SEL_BNET_ACCOUNT_ID_BY_GAME_ACCOUNT, LOGIN_UPD_BNET_GAME_ACCOUNT_LINK, LOGIN_SEL_BNET_MAX_ACCOUNT_INDEX, + LOGIN_SEL_BNET_GAME_ACCOUNT_LIST, LOGIN_UPD_BNET_FAILED_LOGINS, LOGIN_INS_BNET_ACCOUNT_AUTO_BANNED, diff --git a/src/server/game/Accounts/RBAC.h b/src/server/game/Accounts/RBAC.h index ff169981de1..6ee382c8e51 100644 --- a/src/server/game/Accounts/RBAC.h +++ b/src/server/game/Accounts/RBAC.h @@ -734,7 +734,7 @@ enum RBACPermissions RBAC_PERM_COMMAND_TICKET_SUGGESTION_UNASSIGN = 827, RBAC_PERM_COMMAND_TICKET_SUGGESTION_VIEW = 828, RBAC_PERM_COMMAND_TICKET_RESET_ALL = 829, - // 830 reuse + RBAC_PERM_COMMAND_BNET_ACCOUNT_LIST_GAME_ACCOUTNS = 830, RBAC_PERM_COMMAND_TICKET_RESET_BUG = 831, RBAC_PERM_COMMAND_TICKET_RESET_COMPLAINT = 832, RBAC_PERM_COMMAND_TICKET_RESET_SUGGESTION = 833, diff --git a/src/server/game/Miscellaneous/Language.h b/src/server/game/Miscellaneous/Language.h index 4e3e49ea440..37fd65145da 100644 --- a/src/server/game/Miscellaneous/Language.h +++ b/src/server/game/Miscellaneous/Language.h @@ -902,7 +902,9 @@ enum TrinityStrings LANG_ACCOUNT_PASS_TOO_LONG = 1031, LANG_ACCOUNT_CREATED_BNET_WITH_GAME = 1032, LANG_ACCOUNT_CREATED_BNET = 1033, - // Room for more level 4 1034-1099 not used + LANG_ACCOUNT_BNET_LIST_HEADER = 1034, + LANG_ACCOUNT_BNET_LIST_NO_ACCOUNTS = 1035, + // Room for more level 4 1036-1099 not used // Level 3 (continue) LANG_ACCOUNT_SETADDON = 1100, diff --git a/src/server/scripts/Commands/cs_battlenet_account.cpp b/src/server/scripts/Commands/cs_battlenet_account.cpp index beca60abc10..fea267822d8 100644 --- a/src/server/scripts/Commands/cs_battlenet_account.cpp +++ b/src/server/scripts/Commands/cs_battlenet_account.cpp @@ -43,13 +43,14 @@ public: static std::vector<ChatCommand> accountCommandTable = { - { "create", rbac::RBAC_PERM_COMMAND_BNET_ACCOUNT_CREATE, true, &HandleAccountCreateCommand, "" }, - { "gameaccountcreate", rbac::RBAC_PERM_COMMAND_BNET_ACCOUNT_CREATE_GAME, true, &HandleGameAccountCreateCommand, "" }, - { "lock", rbac::RBAC_PERM_COMMAND_BNET_ACCOUNT, false, NULL, "", accountLockCommandTable }, - { "set", rbac::RBAC_PERM_COMMAND_BNET_ACCOUNT_SET, true, NULL, "", accountSetCommandTable }, - { "password", rbac::RBAC_PERM_COMMAND_BNET_ACCOUNT_PASSWORD, false, &HandleAccountPasswordCommand, "" }, - { "link", rbac::RBAC_PERM_COMMAND_BNET_ACCOUNT_LINK, true, &HandleAccountLinkCommand, "" }, - { "unlink", rbac::RBAC_PERM_COMMAND_BNET_ACCOUNT_UNLINK, true, &HandleAccountUnlinkCommand, "" }, + { "create", rbac::RBAC_PERM_COMMAND_BNET_ACCOUNT_CREATE, true, &HandleAccountCreateCommand, "" }, + { "gameaccountcreate", rbac::RBAC_PERM_COMMAND_BNET_ACCOUNT_CREATE_GAME, true, &HandleGameAccountCreateCommand, "" }, + { "lock", rbac::RBAC_PERM_COMMAND_BNET_ACCOUNT, false, NULL, "", accountLockCommandTable }, + { "set", rbac::RBAC_PERM_COMMAND_BNET_ACCOUNT_SET, true, NULL, "", accountSetCommandTable }, + { "password", rbac::RBAC_PERM_COMMAND_BNET_ACCOUNT_PASSWORD, false, &HandleAccountPasswordCommand, "" }, + { "link", rbac::RBAC_PERM_COMMAND_BNET_ACCOUNT_LINK, true, &HandleAccountLinkCommand, "" }, + { "unlink", rbac::RBAC_PERM_COMMAND_BNET_ACCOUNT_UNLINK, true, &HandleAccountUnlinkCommand, "" }, + { "listgameaccounts", rbac::RBAC_PERM_COMMAND_BNET_ACCOUNT_LIST_GAME_ACCOUTNS, true, &HandleListGameAccountsCommand, "" } }; static std::vector<ChatCommand> commandTable = @@ -460,6 +461,40 @@ public: return true; } + + static bool HandleListGameAccountsCommand(ChatHandler* handler, char const* args) + { + if (!*args) + return false; + + char* battlenetAccountName = strtok((char*)args, " "); + PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_BNET_GAME_ACCOUNT_LIST); + stmt->setString(0, battlenetAccountName); + if (PreparedQueryResult accountList = LoginDatabase.Query(stmt)) + { + auto formatDisplayName = [](char const* name) -> std::string + { + if (char const* hashPos = strchr(name, '#')) + return std::string("WoW") + ++hashPos; + else + return name; + }; + + handler->SendSysMessage("----------------------------------------------------"); + handler->SendSysMessage(LANG_ACCOUNT_BNET_LIST_HEADER); + handler->SendSysMessage("----------------------------------------------------"); + do + { + Field* fields = accountList->Fetch(); + handler->PSendSysMessage("| %10u | %-16.16s | %-16.16s |", fields[0].GetUInt32(), fields[1].GetCString(), formatDisplayName(fields[1].GetCString()).c_str()); + } while (accountList->NextRow()); + handler->SendSysMessage("----------------------------------------------------"); + } + else + handler->PSendSysMessage(LANG_ACCOUNT_BNET_LIST_NO_ACCOUNTS, battlenetAccountName); + + return true; + } }; void AddSC_battlenet_account_commandscript() |