From ea5bf107f4c386191ba1d0030538c2c39ef87513 Mon Sep 17 00:00:00 2001 From: doitux Date: Fri, 31 Jul 2009 19:01:33 +0000 Subject: [PATCH] chatcleaner: inital url spam check. configurable url string list and exceptions list for urls like pokerth.net ;-) --- chatcleaner.pro | 6 ++++-- src/chatcleaner/cleanerconfig.cpp | 18 +++++++++++++++--- src/chatcleaner/messagefilter.cpp | 26 +++++++++++++++++++++++++- src/chatcleaner/messagefilter.h | 2 ++ src/chatcleaner/urlcheck.cpp | 29 +++++++++++++++++++++++++++++ src/chatcleaner/urlcheck.h | 21 +++++++++++++++++++++ 6 files changed, 96 insertions(+), 6 deletions(-) create mode 100644 src/chatcleaner/urlcheck.cpp create mode 100644 src/chatcleaner/urlcheck.h diff --git a/chatcleaner.pro b/chatcleaner.pro index d002bc6f..7fec8784 100644 --- a/chatcleaner.pro +++ b/chatcleaner.pro @@ -28,7 +28,8 @@ SOURCES += chatcleaner.cpp \ tinyxmlerror.cpp \ tinyxmlparser.cpp \ capsfloodcheck.cpp \ - letterrepeatingcheck.cpp + letterrepeatingcheck.cpp \ + urlcheck.cpp HEADERS += cleanerserver.h \ messagefilter.h \ badwordcheck.h \ @@ -37,4 +38,5 @@ HEADERS += cleanerserver.h \ tinyxml.h \ tinystr.h \ capsfloodcheck.h \ - letterrepeatingcheck.h + letterrepeatingcheck.h \ + urlcheck.h diff --git a/src/chatcleaner/cleanerconfig.cpp b/src/chatcleaner/cleanerconfig.cpp index 440b844a..c7cb906e 100644 --- a/src/chatcleaner/cleanerconfig.cpp +++ b/src/chatcleaner/cleanerconfig.cpp @@ -43,7 +43,7 @@ using namespace std; CleanerConfig::CleanerConfig() { // !!!! Revisionsnummer der Configdefaults !!!!! - configRev = 4; + configRev = 5; // Pfad und Dateinamen setzen #ifdef _WIN32 @@ -120,7 +120,6 @@ CleanerConfig::CleanerConfig() configList.push_back(ConfigInfo("LetterRepeatingNumberToTrigger", CONFIG_TYPE_INT, "10")); list badWordsList; - badWordsList.push_back("arsch"); badWordsList.push_back("asshole"); badWordsList.push_back("bastard"); @@ -155,9 +154,22 @@ CleanerConfig::CleanerConfig() badWordsList.push_back("slut"); badWordsList.push_back("suck"); badWordsList.push_back("whore"); - configList.push_back(ConfigInfo("BadWordsList", CONFIG_TYPE_STRING_LIST, "BadWords", badWordsList)); + list urlStringsList; + urlStringsList.push_back("http://"); + urlStringsList.push_back(".com"); + urlStringsList.push_back(".net"); + urlStringsList.push_back(".org"); + urlStringsList.push_back(".de"); + configList.push_back(ConfigInfo("UrlStringsList", CONFIG_TYPE_STRING_LIST, "UrlStrings", urlStringsList)); + + list urlExceptionStringsList; + urlExceptionStringsList.push_back("http://www.esl."); + urlExceptionStringsList.push_back("http://www.pokerth.net"); + urlExceptionStringsList.push_back("pokerth.net"); + configList.push_back(ConfigInfo("UrlExceptionStringsList", CONFIG_TYPE_STRING_LIST, "UrlExceptionStrings", urlExceptionStringsList)); + //fill tempList firstTime configBufferList = configList; diff --git a/src/chatcleaner/messagefilter.cpp b/src/chatcleaner/messagefilter.cpp index 263dff58..eb6b390e 100644 --- a/src/chatcleaner/messagefilter.cpp +++ b/src/chatcleaner/messagefilter.cpp @@ -6,6 +6,7 @@ #include "cleanerconfig.h" #include "capsfloodcheck.h" #include "letterrepeatingcheck.h" +#include "urlcheck.h" enum ActionType { NOTHING, @@ -17,7 +18,8 @@ enum OffenceType { BAD_WORD, TEXT_FLOOD_LINES, CAPS_FLOOD, - LETTER_REPEATING + LETTER_REPEATING, + URL }; MessageFilter::MessageFilter(CleanerConfig *c): config(c) @@ -26,6 +28,7 @@ MessageFilter::MessageFilter(CleanerConfig *c): config(c) myTextFloodCheck = new TextFloodCheck; myCapsFloodCheck = new CapsFloodCheck; myLetterRepeatingCheck = new LetterRepeatingCheck; + myUrlCheck = new UrlCheck; } QString MessageFilter::check(unsigned playerId, QString nick, QString msg) @@ -38,6 +41,7 @@ QString MessageFilter::check(unsigned playerId, QString nick, QString msg) if(myBadWordCheck->run(msg)) offence = BAD_WORD; if(myCapsFloodCheck->run(msg)) offence = CAPS_FLOOD; if(myLetterRepeatingCheck->run(msg)) offence = LETTER_REPEATING; + if(myUrlCheck->run(msg)) offence = URL; if(myTextFloodCheck->run(playerId)) offence = TEXT_FLOOD_LINES; if(offence){ @@ -90,6 +94,10 @@ QString MessageFilter::check(unsigned playerId, QString nick, QString msg) returnMessage = QString (" %1: Warning: You've triggered letter repeating protection, stop repeating!\n").arg(nick); } break; + case URL: { + returnMessage = QString (" %1: Warning: You've triggered url spam protection, stop posting urls!\n").arg(nick); + } + break; default:; } } @@ -115,6 +123,22 @@ void MessageFilter::refreshConfig() { } myBadWordCheck->setBadWords(bwList); + std::list urlStringsList = config->readConfigStringList("UrlStringsList"); + std::list::iterator it2; + QStringList urlList; + for(it2= urlStringsList.begin(); it2 != urlStringsList.end(); it2++) { + urlList << QString::fromUtf8(it2->c_str()); + } + myUrlCheck->setUrlStrings(urlList); + + std::list urlExceptionStringsList = config->readConfigStringList("UrlExceptionStringsList"); + std::list::iterator it3; + QStringList urlExceptionList; + for(it3= urlExceptionStringsList.begin(); it3 != urlExceptionStringsList.end(); it3++) { + urlExceptionList << QString::fromUtf8(it3->c_str()); + } + myUrlCheck->setUrlExceptionStrings(urlExceptionList); + myTextFloodCheck->setTextFloodLevelToTrigger(config->readConfigInt("TextFloodLevelToTrigger")); myCapsFloodCheck->setCapsNumberToTrigger(config->readConfigInt("CapsFloodCapsNumberToTrigger")); myLetterRepeatingCheck->setLetterNumberToTrigger(config->readConfigInt("LetterRepeatingNumberToTrigger")); diff --git a/src/chatcleaner/messagefilter.h b/src/chatcleaner/messagefilter.h index a04c5a17..c52f615b 100644 --- a/src/chatcleaner/messagefilter.h +++ b/src/chatcleaner/messagefilter.h @@ -9,6 +9,7 @@ class TextFloodCheck; class CleanerConfig; class CapsFloodCheck; class LetterRepeatingCheck; +class UrlCheck; class MessageFilter: public QObject { Q_OBJECT @@ -23,6 +24,7 @@ private: TextFloodCheck *myTextFloodCheck; CapsFloodCheck *myCapsFloodCheck; LetterRepeatingCheck *myLetterRepeatingCheck; + UrlCheck *myUrlCheck; struct ClientWarnInfos { QString nick; diff --git a/src/chatcleaner/urlcheck.cpp b/src/chatcleaner/urlcheck.cpp new file mode 100644 index 00000000..5021c56f --- /dev/null +++ b/src/chatcleaner/urlcheck.cpp @@ -0,0 +1,29 @@ +#include "urlcheck.h" + +#include + +UrlCheck::UrlCheck() +{ +} + +bool UrlCheck::run(QString msg) +{ + msg = msg.toLower(); + + QStringListIterator it1(urlStrings); + + while (it1.hasNext()) { + if(msg.contains(it1.next())) { + QStringListIterator it2(urlExceptionStrings); + bool exception = false; + while (it2.hasNext()) { + if(msg.contains(it2.next())) { + exception = true; + break; + } + } + if(!exception) { return true; } + } + } + return false; +} diff --git a/src/chatcleaner/urlcheck.h b/src/chatcleaner/urlcheck.h new file mode 100644 index 00000000..10ec2ccc --- /dev/null +++ b/src/chatcleaner/urlcheck.h @@ -0,0 +1,21 @@ +#ifndef URLCHECK_H +#define URLCHECK_H + +#include + +class UrlCheck: public QObject { +Q_OBJECT +public: + UrlCheck(); + + void setUrlStrings(QStringList us) { urlStrings = us; } + void setUrlExceptionStrings(QStringList ues) { urlExceptionStrings = ues; } + bool run(QString); + +private: + + QStringList urlStrings; + QStringList urlExceptionStrings; +}; + +#endif // URLCHECK_H