Add functional ASN ban code
You need a compatible DB to make this work.
This commit is contained in:
parent
45ddc7562c
commit
c3caba43e5
14
bin/config_sample/ipbans.json
Normal file
14
bin/config_sample/ipbans.json
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"ip_range": [
|
||||||
|
"192.0.2.0/24",
|
||||||
|
"198.51.100.0/24",
|
||||||
|
"192.88.99.0/24",
|
||||||
|
"203.0.113.0/24",
|
||||||
|
"2001:0000:/32",
|
||||||
|
"2001:db8::/32",
|
||||||
|
"2002::/16"
|
||||||
|
],
|
||||||
|
"asn": [
|
||||||
|
"0"
|
||||||
|
]
|
||||||
|
}
|
@ -16,8 +16,8 @@
|
|||||||
// along with this program. If not, see <https://www.gnu.org/licenses/>. //
|
// along with this program. If not, see <https://www.gnu.org/licenses/>. //
|
||||||
//////////////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////////////
|
||||||
#include "include/config_manager.h"
|
#include "include/config_manager.h"
|
||||||
|
#include <QSqlDatabase>
|
||||||
#include <include/config_manager.h>
|
#include <QSqlQuery>
|
||||||
|
|
||||||
QSettings *ConfigManager::m_settings = new QSettings("config/config.ini", QSettings::IniFormat);
|
QSettings *ConfigManager::m_settings = new QSettings("config/config.ini", QSettings::IniFormat);
|
||||||
QSettings *ConfigManager::m_discord = new QSettings("config/discord.ini", QSettings::IniFormat);
|
QSettings *ConfigManager::m_discord = new QSettings("config/discord.ini", QSettings::IniFormat);
|
||||||
@ -43,7 +43,7 @@ bool ConfigManager::verifyServerConfig()
|
|||||||
// Verify config files
|
// Verify config files
|
||||||
QStringList l_config_files{"config/config.ini", "config/areas.ini", "config/backgrounds.txt", "config/characters.txt", "config/music.json",
|
QStringList l_config_files{"config/config.ini", "config/areas.ini", "config/backgrounds.txt", "config/characters.txt", "config/music.json",
|
||||||
"config/discord.ini", "config/text/8ball.txt", "config/text/gimp.txt", "config/text/praise.txt",
|
"config/discord.ini", "config/text/8ball.txt", "config/text/gimp.txt", "config/text/praise.txt",
|
||||||
"config/text/reprimands.txt", "config/text/commandhelp.json", "config/text/cdns.txt"};
|
"config/text/reprimands.txt", "config/text/commandhelp.json", "config/text/cdns.txt", "config/ipbans.json"};
|
||||||
for (const QString &l_file : l_config_files) {
|
for (const QString &l_file : l_config_files) {
|
||||||
if (!fileExists(QFileInfo(l_file))) {
|
if (!fileExists(QFileInfo(l_file))) {
|
||||||
qCritical() << l_file + " does not exist!";
|
qCritical() << l_file + " does not exist!";
|
||||||
@ -252,14 +252,36 @@ QStringList ConfigManager::rawAreaNames()
|
|||||||
|
|
||||||
QStringList ConfigManager::iprangeBans()
|
QStringList ConfigManager::iprangeBans()
|
||||||
{
|
{
|
||||||
QStringList l_iprange_bans;
|
QFile l_json_file("config/ipbans.json");
|
||||||
QFile l_file("config/iprange_bans.txt");
|
l_json_file.open(QIODevice::ReadOnly | QIODevice::Text);
|
||||||
l_file.open(QIODevice::ReadOnly | QIODevice::Text);
|
|
||||||
while (!(l_file.atEnd())) {
|
QJsonParseError l_error;
|
||||||
l_iprange_bans.append(l_file.readLine().trimmed());
|
QJsonDocument l_ip_bans = QJsonDocument::fromJson(l_json_file.readAll(), &l_error);
|
||||||
|
if (l_error.error != QJsonParseError::NoError) {
|
||||||
|
qDebug() << "Unable to parse JSON file. Error:" << l_error.errorString();
|
||||||
|
return {};
|
||||||
}
|
}
|
||||||
l_file.close();
|
|
||||||
return l_iprange_bans;
|
QJsonObject l_json_obj = l_ip_bans.object();
|
||||||
|
|
||||||
|
QStringList l_range_bans;
|
||||||
|
l_range_bans.append(l_json_obj["ip_range"].toVariant().toStringList());
|
||||||
|
|
||||||
|
if (QFile::exists("storage/asn.sqlite3")) {
|
||||||
|
QSqlDatabase asn_db = QSqlDatabase::addDatabase("QSQLITE", "ASN");
|
||||||
|
asn_db.setDatabaseName("storage/asn.sqlite3");
|
||||||
|
asn_db.open();
|
||||||
|
|
||||||
|
// This is a dumb hack. Idk how else I can do this, but who gives a shit?
|
||||||
|
QSqlQuery query("SELECT ip FROM maxmind WHERE asn in (" + l_json_obj["asn"].toVariant().toStringList().join(",") + ")", asn_db);
|
||||||
|
query.exec();
|
||||||
|
while (query.next()) {
|
||||||
|
l_range_bans.append(query.value(0).toString());
|
||||||
|
}
|
||||||
|
asn_db.close();
|
||||||
|
}
|
||||||
|
l_range_bans.removeDuplicates();
|
||||||
|
return l_range_bans;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ConfigManager::reloadSettings()
|
void ConfigManager::reloadSettings()
|
||||||
|
Loading…
Reference in New Issue
Block a user