mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2025-05-16 03:21:18 +00:00
WIP
This commit is contained in:
parent
72ae55981b
commit
d77a1a92bf
@ -4,6 +4,7 @@ set(DCHATSERVER_SOURCES
|
|||||||
"PlayerContainer.cpp"
|
"PlayerContainer.cpp"
|
||||||
"ChatWebAPI.cpp"
|
"ChatWebAPI.cpp"
|
||||||
"JSONUtils.cpp"
|
"JSONUtils.cpp"
|
||||||
|
"CSRCommandHandler.cpp"
|
||||||
)
|
)
|
||||||
|
|
||||||
add_executable(ChatServer "ChatServer.cpp")
|
add_executable(ChatServer "ChatServer.cpp")
|
||||||
|
353
dChatServer/CSRCommandHandler.cpp
Normal file
353
dChatServer/CSRCommandHandler.cpp
Normal file
@ -0,0 +1,353 @@
|
|||||||
|
#include "CSRCommandHandler.h"
|
||||||
|
#include "eCSRCommand.h"
|
||||||
|
#include "eHTTPStatusCode.h"
|
||||||
|
#include "JSONUtils.h"
|
||||||
|
#include "magic_enum.hpp"
|
||||||
|
#include "json.hpp"
|
||||||
|
|
||||||
|
void CSRCommandHandler::HandleCSRCommand(HTTPReply& reply, const json& data) {
|
||||||
|
auto check = JSONUtils::CheckRequiredData(data, { "command" });
|
||||||
|
if (!check.empty()) {
|
||||||
|
reply.status = eHTTPStatusCode::BAD_REQUEST;
|
||||||
|
reply.message = check;
|
||||||
|
} else {
|
||||||
|
// get command from json
|
||||||
|
std::string command_string = data["command"];
|
||||||
|
// upper
|
||||||
|
std::transform(command_string.begin(), command_string.end(), command_string.begin(), ::toupper);
|
||||||
|
eCSRCommand command = magic_enum::enum_cast<eCSRCommand>(command_string).value_or(eCSRCommand::INVALID);
|
||||||
|
|
||||||
|
switch (command) {
|
||||||
|
case eCSRCommand::QUERY_SERVER_STATUS:
|
||||||
|
QueryServerStatus(reply, data);
|
||||||
|
break;
|
||||||
|
case eCSRCommand::QUERY_CHARACTER_LOCATION:
|
||||||
|
QueryCharacterLocation(reply, data);
|
||||||
|
break;
|
||||||
|
case eCSRCommand::QUERY_CHARACTER_ONLINE_STATUS:
|
||||||
|
QueryCharacterOnlineStatus(reply, data);
|
||||||
|
break;
|
||||||
|
case eCSRCommand::INVENTORY_ADD_ITEM:
|
||||||
|
InventoryAddItem(reply, data);
|
||||||
|
break;
|
||||||
|
case eCSRCommand::INVENTORY_DELETE_ITEM:
|
||||||
|
InventoryDeleteItem(reply, data);
|
||||||
|
break;
|
||||||
|
case eCSRCommand::MODERATE_MUTE_ACCOUNT:
|
||||||
|
ModerateMuteAccount(reply, data);
|
||||||
|
break;
|
||||||
|
case eCSRCommand::MODERATE_BAN_ACCOUNT:
|
||||||
|
ModerateBanAccount(reply, data);
|
||||||
|
break;
|
||||||
|
case eCSRCommand::MODERATE_EDUCATE_CHARACTER:
|
||||||
|
ModerateEducateCharacter(reply, data);
|
||||||
|
break;
|
||||||
|
case eCSRCommand::MODERATE_KICK_CHARACTER:
|
||||||
|
ModerateKickCharacter(reply, data);
|
||||||
|
break;
|
||||||
|
case eCSRCommand::MODERATE_WARN_CHARACTER:
|
||||||
|
ModerateWarnCharacter(reply, data);
|
||||||
|
break;
|
||||||
|
case eCSRCommand::MODERATE_RENAME_CHARACTER:
|
||||||
|
ModerateRenameCharacter(reply, data);
|
||||||
|
break;
|
||||||
|
case eCSRCommand::MODERATE_DELETE_CHARACTER_FRIEND:
|
||||||
|
ModerateDeleteCharacterFriend(reply, data);
|
||||||
|
break;
|
||||||
|
case eCSRCommand::MODERATE_KILL_CHARACTER:
|
||||||
|
ModerateKillCharacter(reply, data);
|
||||||
|
break;
|
||||||
|
case eCSRCommand::UPDATE_CHARACTER_HEALTH:
|
||||||
|
UpdateCharacterHealth(reply, data);
|
||||||
|
break;
|
||||||
|
case eCSRCommand::UPDATE_CHARACTER_ARMOR:
|
||||||
|
UpdateCharacterArmor(reply, data);
|
||||||
|
break;
|
||||||
|
case eCSRCommand::UPDATE_CHARACTER_IMAGINATION:
|
||||||
|
UpdateCharacterImagination(reply, data);
|
||||||
|
break;
|
||||||
|
case eCSRCommand::UPDATE_CHARACTER_MAX_HEALTH:
|
||||||
|
UpdateCharacterMaxHealth(reply, data);
|
||||||
|
break;
|
||||||
|
case eCSRCommand::UPDATE_CHARACTER_MAX_ARMOR:
|
||||||
|
UpdateCharacterMaxArmor(reply, data);
|
||||||
|
break;
|
||||||
|
case eCSRCommand::UPDATE_CHARACTER_MAX_IMAGINATION:
|
||||||
|
UpdateCharacterMaxImagination(reply, data);
|
||||||
|
break;
|
||||||
|
case eCSRCommand::UPDATE_CHARACTER_CURRENCY:
|
||||||
|
UpdateCharacterCurrency(reply, data);
|
||||||
|
break;
|
||||||
|
case eCSRCommand::UPDATE_CHARACTER_REPUTATION:
|
||||||
|
UpdateCharacterReputation(reply, data);
|
||||||
|
break;
|
||||||
|
case eCSRCommand::UPDATE_CHARACTER_LEGO_SCORE:
|
||||||
|
UpdateCharacterLegoScore(reply, data);
|
||||||
|
break;
|
||||||
|
case eCSRCommand::UPDATE_CHARACTER_EMOTES:
|
||||||
|
UpdateCharacterEmotes(reply, data);
|
||||||
|
break;
|
||||||
|
case eCSRCommand::UPDATE_CHARACTER_ADD_ACHIEVEMENT:
|
||||||
|
UpdateCharacterAddAchievement(reply, data);
|
||||||
|
break;
|
||||||
|
case eCSRCommand::UPDATE_CHARACTER_COMPLETE_ACHIEVEMENT:
|
||||||
|
UpdateCharacterCompleteAchievement(reply, data);
|
||||||
|
break;
|
||||||
|
case eCSRCommand::UPDATE_CHARACTER_REMOVE_ACHIEVEMENT:
|
||||||
|
UpdateCharacterRemoveAchievement(reply, data);
|
||||||
|
break;
|
||||||
|
case eCSRCommand::UPDATE_CHARACTER_POSITION_OFFLINE:
|
||||||
|
UpdateCharacterPositionOffline(reply, data);
|
||||||
|
break;
|
||||||
|
case eCSRCommand::UPDATE_CHARACTER_INV_SLOT_AMOUNT:
|
||||||
|
UpdateCharacterInvSlotAmount(reply, data);
|
||||||
|
break;
|
||||||
|
case eCSRCommand::UTILITY_SAVE_CHARACTER:
|
||||||
|
UtilitySaveCharacter(reply, data);
|
||||||
|
break;
|
||||||
|
case eCSRCommand::UTILITY_SEND_MAIL:
|
||||||
|
UtilitySendMail(reply, data);
|
||||||
|
break;
|
||||||
|
case eCSRCommand::UTILITY_GIVE_ITEM_TO_ALL_PLAYERS_ONLINE:
|
||||||
|
UtilityGiveItemToAllPlayersOnline(reply, data);
|
||||||
|
break;
|
||||||
|
case eCSRCommand::METRICS_CONFIGURE:
|
||||||
|
MetricsConfigure(reply, data);
|
||||||
|
break;
|
||||||
|
case eCSRCommand::DISABLE_ZONE:
|
||||||
|
DisableZone(reply, data);
|
||||||
|
break;
|
||||||
|
case eCSRCommand::INIT_DONATION_AMOUNT:
|
||||||
|
InitDonationAmount(reply, data);
|
||||||
|
break;
|
||||||
|
case eCSRCommand::KILL_SERVERS_COUNTDOWN:
|
||||||
|
KillServersCountdown(reply, data);
|
||||||
|
break;
|
||||||
|
case eCSRCommand::DISABLE_FAQ:
|
||||||
|
DisableFAQ(reply, data);
|
||||||
|
break;
|
||||||
|
case eCSRCommand::THROTTLEQUEUE:
|
||||||
|
ThrottleQueue(reply, data);
|
||||||
|
break;
|
||||||
|
case eCSRCommand::GATEGM_ACCESS:
|
||||||
|
GateGMAccess(reply, data);
|
||||||
|
break;
|
||||||
|
case eCSRCommand::RECONNECT_CRISP:
|
||||||
|
ReconnectCrisp(reply, data);
|
||||||
|
break;
|
||||||
|
case eCSRCommand::MODERATE_KICK_ACCOUNT:
|
||||||
|
ModerateKickAccount(reply, data);
|
||||||
|
break;
|
||||||
|
case eCSRCommand::TOGGLE_CRISP_SERVER:
|
||||||
|
ToggleCrispServer(reply, data);
|
||||||
|
break;
|
||||||
|
case eCSRCommand::QUICK_DRAIN_SERVER:
|
||||||
|
QuickDrainServer(reply, data);
|
||||||
|
break;
|
||||||
|
case eCSRCommand::QUICK_DRAIN_SERVER_RENEW:
|
||||||
|
QuickDrainServerRenew(reply, data);
|
||||||
|
break;
|
||||||
|
case eCSRCommand::REPLICATE_CHARACTER:
|
||||||
|
ReplicateCharacter(reply, data);
|
||||||
|
break;
|
||||||
|
case eCSRCommand::GET_SERVER_STATUS:
|
||||||
|
GetServerStatus(reply);
|
||||||
|
break;
|
||||||
|
case eCSRCommand::RELOAD_SERVER_INIS:
|
||||||
|
ReloadServerINIs(reply);
|
||||||
|
break;
|
||||||
|
case eCSRCommand::INVALID:
|
||||||
|
default:
|
||||||
|
reply.status = eHTTPStatusCode::BAD_REQUEST;
|
||||||
|
reply.message = "{\"error\":\"Invalid Command\"}";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CSRCommandHandler::QueryServerStatus(HTTPReply& reply, const json& data) {
|
||||||
|
reply.status = eHTTPStatusCode::NOT_IMPLEMENTED;
|
||||||
|
reply.message = "{\"error\":\"Not Implemented\"}";
|
||||||
|
}
|
||||||
|
void CSRCommandHandler::QueryCharacterLocation(HTTPReply& reply, const json& data) {
|
||||||
|
reply.status = eHTTPStatusCode::NOT_IMPLEMENTED;
|
||||||
|
reply.message = "{\"error\":\"Not Implemented\"}";
|
||||||
|
}
|
||||||
|
void CSRCommandHandler::QueryCharacterOnlineStatus(HTTPReply& reply, const json& data) {
|
||||||
|
reply.status = eHTTPStatusCode::NOT_IMPLEMENTED;
|
||||||
|
reply.message = "{\"error\":\"Not Implemented\"}";
|
||||||
|
}
|
||||||
|
void CSRCommandHandler::InventoryAddItem(HTTPReply& reply, const json& data) {
|
||||||
|
reply.status = eHTTPStatusCode::NOT_IMPLEMENTED;
|
||||||
|
reply.message = "{\"error\":\"Not Implemented\"}";
|
||||||
|
}
|
||||||
|
void CSRCommandHandler::InventoryDeleteItem(HTTPReply& reply, const json& data) {
|
||||||
|
reply.status = eHTTPStatusCode::NOT_IMPLEMENTED;
|
||||||
|
reply.message = "{\"error\":\"Not Implemented\"}";
|
||||||
|
}
|
||||||
|
void CSRCommandHandler::ModerateMuteAccount(HTTPReply& reply, const json& data) {
|
||||||
|
reply.status = eHTTPStatusCode::NOT_IMPLEMENTED;
|
||||||
|
reply.message = "{\"error\":\"Not Implemented\"}";
|
||||||
|
}
|
||||||
|
void CSRCommandHandler::ModerateBanAccount(HTTPReply& reply, const json& data) {
|
||||||
|
reply.status = eHTTPStatusCode::NOT_IMPLEMENTED;
|
||||||
|
reply.message = "{\"error\":\"Not Implemented\"}";
|
||||||
|
}
|
||||||
|
void CSRCommandHandler::ModerateEducateCharacter(HTTPReply& reply, const json& data) {
|
||||||
|
reply.status = eHTTPStatusCode::NOT_IMPLEMENTED;
|
||||||
|
reply.message = "{\"error\":\"Not Implemented\"}";
|
||||||
|
}
|
||||||
|
void CSRCommandHandler::ModerateKickCharacter(HTTPReply& reply, const json& data) {
|
||||||
|
reply.status = eHTTPStatusCode::NOT_IMPLEMENTED;
|
||||||
|
reply.message = "{\"error\":\"Not Implemented\"}";
|
||||||
|
}
|
||||||
|
void CSRCommandHandler::ModerateWarnCharacter(HTTPReply& reply, const json& data) {
|
||||||
|
reply.status = eHTTPStatusCode::NOT_IMPLEMENTED;
|
||||||
|
reply.message = "{\"error\":\"Not Implemented\"}";
|
||||||
|
}
|
||||||
|
void CSRCommandHandler::ModerateRenameCharacter(HTTPReply& reply, const json& data) {
|
||||||
|
reply.status = eHTTPStatusCode::NOT_IMPLEMENTED;
|
||||||
|
reply.message = "{\"error\":\"Not Implemented\"}";
|
||||||
|
}
|
||||||
|
void CSRCommandHandler::ModerateDeleteCharacterFriend(HTTPReply& reply, const json& data) {
|
||||||
|
reply.status = eHTTPStatusCode::NOT_IMPLEMENTED;
|
||||||
|
reply.message = "{\"error\":\"Not Implemented\"}";
|
||||||
|
}
|
||||||
|
void CSRCommandHandler::ModerateKillCharacter(HTTPReply& reply, const json& data) {
|
||||||
|
reply.status = eHTTPStatusCode::NOT_IMPLEMENTED;
|
||||||
|
reply.message = "{\"error\":\"Not Implemented\"}";
|
||||||
|
}
|
||||||
|
void CSRCommandHandler::UpdateCharacterHealth(HTTPReply& reply, const json& data) {
|
||||||
|
reply.status = eHTTPStatusCode::NOT_IMPLEMENTED;
|
||||||
|
reply.message = "{\"error\":\"Not Implemented\"}";
|
||||||
|
}
|
||||||
|
void CSRCommandHandler::UpdateCharacterArmor(HTTPReply& reply, const json& data) {
|
||||||
|
reply.status = eHTTPStatusCode::NOT_IMPLEMENTED;
|
||||||
|
reply.message = "{\"error\":\"Not Implemented\"}";
|
||||||
|
}
|
||||||
|
void CSRCommandHandler::UpdateCharacterImagination(HTTPReply& reply, const json& data) {
|
||||||
|
reply.status = eHTTPStatusCode::NOT_IMPLEMENTED;
|
||||||
|
reply.message = "{\"error\":\"Not Implemented\"}";
|
||||||
|
}
|
||||||
|
void CSRCommandHandler::UpdateCharacterMaxHealth(HTTPReply& reply, const json& data) {
|
||||||
|
reply.status = eHTTPStatusCode::NOT_IMPLEMENTED;
|
||||||
|
reply.message = "{\"error\":\"Not Implemented\"}";
|
||||||
|
}
|
||||||
|
void CSRCommandHandler::UpdateCharacterMaxArmor(HTTPReply& reply, const json& data) {
|
||||||
|
reply.status = eHTTPStatusCode::NOT_IMPLEMENTED;
|
||||||
|
reply.message = "{\"error\":\"Not Implemented\"}";
|
||||||
|
}
|
||||||
|
void CSRCommandHandler::UpdateCharacterMaxImagination(HTTPReply& reply, const json& data) {
|
||||||
|
reply.status = eHTTPStatusCode::NOT_IMPLEMENTED;
|
||||||
|
reply.message = "{\"error\":\"Not Implemented\"}";
|
||||||
|
}
|
||||||
|
void CSRCommandHandler::UpdateCharacterCurrency(HTTPReply& reply, const json& data) {
|
||||||
|
reply.status = eHTTPStatusCode::NOT_IMPLEMENTED;
|
||||||
|
reply.message = "{\"error\":\"Not Implemented\"}";
|
||||||
|
}
|
||||||
|
void CSRCommandHandler::UpdateCharacterReputation(HTTPReply& reply, const json& data) {
|
||||||
|
reply.status = eHTTPStatusCode::NOT_IMPLEMENTED;
|
||||||
|
reply.message = "{\"error\":\"Not Implemented\"}";
|
||||||
|
}
|
||||||
|
void CSRCommandHandler::UpdateCharacterLegoScore(HTTPReply& reply, const json& data) {
|
||||||
|
reply.status = eHTTPStatusCode::NOT_IMPLEMENTED;
|
||||||
|
reply.message = "{\"error\":\"Not Implemented\"}";
|
||||||
|
}
|
||||||
|
void CSRCommandHandler::UpdateCharacterEmotes(HTTPReply& reply, const json& data) {
|
||||||
|
reply.status = eHTTPStatusCode::NOT_IMPLEMENTED;
|
||||||
|
reply.message = "{\"error\":\"Not Implemented\"}";
|
||||||
|
}
|
||||||
|
void CSRCommandHandler::UpdateCharacterAddAchievement(HTTPReply& reply, const json& data) {
|
||||||
|
reply.status = eHTTPStatusCode::NOT_IMPLEMENTED;
|
||||||
|
reply.message = "{\"error\":\"Not Implemented\"}";
|
||||||
|
}
|
||||||
|
void CSRCommandHandler::UpdateCharacterCompleteAchievement(HTTPReply& reply, const json& data) {
|
||||||
|
reply.status = eHTTPStatusCode::NOT_IMPLEMENTED;
|
||||||
|
reply.message = "{\"error\":\"Not Implemented\"}";
|
||||||
|
}
|
||||||
|
void CSRCommandHandler::UpdateCharacterRemoveAchievement(HTTPReply& reply, const json& data) {
|
||||||
|
reply.status = eHTTPStatusCode::NOT_IMPLEMENTED;
|
||||||
|
reply.message = "{\"error\":\"Not Implemented\"}";
|
||||||
|
}
|
||||||
|
void CSRCommandHandler::UpdateCharacterPositionOffline(HTTPReply& reply, const json& data) {
|
||||||
|
reply.status = eHTTPStatusCode::NOT_IMPLEMENTED;
|
||||||
|
reply.message = "{\"error\":\"Not Implemented\"}";
|
||||||
|
}
|
||||||
|
void CSRCommandHandler::UpdateCharacterInvSlotAmount(HTTPReply& reply, const json& data) {
|
||||||
|
reply.status = eHTTPStatusCode::NOT_IMPLEMENTED;
|
||||||
|
reply.message = "{\"error\":\"Not Implemented\"}";
|
||||||
|
}
|
||||||
|
void CSRCommandHandler::UtilitySaveCharacter(HTTPReply& reply, const json& data) {
|
||||||
|
reply.status = eHTTPStatusCode::NOT_IMPLEMENTED;
|
||||||
|
reply.message = "{\"error\":\"Not Implemented\"}";
|
||||||
|
}
|
||||||
|
void CSRCommandHandler::UtilitySendMail(HTTPReply& reply, const json& data) {
|
||||||
|
|
||||||
|
|
||||||
|
reply.status = eHTTPStatusCode::NOT_IMPLEMENTED;
|
||||||
|
reply.message = "{\"error\":\"Not Implemented\"}";
|
||||||
|
}
|
||||||
|
void CSRCommandHandler::UtilityGiveItemToAllPlayersOnline(HTTPReply& reply, const json& data) {
|
||||||
|
reply.status = eHTTPStatusCode::NOT_IMPLEMENTED;
|
||||||
|
reply.message = "{\"error\":\"Not Implemented\"}";
|
||||||
|
}
|
||||||
|
void CSRCommandHandler::MetricsConfigure(HTTPReply& reply, const json& data) {
|
||||||
|
reply.status = eHTTPStatusCode::NOT_IMPLEMENTED;
|
||||||
|
reply.message = "{\"error\":\"Not Implemented\"}";
|
||||||
|
}
|
||||||
|
void CSRCommandHandler::DisableZone(HTTPReply& reply, const json& data) {
|
||||||
|
reply.status = eHTTPStatusCode::NOT_IMPLEMENTED;
|
||||||
|
reply.message = "{\"error\":\"Not Implemented\"}";
|
||||||
|
}
|
||||||
|
void CSRCommandHandler::InitDonationAmount(HTTPReply& reply, const json& data) {
|
||||||
|
reply.status = eHTTPStatusCode::NOT_IMPLEMENTED;
|
||||||
|
reply.message = "{\"error\":\"Not Implemented\"}";
|
||||||
|
}
|
||||||
|
void CSRCommandHandler::KillServersCountdown(HTTPReply& reply, const json& data) {
|
||||||
|
reply.status = eHTTPStatusCode::NOT_IMPLEMENTED;
|
||||||
|
reply.message = "{\"error\":\"Not Implemented\"}";
|
||||||
|
}
|
||||||
|
void CSRCommandHandler::DisableFAQ(HTTPReply& reply, const json& data) {
|
||||||
|
reply.status = eHTTPStatusCode::NOT_IMPLEMENTED;
|
||||||
|
reply.message = "{\"error\":\"Not Implemented\"}";
|
||||||
|
}
|
||||||
|
void CSRCommandHandler::ThrottleQueue(HTTPReply& reply, const json& data) {
|
||||||
|
reply.status = eHTTPStatusCode::NOT_IMPLEMENTED;
|
||||||
|
reply.message = "{\"error\":\"Not Implemented\"}";
|
||||||
|
}
|
||||||
|
void CSRCommandHandler::GateGMAccess(HTTPReply& reply, const json& data) {
|
||||||
|
reply.status = eHTTPStatusCode::NOT_IMPLEMENTED;
|
||||||
|
reply.message = "{\"error\":\"Not Implemented\"}";
|
||||||
|
}
|
||||||
|
void CSRCommandHandler::ReconnectCrisp(HTTPReply& reply, const json& data) {
|
||||||
|
reply.status = eHTTPStatusCode::NOT_IMPLEMENTED;
|
||||||
|
reply.message = "{\"error\":\"Not Implemented\"}";
|
||||||
|
}
|
||||||
|
void CSRCommandHandler::ModerateKickAccount(HTTPReply& reply, const json& data) {
|
||||||
|
reply.status = eHTTPStatusCode::NOT_IMPLEMENTED;
|
||||||
|
reply.message = "{\"error\":\"Not Implemented\"}";
|
||||||
|
}
|
||||||
|
void CSRCommandHandler::ToggleCrispServer(HTTPReply& reply, const json& data) {
|
||||||
|
reply.status = eHTTPStatusCode::NOT_IMPLEMENTED;
|
||||||
|
reply.message = "{\"error\":\"Not Implemented\"}";
|
||||||
|
}
|
||||||
|
void CSRCommandHandler::QuickDrainServer(HTTPReply& reply, const json& data) {
|
||||||
|
reply.status = eHTTPStatusCode::NOT_IMPLEMENTED;
|
||||||
|
reply.message = "{\"error\":\"Not Implemented\"}";
|
||||||
|
}
|
||||||
|
void CSRCommandHandler::QuickDrainServerRenew(HTTPReply& reply, const json& data) {
|
||||||
|
reply.status = eHTTPStatusCode::NOT_IMPLEMENTED;
|
||||||
|
reply.message = "{\"error\":\"Not Implemented\"}";
|
||||||
|
}
|
||||||
|
void CSRCommandHandler::ReplicateCharacter(HTTPReply& reply, const json& data) {
|
||||||
|
reply.status = eHTTPStatusCode::NOT_IMPLEMENTED;
|
||||||
|
reply.message = "{\"error\":\"Not Implemented\"}";
|
||||||
|
}
|
||||||
|
void CSRCommandHandler::GetServerStatus(HTTPReply& reply) {
|
||||||
|
reply.status = eHTTPStatusCode::NOT_IMPLEMENTED;
|
||||||
|
reply.message = "{\"error\":\"Not Implemented\"}";
|
||||||
|
}
|
||||||
|
void CSRCommandHandler::ReloadServerINIs(HTTPReply& reply) {
|
||||||
|
reply.status = eHTTPStatusCode::NOT_IMPLEMENTED;
|
||||||
|
reply.message = "{\"error\":\"Not Implemented\"}";
|
||||||
|
}
|
62
dChatServer/CSRCommandHandler.h
Normal file
62
dChatServer/CSRCommandHandler.h
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
#ifndef __CSR_COMMAND_HANDLER__H__
|
||||||
|
#define __CSR_COMMAND_HANDLER__H__
|
||||||
|
|
||||||
|
#include <optional>
|
||||||
|
#include "json_fwd.hpp"
|
||||||
|
|
||||||
|
using json = nlohmann::json;
|
||||||
|
struct HTTPReply;
|
||||||
|
|
||||||
|
|
||||||
|
namespace CSRCommandHandler {
|
||||||
|
void HandleCSRCommand(HTTPReply& reply, const json& data);
|
||||||
|
|
||||||
|
void QueryServerStatus(HTTPReply& reply, const json& data);
|
||||||
|
void QueryCharacterLocation(HTTPReply& reply, const json& data);
|
||||||
|
void QueryCharacterOnlineStatus(HTTPReply& reply, const json& data);
|
||||||
|
void InventoryAddItem(HTTPReply& reply, const json& data);
|
||||||
|
void InventoryDeleteItem(HTTPReply& reply, const json& data);
|
||||||
|
void ModerateMuteAccount(HTTPReply& reply, const json& data);
|
||||||
|
void ModerateBanAccount(HTTPReply& reply, const json& data);
|
||||||
|
void ModerateEducateCharacter(HTTPReply& reply, const json& data);
|
||||||
|
void ModerateKickCharacter(HTTPReply& reply, const json& data);
|
||||||
|
void ModerateWarnCharacter(HTTPReply& reply, const json& data);
|
||||||
|
void ModerateRenameCharacter(HTTPReply& reply, const json& data);
|
||||||
|
void ModerateDeleteCharacterFriend(HTTPReply& reply, const json& data);
|
||||||
|
void ModerateKillCharacter(HTTPReply& reply, const json& data);
|
||||||
|
void UpdateCharacterHealth(HTTPReply& reply, const json& data);
|
||||||
|
void UpdateCharacterArmor(HTTPReply& reply, const json& data);
|
||||||
|
void UpdateCharacterImagination(HTTPReply& reply, const json& data);
|
||||||
|
void UpdateCharacterMaxHealth(HTTPReply& reply, const json& data);
|
||||||
|
void UpdateCharacterMaxArmor(HTTPReply& reply, const json& data);
|
||||||
|
void UpdateCharacterMaxImagination(HTTPReply& reply, const json& data);
|
||||||
|
void UpdateCharacterCurrency(HTTPReply& reply, const json& data);
|
||||||
|
void UpdateCharacterReputation(HTTPReply& reply, const json& data);
|
||||||
|
void UpdateCharacterLegoScore(HTTPReply& reply, const json& data);
|
||||||
|
void UpdateCharacterEmotes(HTTPReply& reply, const json& data);
|
||||||
|
void UpdateCharacterAddAchievement(HTTPReply& reply, const json& data);
|
||||||
|
void UpdateCharacterCompleteAchievement(HTTPReply& reply, const json& data);
|
||||||
|
void UpdateCharacterRemoveAchievement(HTTPReply& reply, const json& data);
|
||||||
|
void UpdateCharacterPositionOffline(HTTPReply& reply, const json& data);
|
||||||
|
void UpdateCharacterInvSlotAmount(HTTPReply& reply, const json& data);
|
||||||
|
void UtilitySaveCharacter(HTTPReply& reply, const json& data);
|
||||||
|
void UtilitySendMail(HTTPReply& reply, const json& data);
|
||||||
|
void UtilityGiveItemToAllPlayersOnline(HTTPReply& reply, const json& data);
|
||||||
|
void MetricsConfigure(HTTPReply& reply, const json& data);
|
||||||
|
void DisableZone(HTTPReply& reply, const json& data);
|
||||||
|
void InitDonationAmount(HTTPReply& reply, const json& data);
|
||||||
|
void KillServersCountdown(HTTPReply& reply, const json& data);
|
||||||
|
void DisableFAQ(HTTPReply& reply, const json& data);
|
||||||
|
void ThrottleQueue(HTTPReply& reply, const json& data);
|
||||||
|
void GateGMAccess(HTTPReply& reply, const json& data);
|
||||||
|
void ReconnectCrisp(HTTPReply& reply, const json& data);
|
||||||
|
void ModerateKickAccount(HTTPReply& reply, const json& data);
|
||||||
|
void ToggleCrispServer(HTTPReply& reply, const json& data);
|
||||||
|
void QuickDrainServer(HTTPReply& reply, const json& data);
|
||||||
|
void QuickDrainServerRenew(HTTPReply& reply, const json& data);
|
||||||
|
void ReplicateCharacter(HTTPReply& reply, const json& data);
|
||||||
|
void GetServerStatus(HTTPReply& reply);
|
||||||
|
void ReloadServerINIs(HTTPReply& reply);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // !__CSR_COMMAND_HANDLER__H__
|
@ -15,6 +15,8 @@
|
|||||||
#include "magic_enum.hpp"
|
#include "magic_enum.hpp"
|
||||||
#include "ChatPackets.h"
|
#include "ChatPackets.h"
|
||||||
#include "StringifiedEnum.h"
|
#include "StringifiedEnum.h"
|
||||||
|
#include "eCSRCommand.h"
|
||||||
|
#include "CSRCommandHandler.h"
|
||||||
|
|
||||||
#ifdef DARKFLAME_PLATFORM_WIN32
|
#ifdef DARKFLAME_PLATFORM_WIN32
|
||||||
#pragma push_macro("DELETE")
|
#pragma push_macro("DELETE")
|
||||||
@ -31,20 +33,6 @@ namespace {
|
|||||||
const char* json_content_type = "Content-Type: application/json\r\n";
|
const char* json_content_type = "Content-Type: application/json\r\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
struct HTTPReply {
|
|
||||||
eHTTPStatusCode status = eHTTPStatusCode::NOT_FOUND;
|
|
||||||
std::string message = "{\"error\":\"Not Found\"}";
|
|
||||||
};
|
|
||||||
|
|
||||||
bool CheckValidJSON(std::optional<json> data, HTTPReply& reply) {
|
|
||||||
if (!data) {
|
|
||||||
reply.status = eHTTPStatusCode::BAD_REQUEST;
|
|
||||||
reply.message = "{\"error\":\"Invalid JSON\"}";
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void HandlePlayersRequest(HTTPReply& reply) {
|
void HandlePlayersRequest(HTTPReply& reply) {
|
||||||
const json data = Game::playerContainer;
|
const json data = Game::playerContainer;
|
||||||
reply.status = data.empty() ? eHTTPStatusCode::NO_CONTENT : eHTTPStatusCode::OK;
|
reply.status = data.empty() ? eHTTPStatusCode::NO_CONTENT : eHTTPStatusCode::OK;
|
||||||
@ -78,7 +66,7 @@ void HandleGET(HTTPReply& reply, const ChatWebAPI::eRoute& route , const std::st
|
|||||||
}
|
}
|
||||||
|
|
||||||
void HandleAnnounceRequest(HTTPReply& reply, const std::optional<json>& data) {
|
void HandleAnnounceRequest(HTTPReply& reply, const std::optional<json>& data) {
|
||||||
if (!CheckValidJSON(data, reply)) return;
|
if (!JSONUtils::Validate(data, reply)) return;
|
||||||
|
|
||||||
const auto& good_data = data.value();
|
const auto& good_data = data.value();
|
||||||
auto check = JSONUtils::CheckRequiredData(good_data, { "title", "message" });
|
auto check = JSONUtils::CheckRequiredData(good_data, { "title", "message" });
|
||||||
@ -97,13 +85,28 @@ void HandleAnnounceRequest(HTTPReply& reply, const std::optional<json>& data) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void HandleCSRCommandRequest(HTTPReply& reply, const std::optional<json>& data) {
|
||||||
|
if (!JSONUtils::Validate(data, reply)) return;
|
||||||
|
|
||||||
|
const auto& good_data = data.value();
|
||||||
|
auto check = JSONUtils::CheckRequiredData(good_data, { "command" });
|
||||||
|
if (!check.empty()) {
|
||||||
|
reply.status = eHTTPStatusCode::BAD_REQUEST;
|
||||||
|
reply.message = check;
|
||||||
|
} else {
|
||||||
|
CSRCommandHandler::HandleCSRCommand(reply, good_data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void HandlePOST(HTTPReply& reply, const ChatWebAPI::eRoute& route , const std::string& body) {
|
void HandlePOST(HTTPReply& reply, const ChatWebAPI::eRoute& route , const std::string& body) {
|
||||||
auto data = GeneralUtils::TryParse<json>(body);
|
auto data = GeneralUtils::TryParse<json>(body);
|
||||||
switch (route) {
|
switch (route) {
|
||||||
case ChatWebAPI::eRoute::ANNOUNCE:{
|
case ChatWebAPI::eRoute::ANNOUNCE:
|
||||||
HandleAnnounceRequest(reply, data.value());
|
HandleAnnounceRequest(reply, data.value());
|
||||||
break;
|
break;
|
||||||
}
|
case ChatWebAPI::eRoute::CSR:
|
||||||
|
HandleCSRCommandRequest(reply, data.value());
|
||||||
|
break;
|
||||||
case ChatWebAPI::eRoute::INVALID:
|
case ChatWebAPI::eRoute::INVALID:
|
||||||
default:
|
default:
|
||||||
HandleInvalidRoute(reply);
|
HandleInvalidRoute(reply);
|
||||||
@ -134,7 +137,6 @@ void HandleHTTPMessage(mg_connection* connection, const mg_http_message* http_ms
|
|||||||
std::transform(uri.begin(), uri.end(), uri.begin(), ::toupper);
|
std::transform(uri.begin(), uri.end(), uri.begin(), ::toupper);
|
||||||
// convert uri string to route enum
|
// convert uri string to route enum
|
||||||
ChatWebAPI::eRoute route = magic_enum::enum_cast<ChatWebAPI::eRoute>(uri).value_or(ChatWebAPI::eRoute::INVALID);
|
ChatWebAPI::eRoute route = magic_enum::enum_cast<ChatWebAPI::eRoute>(uri).value_or(ChatWebAPI::eRoute::INVALID);
|
||||||
|
|
||||||
// convert body from cstring to std string
|
// convert body from cstring to std string
|
||||||
std::string body(http_msg->body.buf, http_msg->body.len);
|
std::string body(http_msg->body.buf, http_msg->body.len);
|
||||||
|
|
||||||
|
@ -17,6 +17,7 @@ public:
|
|||||||
TEAMS,
|
TEAMS,
|
||||||
// POST
|
// POST
|
||||||
ANNOUNCE,
|
ANNOUNCE,
|
||||||
|
CSR,
|
||||||
// INVALID
|
// INVALID
|
||||||
INVALID
|
INVALID
|
||||||
};
|
};
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
#include "JSONUtils.h"
|
#include "JSONUtils.h"
|
||||||
|
|
||||||
#include "json.hpp"
|
#include "json.hpp"
|
||||||
|
#include "eHTTPStatusCode.h"
|
||||||
|
|
||||||
using json = nlohmann::json;
|
using json = nlohmann::json;
|
||||||
|
|
||||||
@ -56,3 +57,12 @@ std::string JSONUtils::CheckRequiredData(const json& data, const std::vector<std
|
|||||||
}
|
}
|
||||||
return check["error"].empty() ? "" : check.dump();
|
return check["error"].empty() ? "" : check.dump();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool JSONUtils::Validate(const std::optional<json>& data, HTTPReply& reply) {
|
||||||
|
if (!data) {
|
||||||
|
reply.status = eHTTPStatusCode::BAD_REQUEST;
|
||||||
|
reply.message = "{\"error\":\"Invalid JSON\"}";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
@ -3,6 +3,12 @@
|
|||||||
|
|
||||||
#include "json_fwd.hpp"
|
#include "json_fwd.hpp"
|
||||||
#include "PlayerContainer.h"
|
#include "PlayerContainer.h"
|
||||||
|
#include "eHTTPStatusCode.h"
|
||||||
|
|
||||||
|
struct HTTPReply {
|
||||||
|
eHTTPStatusCode status = eHTTPStatusCode::NOT_FOUND;
|
||||||
|
std::string message = "{\"error\":\"Not Found\"}";
|
||||||
|
};
|
||||||
|
|
||||||
void to_json(nlohmann::json& data, const PlayerData& playerData);
|
void to_json(nlohmann::json& data, const PlayerData& playerData);
|
||||||
void to_json(nlohmann::json& data, const PlayerContainer& playerContainer);
|
void to_json(nlohmann::json& data, const PlayerContainer& playerContainer);
|
||||||
@ -12,6 +18,7 @@ void to_json(nlohmann::json& data, const TeamData& teamData);
|
|||||||
namespace JSONUtils {
|
namespace JSONUtils {
|
||||||
// check required data for reqeust
|
// check required data for reqeust
|
||||||
std::string CheckRequiredData(const nlohmann::json& data, const std::vector<std::string>& requiredData);
|
std::string CheckRequiredData(const nlohmann::json& data, const std::vector<std::string>& requiredData);
|
||||||
|
bool Validate(const std::optional<nlohmann::json>& data, HTTPReply& reply);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // __JSONUTILS_H__
|
#endif // __JSONUTILS_H__
|
||||||
|
54
dCommon/dEnums/eCSRCommand.h
Normal file
54
dCommon/dEnums/eCSRCommand.h
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
#ifndef __ECSRCOMMAND__H__
|
||||||
|
#define __ECSRCOMMAND__H__
|
||||||
|
|
||||||
|
enum class eCSRCommand {
|
||||||
|
QUERY_SERVER_STATUS,
|
||||||
|
QUERY_CHARACTER_LOCATION,
|
||||||
|
QUERY_CHARACTER_ONLINE_STATUS,
|
||||||
|
INVENTORY_ADD_ITEM,
|
||||||
|
INVENTORY_DELETE_ITEM,
|
||||||
|
MODERATE_MUTE_ACCOUNT,
|
||||||
|
MODERATE_BAN_ACCOUNT,
|
||||||
|
MODERATE_EDUCATE_CHARACTER,
|
||||||
|
MODERATE_KICK_CHARACTER,
|
||||||
|
MODERATE_WARN_CHARACTER,
|
||||||
|
MODERATE_RENAME_CHARACTER,
|
||||||
|
MODERATE_DELETE_CHARACTER_FRIEND,
|
||||||
|
MODERATE_KILL_CHARACTER,
|
||||||
|
UPDATE_CHARACTER_HEALTH,
|
||||||
|
UPDATE_CHARACTER_ARMOR,
|
||||||
|
UPDATE_CHARACTER_IMAGINATION,
|
||||||
|
UPDATE_CHARACTER_MAX_HEALTH,
|
||||||
|
UPDATE_CHARACTER_MAX_ARMOR,
|
||||||
|
UPDATE_CHARACTER_MAX_IMAGINATION,
|
||||||
|
UPDATE_CHARACTER_CURRENCY,
|
||||||
|
UPDATE_CHARACTER_REPUTATION,
|
||||||
|
UPDATE_CHARACTER_LEGO_SCORE,
|
||||||
|
UPDATE_CHARACTER_EMOTES,
|
||||||
|
UPDATE_CHARACTER_ADD_ACHIEVEMENT,
|
||||||
|
UPDATE_CHARACTER_COMPLETE_ACHIEVEMENT,
|
||||||
|
UPDATE_CHARACTER_REMOVE_ACHIEVEMENT,
|
||||||
|
UPDATE_CHARACTER_POSITION_OFFLINE,
|
||||||
|
UPDATE_CHARACTER_INV_SLOT_AMOUNT,
|
||||||
|
UTILITY_SAVE_CHARACTER,
|
||||||
|
UTILITY_SEND_MAIL,
|
||||||
|
UTILITY_GIVE_ITEM_TO_ALL_PLAYERS_ONLINE,
|
||||||
|
METRICS_CONFIGURE,
|
||||||
|
DISABLE_ZONE,
|
||||||
|
INIT_DONATION_AMOUNT,
|
||||||
|
KILL_SERVERS_COUNTDOWN,
|
||||||
|
DISABLE_FAQ,
|
||||||
|
THROTTLEQUEUE,
|
||||||
|
GATEGM_ACCESS,
|
||||||
|
RECONNECT_CRISP,
|
||||||
|
MODERATE_KICK_ACCOUNT,
|
||||||
|
TOGGLE_CRISP_SERVER,
|
||||||
|
QUICK_DRAIN_SERVER,
|
||||||
|
QUICK_DRAIN_SERVER_RENEW,
|
||||||
|
REPLICATE_CHARACTER,
|
||||||
|
GET_SERVER_STATUS,
|
||||||
|
RELOAD_SERVER_INIS,
|
||||||
|
INVALID
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // !__ECSRCOMMAND__H__
|
Loading…
x
Reference in New Issue
Block a user