Adjust API handlers

This commit is contained in:
Akkadius 2019-08-10 04:56:50 -05:00
parent 2081b0e214
commit 8a2fce83e0
5 changed files with 44 additions and 23 deletions

View File

@ -33,7 +33,7 @@ EQ::Event::TaskScheduler task_runner;
* @param email * @param email
* @return * @return
*/ */
uint32 AccountManagement::CreateLocalLoginServerAccount( int32 AccountManagement::CreateLocalLoginServerAccount(
std::string username, std::string username,
std::string password, std::string password,
std::string email std::string email
@ -53,13 +53,12 @@ uint32 AccountManagement::CreateLocalLoginServerAccount(
std::string db_loginserver = server.options.GetDefaultLoginServerName(); std::string db_loginserver = server.options.GetDefaultLoginServerName();
if (server.db->DoesLoginServerAccountExist(username, hash, db_loginserver, 1)) { if (server.db->DoesLoginServerAccountExist(username, hash, db_loginserver, 1)) {
LogWarning( LogWarning(
"Attempting to create local login account for user [{0}] login [{1}] db_id [{2}] but already exists!", "Attempting to create local login account for user [{0}] login [{1}] but already exists!",
username, username,
db_loginserver, db_loginserver
db_id
); );
return 0; return -1;
} }
uint32 created_account_id = server.db->CreateLoginAccount(username, hash, db_loginserver, email); uint32 created_account_id = server.db->CreateLoginAccount(username, hash, db_loginserver, email);
@ -72,7 +71,7 @@ uint32 AccountManagement::CreateLocalLoginServerAccount(
created_account_id created_account_id
); );
return created_account_id; return (int32) created_account_id;
} }
LogError("Failed to create local login account for user [{0}]!", username); LogError("Failed to create local login account for user [{0}]!", username);

View File

