mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-13 02:11:30 +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;
|
||||
}
|
||||
|
||||
/**
|
||||
* @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 {
|
||||
public:
|
||||
|
||||
/**
|
||||
* @param username
|
||||
* @param password
|
||||
* @return
|
||||
*/
|
||||
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(),
|
||||
pass.c_str(),
|
||||
name.c_str(),
|
||||
atoi(port.c_str()),
|
||||
std::stoi(port),
|
||||
&errnum,
|
||||
errbuf
|
||||
)
|
||||
@ -66,7 +66,7 @@ Database::Database(
|
||||
exit(1);
|
||||
}
|
||||
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
|
||||
);
|
||||
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -608,4 +609,57 @@ void Database::LoadLogSettings(EQEmuLogSys::LogSettings *log_settings)
|
||||
}
|
||||
|
||||
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
|
||||
*/
|
||||
Database::DbWorldRegistration GetWorldRegistration(
|
||||
const std::string& short_name,
|
||||
const std::string& remote_ip,
|
||||
const std::string& local_ip
|
||||
const std::string &short_name,
|
||||
const std::string &remote_ip,
|
||||
const std::string &local_ip
|
||||
);
|
||||
|
||||
/**
|
||||
@ -211,9 +211,33 @@ public:
|
||||
std::string CreateLoginserverApiToken(bool write_mode, bool read_mode);
|
||||
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:
|
||||
std::string user, pass, host, port, name;
|
||||
MYSQL *database;
|
||||
MYSQL *database{};
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@ -17,7 +17,7 @@ DROP TABLE IF EXISTS `login_server_admins`;
|
||||
CREATE TABLE `login_server_admins` (
|
||||
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`account_name` varchar(30) NOT NULL,
|
||||
`account_password` varchar(100) NOT NULL,
|
||||
`account_password` varchar(255) NOT NULL,
|
||||
`first_name` varchar(50) NOT NULL,
|
||||
`last_name` varchar(50) NOT NULL,
|
||||
`email` varchar(100) NOT NULL,
|
||||
|
||||
@ -64,19 +64,29 @@ namespace LoginserverCommandHandler {
|
||||
|
||||
argh::parser cmd;
|
||||
cmd.parse(argc, argv, argh::parser::PREFER_PARAM_FOR_UNREG_OPTION);
|
||||
|
||||
LoginserverCommandHandler::DisplayDebug(cmd);
|
||||
|
||||
/**
|
||||
* Declare command mapping
|
||||
*/
|
||||
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();
|
||||
std::map<std::string, void (*)(int argc, char **argv, argh::parser &cmd)>::const_iterator end = function_map.end();
|
||||
function_map["create-loginserver-api-token"] = &LoginserverCommandHandler::CreateLoginserverApiToken;
|
||||
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;
|
||||
while (it != end) {
|
||||
@ -103,9 +113,12 @@ namespace LoginserverCommandHandler {
|
||||
std::cout << "> create-loginserver-api-token --write --read" << std::endl;
|
||||
std::cout << "> list-loginserver-api-tokens" << 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 << 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;
|
||||
}
|
||||
|
||||
@ -159,7 +172,7 @@ namespace LoginserverCommandHandler {
|
||||
*/
|
||||
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");
|
||||
exit(1);
|
||||
}
|
||||
@ -167,4 +180,27 @@ namespace LoginserverCommandHandler {
|
||||
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 ListLoginserverApiTokens(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