From 8a2fce83e0147a7fb7dacd7d29f9423a99faf977 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sat, 10 Aug 2019 04:56:50 -0500 Subject: [PATCH] Adjust API handlers --- loginserver/account_management.cpp | 11 +++-- loginserver/account_management.h | 2 +- loginserver/loginserver_command_handler.cpp | 2 +- loginserver/loginserver_webserver.cpp | 48 +++++++++++++++------ loginserver/loginserver_webserver.h | 4 +- 5 files changed, 44 insertions(+), 23 deletions(-) diff --git a/loginserver/account_management.cpp b/loginserver/account_management.cpp index cca68a150..c2c0e5fa2 100644 --- a/loginserver/account_management.cpp +++ b/loginserver/account_management.cpp @@ -33,7 +33,7 @@ EQ::Event::TaskScheduler task_runner; * @param email * @return */ -uint32 AccountManagement::CreateLocalLoginServerAccount( +int32 AccountManagement::CreateLocalLoginServerAccount( std::string username, std::string password, std::string email @@ -53,13 +53,12 @@ uint32 AccountManagement::CreateLocalLoginServerAccount( std::string db_loginserver = server.options.GetDefaultLoginServerName(); if (server.db->DoesLoginServerAccountExist(username, hash, db_loginserver, 1)) { 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, - db_loginserver, - db_id + db_loginserver ); - return 0; + return -1; } uint32 created_account_id = server.db->CreateLoginAccount(username, hash, db_loginserver, email); @@ -72,7 +71,7 @@ uint32 AccountManagement::CreateLocalLoginServerAccount( created_account_id ); - return created_account_id; + return (int32) created_account_id; } LogError("Failed to create local login account for user [{0}]!", username); diff --git a/loginserver/account_management.h b/loginserver/account_management.h index 680122213..4ab3d8973 100644 --- a/loginserver/account_management.h +++ b/loginserver/account_management.h @@ -32,7 +32,7 @@ public: * @param email * @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 diff --git a/loginserver/loginserver_command_handler.cpp b/loginserver/loginserver_command_handler.cpp index 59398d495..75b0dbfcd 100644 --- a/loginserver/loginserver_command_handler.cpp +++ b/loginserver/loginserver_command_handler.cpp @@ -267,6 +267,6 @@ namespace LoginserverCommandHandler { cmd("--password").str() ); - LogInfo("Credentials were {0}", res == true ? "accepted" : "not accepted"); + LogInfo("Credentials were {0}", res ? "accepted" : "not accepted"); } } diff --git a/loginserver/loginserver_webserver.cpp b/loginserver/loginserver_webserver.cpp index 3a26cfb97..6a0bd4314 100644 --- a/loginserver/loginserver_webserver.cpp +++ b/loginserver/loginserver_webserver.cpp @@ -39,7 +39,9 @@ namespace LoginserverWebserver { api.Get( "/servers/list", [](const httplib::Request &request, httplib::Response &res) { - LoginserverWebserver::TokenManager::AuthCanRead(request, res); + if (!LoginserverWebserver::TokenManager::AuthCanRead(request, res)) { + return; + } Json::Value response; auto iter = server.server_manager->getWorldServers().begin(); @@ -63,7 +65,10 @@ namespace LoginserverWebserver { api.Post( "/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); std::string username = request_body.get("username", "").asString(); std::string password = request_body.get("password", "").asString(); @@ -76,12 +81,16 @@ namespace LoginserverWebserver { return; } - bool account_created = AccountManagement::CreateLocalLoginServerAccount(username, password, email); - if (account_created) { - response["message"] = "Account created successfully!"; + int32 account_created_id = AccountManagement::CreateLocalLoginServerAccount(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["message"] = "Account failed to create!"; + response["error"] = "Account failed to create!"; } LoginserverWebserver::SendResponse(response, res); @@ -90,7 +99,10 @@ namespace LoginserverWebserver { api.Post( "/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); std::string username = request_body.get("username", "").asString(); std::string password = request_body.get("password", "").asString(); @@ -120,7 +132,10 @@ namespace LoginserverWebserver { api.Post( "/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); std::string username = request_body.get("username", "").asString(); std::string password = request_body.get("password", "").asString(); @@ -161,7 +176,10 @@ namespace LoginserverWebserver { api.Post( "/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); std::string username = request_body.get("username", "").asString(); std::string password = request_body.get("password", "").asString(); @@ -233,7 +251,7 @@ namespace LoginserverWebserver { * @param request * @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 user_token = LoginserverWebserver::TokenManager::CheckApiAuthorizationHeaders(request); @@ -252,15 +270,17 @@ namespace LoginserverWebserver { user_token.user_agent ); - return; + return false; } + + return true; } /** * @param request * @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 user_token = LoginserverWebserver::TokenManager::CheckApiAuthorizationHeaders(request); @@ -279,8 +299,10 @@ namespace LoginserverWebserver { user_token.user_agent ); - return; + return false; } + + return true; } /** diff --git a/loginserver/loginserver_webserver.h b/loginserver/loginserver_webserver.h index 2c5d07866..b0cdb88c2 100644 --- a/loginserver/loginserver_webserver.h +++ b/loginserver/loginserver_webserver.h @@ -46,8 +46,8 @@ namespace LoginserverWebserver { static bool TokenExists(const std::string &token); token_data GetToken(const std::string &token); static token_data CheckApiAuthorizationHeaders(const httplib::Request &request); - static void AuthCanRead(const httplib::Request &request, httplib::Response &res); - static void AuthCanWrite(const httplib::Request &request, httplib::Response &res); + static bool AuthCanRead(const httplib::Request &request, httplib::Response &res); + static bool AuthCanWrite(const httplib::Request &request, httplib::Response &res); }; void RegisterRoutes(httplib::Server &api);