@ -32,7 +32,7 @@ public:
* @param email * @param email
* @return * @return
*/ */
static uint32 CreateLocalLoginServerAccount(std::string username, std::string password, std::string email = ""); static int32 CreateLocalLoginServerAccount(std::string username, std::string password, std::string email = "");
/** /**
* @param username * @param username

View File

@ -267,6 +267,6 @@ namespace LoginserverCommandHandler {
cmd("--password").str() cmd("--password").str()
); );
LogInfo("Credentials were {0}", res == true ? "accepted" : "not accepted"); LogInfo("Credentials were {0}", res ? "accepted" : "not accepted");
} }
} }

View File

@ -39,7 +39,9 @@ namespace LoginserverWebserver {
api.Get( api.Get(
"/servers/list", [](const httplib::Request &request, httplib::Response &res) { "/servers/list", [](const httplib::Request &request, httplib::Response &res) {
LoginserverWebserver::TokenManager::AuthCanRead(request, res); if (!LoginserverWebserver::TokenManager::AuthCanRead(request, res)) {
return;
}
Json::Value response; Json::Value response;
auto iter = server.server_manager->getWorldServers().begin(); auto iter = server.server_manager->getWorldServers().begin();
@ -63,7 +65,10 @@ namespace LoginserverWebserver {
api.Post( api.Post(
"/account/create", [](const httplib::Request &request, httplib::Response &res) { "/account/create", [](const httplib::Request &request, httplib::Response &res) {
LoginserverWebserver::TokenManager::AuthCanWrite(request, res); if (!LoginserverWebserver::TokenManager::AuthCanWrite(request, res)) {
return;
}
Json::Value request_body = LoginserverWebserver::ParseRequestBody(request); Json::Value request_body = LoginserverWebserver::ParseRequestBody(request);
std::string username = request_body.get("username", "").asString(); std::string username = request_body.get("username", "").asString();
std::string password = request_body.get("password", "").asString(); std::string password = request_body.get("password", "").asString();
@ -76,12 +81,16 @@ namespace LoginserverWebserver {
return; return;
} }
bool account_created = AccountManagement::CreateLocalLoginServerAccount(username, password, email); int32 account_created_id = AccountManagement::CreateLocalLoginServerAccount(username, password, email);
if (account_created) { if (account_created_id > 0) {
response["message"] = "Account created successfully!"; response["message"] = "Account created successfully!";
response["data"]["account_id"] = account_created_id;
}
else if (account_created_id == -1) {
response["error"] = "Account already exists!";
} }
else { else {
response["message"] = "Account failed to create!"; response["error"] = "Account failed to create!";
} }
LoginserverWebserver::SendResponse(response, res); LoginserverWebserver::SendResponse(response, res);
@ -90,7 +99,10 @@ namespace LoginserverWebserver {
api.Post( api.Post(
"/account/credentials/validate/local", [](const httplib::Request &request, httplib::Response &res) { "/account/credentials/validate/local", [](const httplib::Request &request, httplib::Response &res) {
LoginserverWebserver::TokenManager::AuthCanRead(request, res); if (!LoginserverWebserver::TokenManager::AuthCanRead(request, res)) {
return;
}
Json::Value request_body = LoginserverWebserver::ParseRequestBody(request); Json::Value request_body = LoginserverWebserver::ParseRequestBody(request);
std::string username = request_body.get("username", "").asString(); std::string username = request_body.get("username", "").asString();
std::string password = request_body.get("password", "").asString(); std::string password = request_body.get("password", "").asString();
@ -120,7 +132,10 @@ namespace LoginserverWebserver {
api.Post( api.Post(
"/account/credentials/update/local", [](const httplib::Request &request, httplib::Response &res) { "/account/credentials/update/local", [](const httplib::Request &request, httplib::Response &res) {
LoginserverWebserver::TokenManager::AuthCanWrite(request, res); if (!LoginserverWebserver::TokenManager::AuthCanWrite(request, res)) {
return;
}
Json::Value request_body = LoginserverWebserver::ParseRequestBody(request); Json::Value request_body = LoginserverWebserver::ParseRequestBody(request);
std::string username = request_body.get("username", "").asString(); std::string username = request_body.get("username", "").asString();
std::string password = request_body.get("password", "").asString(); std::string password = request_body.get("password", "").asString();
@ -161,7 +176,10 @@ namespace LoginserverWebserver {
api.Post( api.Post(
"/account/credentials/validate/external", [](const httplib::Request &request, httplib::Response &res) { "/account/credentials/validate/external", [](const httplib::Request &request, httplib::Response &res) {
LoginserverWebserver::TokenManager::AuthCanRead(request, res); if (!LoginserverWebserver::TokenManager::AuthCanRead(request, res)) {
return;
}
Json::Value request_body = LoginserverWebserver::ParseRequestBody(request); Json::Value request_body = LoginserverWebserver::ParseRequestBody(request);
std::string username = request_body.get("username", "").asString(); std::string username = request_body.get("username", "").asString();
std::string password = request_body.get("password", "").asString(); std::string password = request_body.get("password", "").asString();
@ -233,7 +251,7 @@ namespace LoginserverWebserver {
* @param request * @param request
* @param res * @param res
*/ */
void LoginserverWebserver::TokenManager::AuthCanRead(const httplib::Request &request, httplib::Response &res) bool LoginserverWebserver::TokenManager::AuthCanRead(const httplib::Request &request, httplib::Response &res)
{ {
LoginserverWebserver::TokenManager::token_data LoginserverWebserver::TokenManager::token_data
user_token = LoginserverWebserver::TokenManager::CheckApiAuthorizationHeaders(request); user_token = LoginserverWebserver::TokenManager::CheckApiAuthorizationHeaders(request);
@ -252,15 +270,17 @@ namespace LoginserverWebserver {
user_token.user_agent user_token.user_agent
); );
return; return false;
} }
return true;
} }
/** /**
* @param request * @param request
* @param res * @param res
*/ */
void LoginserverWebserver::TokenManager::AuthCanWrite(const httplib::Request &request, httplib::Response &res) bool LoginserverWebserver::TokenManager::AuthCanWrite(const httplib::Request &request, httplib::Response &res)
{ {
LoginserverWebserver::TokenManager::token_data LoginserverWebserver::TokenManager::token_data
user_token = LoginserverWebserver::TokenManager::CheckApiAuthorizationHeaders(request); user_token = LoginserverWebserver::TokenManager::CheckApiAuthorizationHeaders(request);
@ -279,8 +299,10 @@ namespace LoginserverWebserver {
user_token.user_agent user_token.user_agent
); );
return; return false;
} }
return true;
} }
/** /**

View File

@ -46,8 +46,8 @@ namespace LoginserverWebserver {
static bool TokenExists(const std::string &token); static bool TokenExists(const std::string &token);
token_data GetToken(const std::string &token); token_data GetToken(const std::string &token);
static token_data CheckApiAuthorizationHeaders(const httplib::Request &request); static token_data CheckApiAuthorizationHeaders(const httplib::Request &request);
static void AuthCanRead(const httplib::Request &request, httplib::Response &res); static bool AuthCanRead(const httplib::Request &request, httplib::Response &res);
static void AuthCanWrite(const httplib::Request &request, httplib::Response &res); static bool AuthCanWrite(const httplib::Request &request, httplib::Response &res);
}; };
void RegisterRoutes(httplib::Server &api); void RegisterRoutes(httplib::Server &api);