/// <inheritdoc /> public async Task <IPipelineProcess <Post> > Process(IPipelineProcess <Post> input, IMvcForumContext context) { _bannedWordService.RefreshContext(context); _localizationService.RefreshContext(context); _spamService.RefreshContext(context); try { // Get the all the words I need var allWords = await context.BannedWord.ToListAsync(); // Do the stop words first foreach (var stopWord in allWords.Where(x => x.IsStopWord == true).Select(x => x.Word).ToArray()) { if (input.EntityToProcess.PostContent.IndexOf(stopWord, StringComparison.CurrentCultureIgnoreCase) >= 0) { input.AddError(_localizationService.GetResourceString("StopWord.Error")); return(input); } } // Check Akismet if (_spamService.IsSpam(input.EntityToProcess)) { input.EntityToProcess.Pending = true; input.ExtendedData.Add(Constants.ExtendedDataKeys.Moderate, true); } // Sanitise the banned words var bannedWords = allWords.Where(x => x.IsStopWord != true).Select(x => x.Word).ToArray(); input.EntityToProcess.PostContent = _bannedWordService.SanitiseBannedWords(input.EntityToProcess.PostContent, bannedWords); } catch (Exception ex) { input.AddError(ex.Message); _loggingService.Error(ex); } return(input); }
/// <inheritdoc /> public async Task <IPipelineProcess <Group> > Process(IPipelineProcess <Group> input, IMvcForumContext context) { _bannedWordService.RefreshContext(context); _localizationService.RefreshContext(context); _spamService.RefreshContext(context); try { // Get the all the words I need var allWords = await context.BannedWord.ToListAsync(); // Do the stop words first foreach (var stopWord in allWords.Where(x => x.IsStopWord == true).Select(x => x.Word).ToArray()) { if (input.EntityToProcess.Name.IndexOf(stopWord, StringComparison.CurrentCultureIgnoreCase) >= 0 || input.EntityToProcess.Description.IndexOf(stopWord, StringComparison.CurrentCultureIgnoreCase) >= 0) { input.AddError(_localizationService.GetResourceString("StopWord.Error")); return(input); } } // Sanitise the banned words var bannedWords = allWords.Where(x => x.IsStopWord != true).Select(x => x.Word).ToArray(); input.EntityToProcess.Name = _bannedWordService.SanitiseBannedWords(input.EntityToProcess.Name, bannedWords); input.EntityToProcess.Description = _bannedWordService.SanitiseBannedWords(input.EntityToProcess.Description, bannedWords); } catch (System.Exception ex) { input.AddError(ex.Message); _loggingService.Error(ex); } return(input); }
/// <inheritdoc /> public async Task <IPipelineProcess <Topic> > Process(IPipelineProcess <Topic> input, IMvcForumContext context) { _bannedWordService.RefreshContext(context); _localizationService.RefreshContext(context); _spamService.RefreshContext(context); try { // Get the all the words I need var allWords = await context.BannedWord.ToListAsync(); var hasPollAnswers = input.ExtendedData.ContainsKey(Constants.ExtendedDataKeys.PollNewAnswers); var newPollAnswers = new List <PollAnswer>(); if (hasPollAnswers) { newPollAnswers = input.ExtendedData[Constants.ExtendedDataKeys.PollNewAnswers] as List <PollAnswer>; } // Do the stop words first foreach (var stopWord in allWords.Where(x => x.IsStopWord == true).Select(x => x.Word).ToArray()) { // Check name if (input.EntityToProcess.Name.IndexOf(stopWord, StringComparison.CurrentCultureIgnoreCase) >= 0) { input.AddError(_localizationService.GetResourceString("StopWord.Error")); return(input); } // Check poll answers on entity or ones we are waiting to update if (input.EntityToProcess.Poll != null && input.EntityToProcess.Poll.PollAnswers.Any()) { foreach (var pollAnswer in input.EntityToProcess.Poll.PollAnswers) { if (input.EntityToProcess.Name.IndexOf(pollAnswer.Answer, StringComparison.CurrentCultureIgnoreCase) >= 0) { input.AddError(_localizationService.GetResourceString("StopWord.Error")); return(input); } } } if (hasPollAnswers) { if (newPollAnswers != null) { foreach (var pollAnswer in newPollAnswers) { if (input.EntityToProcess.Name.IndexOf(pollAnswer.Answer, StringComparison.CurrentCultureIgnoreCase) >= 0) { input.AddError(_localizationService.GetResourceString("StopWord.Error")); return(input); } } } } // Check tags if (input.EntityToProcess.Tags != null && input.EntityToProcess.Tags.Any()) { foreach (var topicTag in input.EntityToProcess.Tags) { if (input.EntityToProcess.Name.IndexOf(topicTag.Tag, StringComparison.CurrentCultureIgnoreCase) >= 0) { input.AddError(_localizationService.GetResourceString("StopWord.Error")); return(input); } } } } // Check Akismet if (_spamService.IsSpam(input.EntityToProcess)) { input.EntityToProcess.Pending = true; input.ExtendedData.Add(Constants.ExtendedDataKeys.Moderate, true); } // Sanitise the banned words var bannedWords = allWords.Where(x => x.IsStopWord != true).Select(x => x.Word).ToArray(); // Topic name input.EntityToProcess.Name = _bannedWordService.SanitiseBannedWords(input.EntityToProcess.Name, bannedWords); // Sanitise Poll if (input.EntityToProcess.Poll != null && input.EntityToProcess.Poll.PollAnswers.Any()) { foreach (var pollAnswer in input.EntityToProcess.Poll.PollAnswers) { pollAnswer.Answer = _bannedWordService.SanitiseBannedWords(pollAnswer.Answer, bannedWords); } } // Santise new poll answers if (hasPollAnswers) { if (newPollAnswers != null) { foreach (var pollAnswer in newPollAnswers) { pollAnswer.Answer = _bannedWordService.SanitiseBannedWords(pollAnswer.Answer, bannedWords); } // Now re-assign them input.ExtendedData[Constants.ExtendedDataKeys.PollNewAnswers] = newPollAnswers; } } // Sanitise Tags if (input.EntityToProcess.Tags != null && input.EntityToProcess.Tags.Any()) { foreach (var topicTag in input.EntityToProcess.Tags) { topicTag.Tag = _bannedWordService.SanitiseBannedWords(topicTag.Tag, bannedWords); } } } catch (Exception ex) { input.AddError(ex.Message); _loggingService.Error(ex); } return(input); }
/// <inheritdoc /> public async Task <IPipelineProcess <Topic> > Process(IPipelineProcess <Topic> input, IMvcForumContext context) { _bannedWordService.RefreshContext(context); _localizationService.RefreshContext(context); _spamService.RefreshContext(context); try { // Get the all the words I need var allWords = await context.BannedWord.ToListAsync(); var hasPollAnswers = input.ExtendedData.ContainsKey(Constants.ExtendedDataKeys.PollNewAnswers); var newPollAnswers = new List <PollAnswer>(); if (hasPollAnswers) { newPollAnswers = input.ExtendedData[Constants.ExtendedDataKeys.PollNewAnswers] as List <PollAnswer>; } // Do the stop words first foreach (var stopWord in allWords.Where(x => x.IsStopWord == true).Select(x => x.Word).ToArray()) { // Check name if (input.EntityToProcess.Name.IndexOf(stopWord, StringComparison.CurrentCultureIgnoreCase) >= 0) { input.AddError(_localizationService.GetResourceString("StopWord.Error")); return(input); } // Check poll answers on entity or ones we are waiting to update if (input.EntityToProcess.Poll != null && input.EntityToProcess.Poll.PollAnswers.Any()) { foreach (var pollAnswer in input.EntityToProcess.Poll.PollAnswers) { if (pollAnswer.Answer.IndexOf(stopWord, StringComparison.CurrentCultureIgnoreCase) >= 0) { input.AddError(_localizationService.GetResourceString("StopWord.Error")); return(input); } } } if (hasPollAnswers) { if (newPollAnswers != null) { foreach (var pollAnswer in newPollAnswers) { if (pollAnswer.Answer.IndexOf(stopWord, StringComparison.CurrentCultureIgnoreCase) >= 0) { input.AddError(_localizationService.GetResourceString("StopWord.Error")); return(input); } } } } // Check tags if (input.EntityToProcess.Tags != null && input.EntityToProcess.Tags.Any()) { foreach (var topicTag in input.EntityToProcess.Tags) { if (topicTag.Tag.IndexOf(stopWord, StringComparison.CurrentCultureIgnoreCase) >= 0) { input.AddError(_localizationService.GetResourceString("StopWord.Error")); return(input); } } } } // Check Akismet if (_spamService.IsSpam(input.EntityToProcess)) { input.EntityToProcess.Pending = true; input.ExtendedData.Add(Constants.ExtendedDataKeys.Moderate, true); } // Sanitise the banned words var bannedWords = allWords.Where(x => x.IsStopWord != true).Select(x => x.Word).ToArray(); // Topic name input.EntityToProcess.Name = _bannedWordService.SanitiseBannedWords(input.EntityToProcess.Name, bannedWords); // Flood Check - Only if we are not editing // Are we in an edit mode var isEdit = input.ExtendedData[Constants.ExtendedDataKeys.IsEdit] as bool? == true; if (!isEdit) { // Get the Current user from ExtendedData var username = input.ExtendedData[Constants.ExtendedDataKeys.Username] as string; var loggedOnUser = await context.MembershipUser.FirstOrDefaultAsync(x => x.UserName == username); if (loggedOnUser != null) { if (!_topicService.PassedTopicFloodTest(input.EntityToProcess.Name, loggedOnUser)) { input.AddError(_localizationService.GetResourceString("Spam.FloodTestFailed")); return(input); } } else { input.AddError("Unable to get user from username"); return(input); } } // Sanitise Poll if (input.EntityToProcess.Poll != null && input.EntityToProcess.Poll.PollAnswers.Any()) { foreach (var pollAnswer in input.EntityToProcess.Poll.PollAnswers) { pollAnswer.Answer = _bannedWordService.SanitiseBannedWords(pollAnswer.Answer, bannedWords); } } // Santise new poll answers if (hasPollAnswers) { if (newPollAnswers != null) { foreach (var pollAnswer in newPollAnswers) { pollAnswer.Answer = _bannedWordService.SanitiseBannedWords(pollAnswer.Answer, bannedWords); } // Now re-assign them input.ExtendedData[Constants.ExtendedDataKeys.PollNewAnswers] = newPollAnswers; } } // Sanitise Tags if (input.EntityToProcess.Tags != null && input.EntityToProcess.Tags.Any()) { foreach (var topicTag in input.EntityToProcess.Tags) { topicTag.Tag = _bannedWordService.SanitiseBannedWords(topicTag.Tag, bannedWords); } } } catch (Exception ex) { input.AddError(ex.Message); _loggingService.Error(ex); } return(input); }