Add another API endpoint [skip ci]

This commit is contained in:
Akkadius 2019-09-08 03:03:52 -05:00
parent 34a4db6302
commit 40696a132b
4 changed files with 58 additions and 11 deletions

View File

@ -33,10 +33,11 @@ EQ::Event::TaskScheduler task_runner;
* @param email * @param email
* @return * @return
*/ */
int32 AccountManagement::CreateLocalLoginServerAccount( int32 AccountManagement::CreateLoginServerAccount(
std::string username, std::string username,
std::string password, std::string password,
std::string email std::string email,
const std::string &source_loginserver
) )
{ {
auto mode = server.options.GetEncryptionMode(); auto mode = server.options.GetEncryptionMode();
@ -49,19 +50,18 @@ int32 AccountManagement::CreateLocalLoginServerAccount(
mode mode
); );
unsigned int db_id = 0; unsigned int db_id = 0;
std::string db_loginserver = server.options.GetDefaultLoginServerName(); if (server.db->DoesLoginServerAccountExist(username, hash, source_loginserver, 1)) {
if (server.db->DoesLoginServerAccountExist(username, hash, db_loginserver, 1)) {
LogWarning( LogWarning(
"Attempting to create local login account for user [{0}] login [{1}] but already exists!", "Attempting to create local login account for user [{0}] login [{1}] but already exists!",
username, username,
db_loginserver source_loginserver
); );
return -1; return -1;
} }
uint32 created_account_id = server.db->CreateLoginAccount(username, hash, db_loginserver, email); uint32 created_account_id = server.db->CreateLoginAccount(username, hash, source_loginserver, email);
if (created_account_id > 0) { if (created_account_id > 0) {
LogInfo( LogInfo(
"Account creation success for user [{0}] encryption algorithm [{1}] ({2}) id: [{3}]", "Account creation success for user [{0}] encryption algorithm [{1}] ({2}) id: [{3}]",
@ -323,7 +323,7 @@ uint32 AccountManagement::CheckExternalLoginserverUserCredentials(
auto m_dbid = sp.GetUInt32(8); auto m_dbid = sp.GetUInt32(8);
{ {
ret = (response_error <= 101 ? m_dbid : 0); ret = (response_error <= 101 ? m_dbid : 0);
running = false; running = false;
} }
break; break;

View File

@ -30,9 +30,15 @@ public:
* @param username * @param username
* @param password * @param password
* @param email * @param email
* @param source_loginserver
* @return * @return
*/ */
static int32 CreateLocalLoginServerAccount(std::string username, std::string password, std::string email = ""); static int32 CreateLoginServerAccount(
std::string username,
std::string password,
std::string email = "",
const std::string &source_loginserver = "local"
);
/** /**
* @param username * @param username

View File

@ -145,7 +145,7 @@ namespace LoginserverCommandHandler {
EQEmuCommand::ValidateCmdInput(arguments, options, cmd, argc, argv); EQEmuCommand::ValidateCmdInput(arguments, options, cmd, argc, argv);
AccountManagement::CreateLocalLoginServerAccount( AccountManagement::CreateLoginServerAccount(
cmd("--username").str(), cmd("--username").str(),
cmd("--password").str(), cmd("--password").str(),
cmd("--email").str() cmd("--email").str()

View File

@ -81,7 +81,48 @@ namespace LoginserverWebserver {
return; return;
} }
int32 account_created_id = AccountManagement::CreateLocalLoginServerAccount(username, password, email); int32 account_created_id = AccountManagement::CreateLoginServerAccount(username, password, email);
if (account_created_id > 0) {
response["message"] = "Account created successfully!";
response["data"]["account_id"] = account_created_id;
}
else if (account_created_id == -1) {
response["error"] = "Account already exists!";
}
else {
response["error"] = "Account failed to create!";
}
LoginserverWebserver::SendResponse(response, res);
}
);
api.Post(
"/account/create/external", [](const httplib::Request &request, httplib::Response &res) {
if (!LoginserverWebserver::TokenManager::AuthCanWrite(request, res)) {
return;
}
Json::Value request_body = LoginserverWebserver::ParseRequestBody(request);
std::string username = request_body.get("username", "").asString();
std::string password = request_body.get("password", "").asString();
std::string email = request_body.get("email", "").asString();
Json::Value response;
if (username.empty() || password.empty()) {
response["error"] = "Username or password not set";
LoginserverWebserver::SendResponse(response, res);
return;
}
std::string source_loginserver = "eqemu";
int32 account_created_id = AccountManagement::CreateLoginServerAccount(
username,
password,
email,
source_loginserver
);
if (account_created_id > 0) { if (account_created_id > 0) {
response["message"] = "Account created successfully!"; response["message"] = "Account created successfully!";
response["data"]["account_id"] = account_created_id; response["data"]["account_id"] = account_created_id;