00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include <algorithm>
00022
00023 #include "utils/stringfilter.h"
00024
00025 #include "defines.h"
00026 #include "common/configuration.hpp"
00027 #include "utils/logger.h"
00028
00029 namespace utils
00030 {
00031
00032 StringFilter::StringFilter():
00033 mInitialized(false)
00034 {
00035 mSlangs.clear();
00036 loadSlangFilterList();
00037 }
00038
00039 StringFilter::~StringFilter()
00040 {
00041 writeSlangFilterList();
00042 mSlangs.clear();
00043 }
00044
00045 bool StringFilter::loadSlangFilterList()
00046 {
00047 mInitialized = false;
00048
00049 std::string slangsList = Configuration::getValue("SlangsList", "");
00050 if (slangsList != "") {
00051 std::istringstream iss(slangsList);
00052 std::string tmp;
00053 while (getline(iss, tmp, ',')) {
00054 mSlangs.push_back(tmp);
00055 }
00056 mInitialized = true;
00057 }
00058
00059 return mInitialized;
00060 }
00061
00062 void StringFilter::writeSlangFilterList()
00063 {
00064
00065 std::string slangsList = "";
00066 for (SlangIterator i = mSlangs.begin(); i != mSlangs.end(); )
00067 {
00068 slangsList += *i;
00069 ++i;
00070 if (i != mSlangs.end()) slangsList += ",";
00071 }
00072
00073 }
00074
00075 bool StringFilter::filterContent(const std::string& text)
00076 {
00077 if (!mInitialized) {
00078 LOG_DEBUG("Slangs List is not initialized.");
00079 return true;
00080 }
00081
00082 bool isContentClean = true;
00083 std::string upperCaseText = text;
00084
00085 std::transform(text.begin(), text.end(), upperCaseText.begin(),
00086 (int(*)(int))std::toupper);
00087
00088 for (SlangIterator i = mSlangs.begin(); i != mSlangs.end(); ++i)
00089 {
00090
00091 std::string upperCaseSlang = *i;
00092 std::transform(upperCaseSlang.begin(), upperCaseSlang.end(),
00093 upperCaseSlang.begin(), (int(*)(int))std::toupper);
00094
00095 if (upperCaseText.compare(upperCaseSlang)) {
00096 isContentClean = false;
00097 break;
00098 }
00099 }
00100
00101 return isContentClean;
00102 }
00103
00104 bool StringFilter::isEmailValid(const std::string& email)
00105 {
00106 unsigned int min = Configuration::getValue("account_minEmailLength", 7);
00107 unsigned int max = Configuration::getValue("account_maxEmailLength", 128);
00108
00109
00110 if (email.length() < min || email.length() > max)
00111 {
00112 return false;
00113 }
00114
00115 std::string::size_type atpos = email.find_first_of('@');
00116
00117
00118 return (atpos != std::string::npos) &&
00119 (email.find_first_of('.', atpos) != std::string::npos) &&
00120 (email.find_first_of(' ') == std::string::npos);
00121 }
00122
00123 bool StringFilter::findDoubleQuotes(const std::string& text)
00124 {
00125 return (text.find('"', 0) != std::string::npos);
00126 }
00127
00128 }