internal BadWordFilter(string word, bool isExactMatch, BadWordFilterActions action, Dictionary <string, string> parameters) { this.word = word; this.isExactMatch = isExactMatch; this.action = action; this.parameters = parameters; string replacement = "XXX"; if (this.parameters.ContainsKey("replacement")) { replacement = this.parameters["replacement"]; } if (isExactMatch) { wordPattern = @"(^|\W)" + word + @"(\W|$)"; replacementPattern = "$1" + replacement + "$2"; regex = new Regex(wordPattern, RegexOptions.IgnoreCase | RegexOptions.Compiled); } else { wordPattern = word; replacementPattern = replacement; regex = new Regex(wordPattern, RegexOptions.IgnoreCase | RegexOptions.Compiled); } }
internal static void InitFilterBadWords() { badWordFilters.Clear(); SqlConnectionHelper sqlConnection = new SqlConnectionHelper(); sqlConnection.Command.CommandType = CommandType.StoredProcedure; // Read bad words try { sqlConnection.Command.CommandText = "hisp_Filter_BadWords_LoadAll"; System.Data.SqlClient.SqlDataReader sqlDataReader = sqlConnection.Command.ExecuteReader(CommandBehavior.CloseConnection); while (sqlDataReader.Read()) { try { string[] actions = sqlDataReader["FBW_Action"].ToString().Split(new char[] { ';' }); BadWordFilterActions badWordFilterActions = BadWordFilterActions.None; foreach (string action in actions) { badWordFilterActions |= (BadWordFilterActions)Enum.Parse(typeof(BadWordFilterActions), action); } Dictionary <string, string> parameterTable = new Dictionary <string, string>(); string rawParameters = sqlDataReader["FBW_Parameter"].ToString(); if (!string.IsNullOrEmpty(rawParameters)) { string[] parametersArray = rawParameters.Split(new char[] { ';' }); foreach (string parameterPair in parametersArray) { string[] parameterPairArray = parameterPair.Split(new char[] { '=' }); if (parameterPairArray.Length == 2) { parameterTable.Add(parameterPairArray[0], parameterPairArray[1]); } } } string word = sqlDataReader["FBW_Word"].ToString(); if (!string.IsNullOrEmpty(word)) { badWordFilters.Add(new BadWordFilter(word, bool.Parse(sqlDataReader["FBW_IsExactMatch"].ToString()), badWordFilterActions, parameterTable)); } } catch { } } sqlDataReader.Close(); } finally { sqlConnection.Close(); } }
private static string GetActionsString(BadWordFilterActions action) { string actionsString = ""; foreach (string actionName in Enum.GetNames(typeof(BadWordFilterActions))) { BadWordFilterActions currentAction = (BadWordFilterActions)Enum.Parse(typeof(BadWordFilterActions), actionName); if ((currentAction & action) == currentAction && currentAction != BadWordFilterActions.None) { actionsString += currentAction + ", "; } } return(actionsString.Substring(0, actionsString.Length - 2)); }
internal static void InformAdmin(BadWordFilterActions action, string value, string word, bool isExactMatch, Type type, FilterObjectTypes filterObjectType, Guid objectId, Guid userId) { try { string markedValue = Regex.Replace(value, @"(\w*" + word + @"\w*)(?=[^>]*?<)", "<u><font color=\"#AA0000\">$1</font></u>", RegexOptions.IgnoreCase); string exactValue = isExactMatch ? "Ja" : "Nein"; string userLink = FilterEngine.GetFilterEngineConfig().ObjectLinks["User"] + userId.ToString(); string objectLink = ""; switch (filterObjectType) { case FilterObjectTypes.DataObject: if (FilterEngine.GetFilterEngineConfig().ObjectLinks.ContainsKey(type.ToString())) { objectLink = FilterEngine.GetFilterEngineConfig().ObjectLinks[type.ToString()] + objectId.ToString(); } break; case FilterObjectTypes.Comment: if (FilterEngine.GetFilterEngineConfig().ObjectLinks.ContainsKey(type.ToString())) { objectLink = FilterEngine.GetFilterEngineConfig().ObjectLinks[type.ToString()] + objectId.ToString(); } break; case FilterObjectTypes.Profile: objectLink = FilterEngine.GetFilterEngineConfig().ObjectLinks["Profile"] + objectId.ToString(); break; } SmtpSection smtpSection = (SmtpSection)ConfigurationManager.GetSection("system.net/mailSettings/smtp"); MailMessage mailMessage = new MailMessage(); mailMessage.From = new MailAddress(smtpSection.From); foreach (KeyValuePair <string, string> adminEmail in FilterEngine.GetFilterEngineConfig().AdminEmailList) { mailMessage.To.Add(new MailAddress(adminEmail.Key, adminEmail.Value)); } mailMessage.Subject = "Bad Word Filter"; StringBuilder bodyString = new StringBuilder(1000); bodyString.Append("<table border=0>"); bodyString.Append(" <tr>"); bodyString.Append(" <td>Aktion(en):</td><td>" + GetActionsString(action) + "</td>"); bodyString.Append(" </tr><tr>"); bodyString.Append(" <td>Wort:</td><td>" + word + "<br/>"); bodyString.Append(" </tr><tr>"); bodyString.Append(" <td>Genau:</td><td>" + exactValue + "<br/>"); bodyString.Append(" </tr><tr>"); bodyString.Append(" <td valign=\"top\">Text:</td><td>" + markedValue + "<br/>"); bodyString.Append(" </tr><tr>"); bodyString.Append(" <td>Typ:</td><td>" + filterObjectType + "<br/>"); bodyString.Append(" </tr><tr>"); bodyString.Append(" <td>Object:</td><td><a href=\"" + objectLink + "\">" + objectId + "</a><br/>"); bodyString.Append(" </tr><tr>"); bodyString.Append(" <td>User:</td><td><a href=\"" + userLink + "\">" + userId + "</a><br/>"); bodyString.Append(" </tr>"); bodyString.Append("</table>"); mailMessage.Body = bodyString.ToString(); mailMessage.IsBodyHtml = true; SmtpClient smtpClient = new SmtpClient(); smtpClient.Send(mailMessage); } catch (Exception e) { new Exception("Error while sending bad word info mail", e); } }