Add Database::DbLoginServerAdmin GetLoginServerAdmin [skip ci]

This commit is contained in:
Akkadius 2019-07-09 16:57:14 -05:00
parent 739f54bbfb
commit 86943ce6be
4 changed files with 73 additions and 7 deletions

View File

@ -449,7 +449,8 @@ bool Database::CreateWorldRegistration(
std::string server_long_name, std::string server_long_name,
std::string server_short_name, std::string server_short_name,
std::string server_remote_ip, std::string server_remote_ip,
unsigned int &id unsigned int &id,
unsigned int &server_admin_id
) )
{ {
auto results = QueryDatabase("SELECT IFNULL(max(id), 0) + 1 FROM login_world_servers"); auto results = QueryDatabase("SELECT IFNULL(max(id), 0) + 1 FROM login_world_servers");
@ -462,11 +463,12 @@ bool Database::CreateWorldRegistration(
id = std::stoi(row[0]); id = std::stoi(row[0]);
auto insert_query = fmt::format( auto insert_query = fmt::format(
"INSERT INTO login_world_servers SET id = {0}, long_name = '{1}', short_name = '{2}', last_ip_address = '{3}', \n" "INSERT INTO login_world_servers SET id = {0}, long_name = '{1}', short_name = '{2}', last_ip_address = '{3}', \n"
"login_server_list_type_id = 3, login_server_admin_id = 0, is_server_trusted = 0, tag_description = ''", "login_server_list_type_id = 3, login_server_admin_id = {4}, is_server_trusted = 0, tag_description = ''",
id, id,
server_long_name, server_long_name,
server_short_name, server_short_name,
server_remote_ip server_remote_ip,
server_admin_id
); );
auto insert_results = QueryDatabase(insert_query); auto insert_results = QueryDatabase(insert_query);
@ -655,7 +657,7 @@ bool Database::DoesLoginserverWorldAdminAccountExist(
) )
{ {
auto query = fmt::format( auto query = fmt::format(
"SELECT account_name FROM login_server_admins WHERE account_name = '{0}'", "SELECT account_name FROM login_server_admins WHERE account_name = '{0}' LIMIT 1",
EscapeString(account_name) EscapeString(account_name)
); );
@ -663,3 +665,34 @@ bool Database::DoesLoginserverWorldAdminAccountExist(
return (results.RowCount() == 1); return (results.RowCount() == 1);
} }
/**
* @param account_name
* @return
*/
Database::DbLoginServerAdmin Database::GetLoginServerAdmin(const std::string &account_name)
{
auto query = fmt::format(
"SELECT id, account_name, account_password, first_name, last_name, email, registration_date, registration_ip_address"
" FROM login_server_admins WHERE account_name = '{0}' LIMIT 1",
EscapeString(account_name)
);
auto results = QueryDatabase(query);
Database::DbLoginServerAdmin login_server_admin{};
if (results.RowCount() == 1) {
auto row = results.begin();
login_server_admin.loaded = true;
login_server_admin.id = std::stoi(row[0]);
login_server_admin.account_name = row[1];
login_server_admin.account_password = row[2];
login_server_admin.first_name = row[3];
login_server_admin.last_name = row[4];
login_server_admin.email = row[5];
login_server_admin.registration_date = row[7];
login_server_admin.registration_ip_address = row[8];
}
return login_server_admin;
}

View File

@ -195,7 +195,8 @@ public:
std::string server_long_name, std::string server_long_name,
std::string server_short_name, std::string server_short_name,
std::string server_remote_ip, std::string server_remote_ip,
unsigned int &id unsigned int &id,
unsigned int &server_admin_id
); );
/** /**
@ -235,6 +236,20 @@ public:
*/ */
bool DoesLoginserverWorldAdminAccountExist(const std::string &account_name); bool DoesLoginserverWorldAdminAccountExist(const std::string &account_name);
struct DbLoginServerAdmin {
bool loaded = false;
uint32 id;
std::string account_name;
std::string account_password;
std::string first_name;
std::string last_name;
std::string email;
std::string registration_date;
std::string registration_ip_address;
};
Database::DbLoginServerAdmin GetLoginServerAdmin(const std::string &account_name);
protected: protected:
std::string user, pass, host, port, name; std::string user, pass, host, port, name;
MYSQL *database{}; MYSQL *database{};

View File

@ -192,7 +192,7 @@ namespace LoginserverCommandHandler {
cmd("--password").str().empty() || cmd("--password").str().empty() ||
cmd("--email").str().empty()) { cmd("--email").str().empty()) {
LogInfo("Command Example: create-loginserver-account --username=user --password=password"); LogInfo("Command Example: create-loginserver-world-admin-account --username=* --password=* --email=*");
exit(1); exit(1);
} }

View File

@ -875,6 +875,23 @@ bool WorldServer::HandleNewLoginserverInfoUnregisteredAllowed(
return true; return true;
} }
Database::DbLoginServerAdmin login_server_admin =
server.db->GetLoginServerAdmin(GetAccountName());
uint32 server_admin_id = 0;
if (login_server_admin.loaded) {
auto mode = server.options.GetEncryptionMode();
if (eqcrypt_verify_hash(
GetAccountName(),
GetAccountPassword(),
login_server_admin.account_password,
mode
)) {
server_admin_id = login_server_admin.id;
}
}
/** /**
* Auto create a registration * Auto create a registration
*/ */
@ -882,7 +899,8 @@ bool WorldServer::HandleNewLoginserverInfoUnregisteredAllowed(
GetServerLongName(), GetServerLongName(),
GetServerShortName(), GetServerShortName(),
GetRemoteIp(), GetRemoteIp(),
server_id server_id,
server_admin_id
)) { )) {
return false; return false;
} }