Add working permban command
This commit is contained in:
parent
464ea2f82b
commit
8e72395ab9
@ -6,7 +6,8 @@ namespace Components
|
|||||||
|
|
||||||
bool Bans::IsBanned(Bans::Entry entry)
|
bool Bans::IsBanned(Bans::Entry entry)
|
||||||
{
|
{
|
||||||
auto list = Bans::LoadBans();
|
Bans::BanList list;
|
||||||
|
Bans::LoadBans(&list);
|
||||||
|
|
||||||
if (entry.first.Bits)
|
if (entry.first.Bits)
|
||||||
{
|
{
|
||||||
@ -35,7 +36,8 @@ namespace Components
|
|||||||
|
|
||||||
void Bans::InsertBan(Bans::Entry entry)
|
void Bans::InsertBan(Bans::Entry entry)
|
||||||
{
|
{
|
||||||
auto list = Bans::LoadBans();
|
Bans::BanList list;
|
||||||
|
Bans::LoadBans(&list);
|
||||||
|
|
||||||
Bans::AccessMutex.lock();
|
Bans::AccessMutex.lock();
|
||||||
|
|
||||||
@ -75,20 +77,93 @@ namespace Components
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Write bans
|
std::vector<std::string> idVector;
|
||||||
|
std::vector<std::string> ipVector;
|
||||||
|
|
||||||
|
for (auto& idEntry : list.IDList)
|
||||||
|
{
|
||||||
|
idVector.push_back(fmt::sprintf("%llX", idEntry.Bits));
|
||||||
|
}
|
||||||
|
|
||||||
|
for (auto& ipEntry : list.IPList)
|
||||||
|
{
|
||||||
|
ipVector.push_back(fmt::sprintf("%u.%u.%u.%u",
|
||||||
|
ipEntry.bytes[0] & 0xFF,
|
||||||
|
ipEntry.bytes[1] & 0xFF,
|
||||||
|
ipEntry.bytes[2] & 0xFF,
|
||||||
|
ipEntry.bytes[3] & 0xFF));
|
||||||
|
}
|
||||||
|
|
||||||
|
json11::Json bans = json11::Json::object
|
||||||
|
{
|
||||||
|
{ "ip", ipVector },
|
||||||
|
{ "id", idVector },
|
||||||
|
};
|
||||||
|
|
||||||
|
FileSystem::FileWriter ban("bans.json");
|
||||||
|
ban.Write(bans.dump());
|
||||||
|
|
||||||
Bans::AccessMutex.unlock();
|
Bans::AccessMutex.unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
Bans::BanList Bans::LoadBans()
|
void Bans::LoadBans(Bans::BanList* list)
|
||||||
{
|
{
|
||||||
Bans::BanList list;
|
|
||||||
Bans::AccessMutex.lock();
|
Bans::AccessMutex.lock();
|
||||||
|
|
||||||
// TODO: Read bans
|
// TODO: Read bans
|
||||||
|
FileSystem::File bans("bans.json");
|
||||||
|
|
||||||
|
if (bans.Exists())
|
||||||
|
{
|
||||||
|
std::string error;
|
||||||
|
json11::Json banData = json11::Json::parse(bans.GetBuffer(), error);
|
||||||
|
|
||||||
|
if (!error.empty())
|
||||||
|
{
|
||||||
|
Logger::Error("Failed to parse bans (bans.json): %s", error.data());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!list)
|
||||||
|
{
|
||||||
|
Bans::AccessMutex.unlock();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (banData.is_object())
|
||||||
|
{
|
||||||
|
auto idList = banData["id"];
|
||||||
|
auto ipList = banData["ip"];
|
||||||
|
|
||||||
|
if (idList.is_array())
|
||||||
|
{
|
||||||
|
for (auto &idEntry : idList.array_items())
|
||||||
|
{
|
||||||
|
if (idEntry.is_string())
|
||||||
|
{
|
||||||
|
SteamID id;
|
||||||
|
id.Bits = strtoull(idEntry.string_value().data(), nullptr, 16);
|
||||||
|
|
||||||
|
list->IDList.push_back(id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ipList.is_array())
|
||||||
|
{
|
||||||
|
for (auto &ipEntry : ipList.array_items())
|
||||||
|
{
|
||||||
|
if (ipEntry.is_string())
|
||||||
|
{
|
||||||
|
Network::Address addr(ipEntry.string_value());
|
||||||
|
|
||||||
|
list->IPList.push_back(addr.GetIP());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Bans::AccessMutex.unlock();
|
Bans::AccessMutex.unlock();
|
||||||
return list;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Bans::BanClientNum(int num, std::string reason)
|
void Bans::BanClientNum(int num, std::string reason)
|
||||||
@ -126,6 +201,13 @@ namespace Components
|
|||||||
|
|
||||||
Bans::BanClientNum(atoi(params[1]), reason);
|
Bans::BanClientNum(atoi(params[1]), reason);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Verify the list on startup
|
||||||
|
QuickPatch::Once([] ()
|
||||||
|
{
|
||||||
|
Bans::BanList list;
|
||||||
|
Bans::LoadBans(&list);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
Bans::~Bans()
|
Bans::~Bans()
|
||||||
|
@ -27,6 +27,6 @@ namespace Components
|
|||||||
|
|
||||||
static std::mutex AccessMutex;
|
static std::mutex AccessMutex;
|
||||||
|
|
||||||
static BanList LoadBans();
|
static void LoadBans(BanList* list);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user