Merge pull request #6 from HotaruBlaze/MasterServer-Cleanup

[MasterServer] Bug Fixes and Cleanup
pull/655/head
Phoenix / Hotaru 10 months ago committed by GitHub
commit 9d67eb7500
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -30,12 +30,33 @@ inline void ptreeToServer(boost::property_tree::ptree &pt, MasterServer::SServer
server.SetMaxPlayers(pt.get<unsigned>("max_players"));
}
inline std::string escapeString(const std::string &str)
{
const std::string escapeChars = "\"\\/\b\f\n\r\t";
const std::string escapeSequences = "\"\\/\b\f\n\r\t";
std::stringstream ss;
for (char c : str)
{
size_t found = escapeChars.find(c);
if (found != std::string::npos)
{
ss << '\\' << escapeSequences[found];
}
else
{
ss << c;
}
}
return ss.str();
}
inline void queryToStringStream(stringstream &ss, string addr, MasterServer::SServer &query)
{
ss <<"\"" << addr << "\":{";
ss << "\"modname\": \"" << query.GetGameMode() << "\"" << ", ";
ss << "\"" << addr << "\":{";
ss << "\"modname\": \"" << escapeString(query.GetGameMode()) << "\", ";
ss << "\"passw\": " << (query.GetPassword() ? "true" : "false") << ", ";
ss << "\"hostname\": \"" << query.GetName() << "\"" << ", ";
ss << "\"hostname\": \"" << escapeString(query.GetName()) << "\", ";
ss << "\"query_port\": " << 0 << ", ";
ss << "\"last_update\": " << duration_cast<seconds>(steady_clock::now() - query.lastUpdate).count() << ", ";
ss << "\"players\": " << query.GetPlayers() << ", ";
@ -68,7 +89,7 @@ void RestServer::start()
ss << "}";
ResponseStr(*response, ss.str(), "application/json");
}
catch(out_of_range e)
catch(const out_of_range &e)
{
*response << response400;
}
@ -96,67 +117,6 @@ void RestServer::start()
}
};
//Add query for < 0.6 servers
httpServer.resource[ServersRegex]["POST"] = [this](auto response, auto request) {
try
{
ptree pt;
read_json(request->content, pt);
MasterServer::SServer server;
ptreeToServer(pt, server);
unsigned short port = pt.get<unsigned short>("port");
server.lastUpdate = steady_clock::now();
serverMap->insert({RakNet::SystemAddress(request->remote_endpoint_address.c_str(), port), server});
updatedCache = true;
*response << response201;
}
catch (exception& e)
{
cout << e.what() << endl;
*response << response400;
}
};
//Update query for < 0.6 servers
httpServer.resource[ServersRegex]["PUT"] = [this](auto response, auto request) {
auto addr = request->path_match[1].str();
auto port = (unsigned short)stoi(&(addr[addr.find(':')+1]));
auto query = serverMap->find(RakNet::SystemAddress(request->remote_endpoint_address.c_str(), port));
if (query == serverMap->end())
{
cout << request->remote_endpoint_address + ": Trying to update a non-existent server or without permissions." << endl;
*response << response400;
return;
}
if (request->content.size() != 0)
{
try
{
ptree pt;
read_json(request->content, pt);
ptreeToServer(pt, query->second);
updatedCache = true;
}
catch(exception &e)
{
cout << e.what() << endl;
*response << response400;
}
}
query->second.lastUpdate = steady_clock::now();
*response << response202;
};
httpServer.resource["/api/servers/info"]["GET"] = [this](auto response, auto /*request*/) {
stringstream ss;
ss << '{';

Loading…
Cancel
Save