aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2016-12-18 12:35:27 +0100
committerShauren <shauren.trinity@gmail.com>2016-12-18 12:35:27 +0100
commitb633d61899bbbd723d4c0b2cbc850d5b686be46c (patch)
treed7a79b34779399be1ab823d39572500794038cb8 /src
parentbc758991140e961ceac46b17b766b0d54b8129fb (diff)
Core/Commands: Added new 'bnetaccount listgameaccounts' command to display all `account` table entries linked to a given battle.net email
* Also fixed errors about bad commands in db Closes #18474
Diffstat (limited to 'src')
-rw-r--r--src/server/database/Database/Implementation/LoginDatabase.cpp1
-rw-r--r--src/server/database/Database/Implementation/LoginDatabase.h1
-rw-r--r--src/server/game/Accounts/RBAC.h2
-rw-r--r--src/server/game/Miscellaneous/Language.h4
-rw-r--r--src/server/scripts/Commands/cs_battlenet_account.cpp49
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()