mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-15 12:31:31 +00:00
Add CreateLoginserverWorldAdminAccount command [skip ci]
This commit is contained in:
parent
b165760f18
commit
739f54bbfb
@ -70,3 +70,59 @@ bool AccountManagement::CreateLocalLoginServerAccount(
|
|||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param username
|
||||||
|
* @param password
|
||||||
|
* @param email
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
bool AccountManagement::CreateLoginserverWorldAdminAccount(
|
||||||
|
const std::string &username,
|
||||||
|
const std::string &password,
|
||||||
|
const std::string &email,
|
||||||
|
const std::string &first_name,
|
||||||
|
const std::string &last_name,
|
||||||
|
const std::string &ip_address
|
||||||
|
)
|
||||||
|
{
|
||||||
|
auto mode = server.options.GetEncryptionMode();
|
||||||
|
auto hash = eqcrypt_hash(username, password, mode);
|
||||||
|
|
||||||
|
LogInfo(
|
||||||
|
"Attempting to create world admin account | username [{0}] encryption algorithm [{1}] ({2})",
|
||||||
|
username,
|
||||||
|
GetEncryptionByModeId(mode),
|
||||||
|
mode
|
||||||
|
);
|
||||||
|
|
||||||
|
if (server.db->DoesLoginserverWorldAdminAccountExist(username)) {
|
||||||
|
LogInfo(
|
||||||
|
"Attempting to create world admin account for user [{0}] but already exists!",
|
||||||
|
username
|
||||||
|
);
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (server.db->CreateLoginserverWorldAdminAccount(
|
||||||
|
username,
|
||||||
|
hash,
|
||||||
|
first_name,
|
||||||
|
last_name,
|
||||||
|
email,
|
||||||
|
ip_address
|
||||||
|
)) {
|
||||||
|
LogInfo(
|
||||||
|
"Account creation success for user [{0}] encryption algorithm [{1}] ({2})",
|
||||||
|
username,
|
||||||
|
GetEncryptionByModeId(mode),
|
||||||
|
mode
|
||||||
|
);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
LogError("Failed to create world admin account account for user [{0}]!", username);
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|||||||
@ -24,7 +24,28 @@
|
|||||||
|
|
||||||
class AccountManagement {
|
class AccountManagement {
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param username
|
||||||
|
* @param password
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
static bool CreateLocalLoginServerAccount(std::string username, std::string password);
|
static bool CreateLocalLoginServerAccount(std::string username, std::string password);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param username
|
||||||
|
* @param password
|
||||||
|
* @param email
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
static bool CreateLoginserverWorldAdminAccount(
|
||||||
|
const std::string &username,
|
||||||
|
const std::string &password,
|
||||||
|
const std::string &email,
|
||||||
|
const std::string &first_name = "",
|
||||||
|
const std::string &last_name = "",
|
||||||
|
const std::string &ip_address = ""
|
||||||
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -57,7 +57,7 @@ Database::Database(
|
|||||||
user.c_str(),
|
user.c_str(),
|
||||||
pass.c_str(),
|
pass.c_str(),
|
||||||
name.c_str(),
|
name.c_str(),
|
||||||
atoi(port.c_str()),
|
std::stoi(port),
|
||||||
&errnum,
|
&errnum,
|
||||||
errbuf
|
errbuf
|
||||||
)
|
)
|
||||||
@ -66,7 +66,7 @@ Database::Database(
|
|||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Log(Logs::General, Logs::Status, "Using database '%s' at %s:%d", database, host, port);
|
LogStatus("Using database [{0}] at [{1}:{2}]", name, host, port);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -477,6 +477,7 @@ bool Database::CreateWorldRegistration(
|
|||||||
server_short_name
|
server_short_name
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -608,4 +609,57 @@ void Database::LoadLogSettings(EQEmuLogSys::LogSettings *log_settings)
|
|||||||
}
|
}
|
||||||
|
|
||||||
delete[] categories_in_database;
|
delete[] categories_in_database;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param account_name
|
||||||
|
* @param account_password
|
||||||
|
* @param first_name
|
||||||
|
* @param last_name
|
||||||
|
* @param email
|
||||||
|
* @param ip_address
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
bool Database::CreateLoginserverWorldAdminAccount(
|
||||||
|
const std::string &account_name,
|
||||||
|
const std::string &account_password,
|
||||||
|
const std::string &first_name,
|
||||||
|
const std::string &last_name,
|
||||||
|
const std::string &email,
|
||||||
|
const std::string &ip_address
|
||||||
|
)
|
||||||
|
{
|
||||||
|
auto query = fmt::format(
|
||||||
|
"INSERT INTO login_server_admins (account_name, account_password, first_name, last_name, email, registration_date, "
|
||||||
|
"registration_ip_address) "
|
||||||
|
"VALUES ('{0}', '{1}', '{2}', '{3}', '{4}', NOW(), '{5}')",
|
||||||
|
EscapeString(account_name),
|
||||||
|
EscapeString(account_password),
|
||||||
|
EscapeString(first_name),
|
||||||
|
EscapeString(last_name),
|
||||||
|
EscapeString(email),
|
||||||
|
ip_address
|
||||||
|
);
|
||||||
|
|
||||||
|
auto results = QueryDatabase(query);
|
||||||
|
|
||||||
|
return results.Success();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param account_name
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
bool Database::DoesLoginserverWorldAdminAccountExist(
|
||||||
|
const std::string &account_name
|
||||||
|
)
|
||||||
|
{
|
||||||
|
auto query = fmt::format(
|
||||||
|
"SELECT account_name FROM login_server_admins WHERE account_name = '{0}'",
|
||||||
|
EscapeString(account_name)
|
||||||
|
);
|
||||||
|
|
||||||
|
auto results = QueryDatabase(query);
|
||||||
|
|
||||||
|
return (results.RowCount() == 1);
|
||||||
|
}
|
||||||
|
|||||||
@ -159,9 +159,9 @@ public:
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
Database::DbWorldRegistration GetWorldRegistration(
|
Database::DbWorldRegistration GetWorldRegistration(
|
||||||
const std::string& short_name,
|
const std::string &short_name,
|
||||||
const std::string& remote_ip,
|
const std::string &remote_ip,
|
||||||
const std::string& local_ip
|
const std::string &local_ip
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -211,9 +211,33 @@ public:
|
|||||||
std::string CreateLoginserverApiToken(bool write_mode, bool read_mode);
|
std::string CreateLoginserverApiToken(bool write_mode, bool read_mode);
|
||||||
MySQLRequestResult GetLoginserverApiTokens();
|
MySQLRequestResult GetLoginserverApiTokens();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param account_name
|
||||||
|
* @param account_password
|
||||||
|
* @param first_name
|
||||||
|
* @param last_name
|
||||||
|
* @param email
|
||||||
|
* @param ip_address
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
bool CreateLoginserverWorldAdminAccount(
|
||||||
|
const std::string &account_name,
|
||||||
|
const std::string &account_password,
|
||||||
|
const std::string &first_name,
|
||||||
|
const std::string &last_name,
|
||||||
|
const std::string &email,
|
||||||
|
const std::string &ip_address
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param account_name
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
bool DoesLoginserverWorldAdminAccountExist(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{};
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@ -17,7 +17,7 @@ DROP TABLE IF EXISTS `login_server_admins`;
|
|||||||
CREATE TABLE `login_server_admins` (
|
CREATE TABLE `login_server_admins` (
|
||||||
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||||
`account_name` varchar(30) NOT NULL,
|
`account_name` varchar(30) NOT NULL,
|
||||||
`account_password` varchar(100) NOT NULL,
|
`account_password` varchar(255) NOT NULL,
|
||||||
`first_name` varchar(50) NOT NULL,
|
`first_name` varchar(50) NOT NULL,
|
||||||
`last_name` varchar(50) NOT NULL,
|
`last_name` varchar(50) NOT NULL,
|
||||||
`email` varchar(100) NOT NULL,
|
`email` varchar(100) NOT NULL,
|
||||||
|
|||||||
@ -64,19 +64,29 @@ namespace LoginserverCommandHandler {
|
|||||||
|
|
||||||
argh::parser cmd;
|
argh::parser cmd;
|
||||||
cmd.parse(argc, argv, argh::parser::PREFER_PARAM_FOR_UNREG_OPTION);
|
cmd.parse(argc, argv, argh::parser::PREFER_PARAM_FOR_UNREG_OPTION);
|
||||||
|
|
||||||
LoginserverCommandHandler::DisplayDebug(cmd);
|
LoginserverCommandHandler::DisplayDebug(cmd);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Declare command mapping
|
* Declare command mapping
|
||||||
*/
|
*/
|
||||||
std::map<std::string, void (*)(int argc, char **argv, argh::parser &cmd)> function_map;
|
std::map<std::string, void (*)(int argc, char **argv, argh::parser &cmd)> function_map;
|
||||||
function_map["create-loginserver-api-token"] = &LoginserverCommandHandler::CreateLoginserverApiToken;
|
|
||||||
function_map["list-loginserver-api-tokens"] = &LoginserverCommandHandler::ListLoginserverApiTokens;
|
|
||||||
function_map["create-loginserver-account"] = &LoginserverCommandHandler::CreateLocalLoginserverAccount;
|
|
||||||
|
|
||||||
std::map<std::string, void (*)(int argc, char **argv, argh::parser &cmd)>::const_iterator it = function_map.begin();
|
function_map["create-loginserver-api-token"] = &LoginserverCommandHandler::CreateLoginserverApiToken;
|
||||||
std::map<std::string, void (*)(int argc, char **argv, argh::parser &cmd)>::const_iterator end = function_map.end();
|
function_map["list-loginserver-api-tokens"] = &LoginserverCommandHandler::ListLoginserverApiTokens;
|
||||||
|
function_map["create-loginserver-account"] = &LoginserverCommandHandler::CreateLocalLoginserverAccount;
|
||||||
|
function_map["create-loginserver-world-admin-account"] = &LoginserverCommandHandler::CreateLoginserverWorldAdminAccount;
|
||||||
|
|
||||||
|
std::map<std::string, void (*)(
|
||||||
|
int argc,
|
||||||
|
char **argv,
|
||||||
|
argh::parser &cmd
|
||||||
|
)>::const_iterator it = function_map.begin();
|
||||||
|
|
||||||
|
std::map<std::string, void (*)(
|
||||||
|
int argc,
|
||||||
|
char **argv,
|
||||||
|
argh::parser &cmd
|
||||||
|
)>::const_iterator end = function_map.end();
|
||||||
|
|
||||||
bool ran_command = false;
|
bool ran_command = false;
|
||||||
while (it != end) {
|
while (it != end) {
|
||||||
@ -103,9 +113,12 @@ namespace LoginserverCommandHandler {
|
|||||||
std::cout << "> create-loginserver-api-token --write --read" << std::endl;
|
std::cout << "> create-loginserver-api-token --write --read" << std::endl;
|
||||||
std::cout << "> list-loginserver-api-tokens" << std::endl;
|
std::cout << "> list-loginserver-api-tokens" << std::endl;
|
||||||
std::cout << std::endl;
|
std::cout << std::endl;
|
||||||
std::cout << "# Accounts" << std::endl;
|
std::cout << "# User Accounts" << std::endl;
|
||||||
std::cout << "> create-loginserver-account --username=* --password=*" << std::endl;
|
std::cout << "> create-loginserver-account --username=* --password=*" << std::endl;
|
||||||
std::cout << std::endl;
|
std::cout << std::endl;
|
||||||
|
std::cout << "# World Accounts" << std::endl;
|
||||||
|
std::cout << "> create-loginserver-world-admin-account --username=* --password=* --email=*" << std::endl;
|
||||||
|
std::cout << std::endl;
|
||||||
std::cout << std::endl;
|
std::cout << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -159,7 +172,7 @@ namespace LoginserverCommandHandler {
|
|||||||
*/
|
*/
|
||||||
void CreateLocalLoginserverAccount(int argc, char **argv, argh::parser &cmd)
|
void CreateLocalLoginserverAccount(int argc, char **argv, argh::parser &cmd)
|
||||||
{
|
{
|
||||||
if (cmd("--username").str().empty() || cmd("--username").str().empty()) {
|
if (cmd("--username").str().empty() || cmd("--password").str().empty()) {
|
||||||
LogInfo("Command Example: create-loginserver-account --username=user --password=password");
|
LogInfo("Command Example: create-loginserver-account --username=user --password=password");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
@ -167,4 +180,27 @@ namespace LoginserverCommandHandler {
|
|||||||
AccountManagement::CreateLocalLoginServerAccount(cmd("--username").str(), cmd("--password").str());
|
AccountManagement::CreateLocalLoginServerAccount(cmd("--username").str(), cmd("--password").str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param argc
|
||||||
|
* @param argv
|
||||||
|
* @param cmd
|
||||||
|
*/
|
||||||
|
void CreateLoginserverWorldAdminAccount(int argc, char **argv, argh::parser &cmd)
|
||||||
|
{
|
||||||
|
if (
|
||||||
|
cmd("--username").str().empty() ||
|
||||||
|
cmd("--password").str().empty() ||
|
||||||
|
cmd("--email").str().empty()) {
|
||||||
|
|
||||||
|
LogInfo("Command Example: create-loginserver-account --username=user --password=password");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
AccountManagement::CreateLoginserverWorldAdminAccount(
|
||||||
|
cmd("--username").str(),
|
||||||
|
cmd("--password").str(),
|
||||||
|
cmd("--email").str()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -29,6 +29,7 @@ namespace LoginserverCommandHandler {
|
|||||||
void CreateLoginserverApiToken(int argc, char **argv, argh::parser &cmd);
|
void CreateLoginserverApiToken(int argc, char **argv, argh::parser &cmd);
|
||||||
void ListLoginserverApiTokens(int argc, char **argv, argh::parser &cmd);
|
void ListLoginserverApiTokens(int argc, char **argv, argh::parser &cmd);
|
||||||
void CreateLocalLoginserverAccount(int argc, char **argv, argh::parser &cmd);
|
void CreateLocalLoginserverAccount(int argc, char **argv, argh::parser &cmd);
|
||||||
|
void CreateLoginserverWorldAdminAccount(int argc, char **argv, argh::parser &cmd);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user