feat: add admin account creation options from cli (GM level) (#1620)

* add admin account creation options from cli

* use actual gm levels

felt under delivered in previous iteration.

* Update dMasterServer/MasterServer.cpp

Co-authored-by: Daniel Seiler <me@xiphoseer.de>

---------

Co-authored-by: Daniel Seiler <me@xiphoseer.de>
This commit is contained in:
David Markowitz
2024-07-03 15:37:19 -07:00
committed by GitHub
parent 84fff7c380
commit c3f6ef5a1d
4 changed files with 43 additions and 4 deletions

View File

@@ -41,6 +41,7 @@
#include "Start.h"
#include "Server.h"
#include "CDZoneTableTable.h"
#include "eGameMasterLevel.h"
namespace Game {
Logger* logger = nullptr;
@@ -187,15 +188,20 @@ int main(int argc, char** argv) {
std::cout << "Enter a username: ";
std::cin >> username;
const auto checkIsAdmin = []() {
std::string admin;
std::cout << "What level of privilege should this account have? Please enter a number between 0 (Player) and 9 (Admin) inclusive. No entry will default to 0." << std::endl;
std::cin >> admin;
return admin;
};
auto accountId = Database::Get()->GetAccountInfo(username);
if (accountId) {
if (accountId && accountId->id != 0) {
LOG("Account with name \"%s\" already exists", username.c_str());
std::cout << "Do you want to change the password of that account? [y/n]?";
std::string prompt = "";
std::cin >> prompt;
if (prompt == "y" || prompt == "yes") {
if (accountId->id == 0) return EXIT_FAILURE;
//Read the password from the console without echoing it.
#ifdef __linux__
//This function is obsolete, but it only meant to be used by the
@@ -220,6 +226,20 @@ int main(int argc, char** argv) {
} else {
LOG("Account \"%s\" was not updated.", username.c_str());
}
std::cout << "Update admin privileges? [y/n]? ";
std::string admin;
std::cin >> admin;
bool updateAdmin = admin == "y" || admin == "yes";
if (updateAdmin) {
auto gmLevel = GeneralUtils::TryParse<int32_t>(checkIsAdmin()).value_or(0);
if (gmLevel > 9 || gmLevel < 0) {
LOG("Invalid admin level. Defaulting to 0");
gmLevel = 0;
}
Database::Get()->UpdateAccountGmLevel(accountId->id, static_cast<eGameMasterLevel>(gmLevel));
}
return EXIT_SUCCESS;
}
@@ -250,6 +270,17 @@ int main(int argc, char** argv) {
}
LOG("Account created successfully!");
accountId = Database::Get()->GetAccountInfo(username);
if (accountId) {
auto gmLevel = GeneralUtils::TryParse<int32_t>(checkIsAdmin()).value_or(0);
if (gmLevel > 9 || gmLevel < 0) {
LOG("Invalid admin level. Defaulting to 0");
gmLevel = 0;
}
Database::Get()->UpdateAccountGmLevel(accountId->id, static_cast<eGameMasterLevel>(gmLevel));
}
return EXIT_SUCCESS;
}
@@ -558,7 +589,7 @@ void HandlePacket(Packet* packet) {
inStream.Read(sessionKey);
LUString username;
inStream.Read(username);
for (auto it : activeSessions) {
if (it.second == username.string) {
activeSessions.erase(it.first);