public Punishment GetPunishment(ulong userId, SpamProbability spamProbability) { var takeFromTime = DateTime.Now.AddHours(-12); var warnsCount = this._punishmentsCachingService.GetUserWarnsCount(userId, takeFromTime); var punishmentOption = spamProbability switch { SpamProbability.None => PunishmentOption.Nothing, SpamProbability.Low => PunishmentOption.Nothing, SpamProbability.Medium when warnsCount == 0 => PunishmentOption.Nothing, SpamProbability.Medium when warnsCount <= 2 => PunishmentOption.Warn, SpamProbability.Sure when warnsCount == 0 => PunishmentOption.Warn, SpamProbability.Medium when warnsCount > 2 => PunishmentOption.Mute, SpamProbability.Sure when warnsCount >= 1 => PunishmentOption.Mute, _ => throw new NotImplementedException() }; if (punishmentOption == PunishmentOption.Mute) { var mutesCount = this._punishmentsCachingService.GetUserMutesCount(userId, takeFromTime); return(new Punishment(PunishmentOption.Mute, DateTime.Now, this.GetTimeForMute(mutesCount))); } return(new Punishment(punishmentOption, DateTime.Now)); }
public void CapslockDetector_ShouldDetectSpam(SpamProbability exceptedSpamProbability, string m1, string m2, string m3, string m4, string m5, string m6) // not using params to force 6 messages { var spamDetectorsTestsService = new SpamDetectorsTestsService <CapslockDetectorStrategy>(); var spamProbability = spamDetectorsTestsService.GetSpamProbability(isUserSafe: false, m1, m2, m3, m4, m5, m6); // Assert Assert.That(spamProbability, Is.EqualTo(exceptedSpamProbability)); }
public void FloodDetector_ShouldDetectSpam(SpamProbability expectedSpamProbability, bool isUserSafe, params int[] secondsBefore) { var spamDetectorsTestsService = new SpamDetectorsTestsService <FloodDetectorStrategy>(); var smallMessages = secondsBefore.Select(x => new SmallMessage("test", AntiSpamTestsService.DEFAULT_TEST_USER_ID, DateTime.UtcNow.AddSeconds(-x), GetMessagesQuery.GET_ALL_SERVERS)); var spamProbability = spamDetectorsTestsService.GetSpamProbability(isUserSafe, smallMessages.ToArray()); // Assert Assert.That(spamProbability, Is.EqualTo(expectedSpamProbability)); }
private async Task HandlePossibleSpam(Contexts contexts, SpamProbability spamProbability, DateTime messageSentAt) { var punishment = this._spamPunishmentStrategy.GetPunishment(contexts.User.Id, spamProbability); await this._antiSpamService.SetPunishment(contexts, punishment); if (punishment.PunishmentOption != PunishmentOption.Nothing) { await this._punishmentsCachingService.AddUserPunishment(contexts.User.Id, punishment); this.UpdateLastPunishmentDate(contexts.User.Id, messageSentAt); Log.Information("{PunishmentOption} for user: {user}", punishment.PunishmentOption, contexts.User.Name); } }
public void SpamPunishmentStrategy_ShouldGiveWarn(int userWarnsCount, SpamProbability spamProbability) { // Arrange var punishmentsCachingService = new Mock <IPunishmentsCachingService>(); punishmentsCachingService .Setup(x => x.GetUserWarnsCount(AntiSpamTestsService.DEFAULT_TEST_USER_ID, It.IsAny <DateTime>())) .Returns(userWarnsCount); var punishmentStrategy = new SpamPunishmentStrategy(punishmentsCachingService.Object); // Act var punishment = punishmentStrategy.GetPunishment(AntiSpamTestsService.DEFAULT_TEST_USER_ID, spamProbability); // Assert Assert.That(punishment.PunishmentOption, Is.EqualTo(PunishmentOption.Warn)); }
public void OverallSpamDetectorStrategy_ShouldDetectSpam(string messageContent1, string messageContent2, string messageContent3, string messageContent4, bool isUserSafe, SpamProbability exceptedSpamProbability) { // Arrange var userSafetyChecker = new Mock <IUserSafetyChecker>(); userSafetyChecker .Setup(x => x.IsUserSafe(AntiSpamTestsService.DEFAULT_TEST_USER_ID, GetMessagesQuery.GET_ALL_SERVERS)) .Returns(isUserSafe); var contexts = this._antiSpamTestsService.GetDefaultContexts(); var serverMessages = new ServerMessagesCacheService(); serverMessages.OverwriteMessages(new List <SmallMessage> { new SmallMessage(messageContent1, AntiSpamTestsService.DEFAULT_TEST_USER_ID, DateTime.UtcNow.AddSeconds(-20), GetMessagesQuery.GET_ALL_SERVERS), new SmallMessage(messageContent2, AntiSpamTestsService.DEFAULT_TEST_USER_ID, DateTime.UtcNow.AddSeconds(-16), GetMessagesQuery.GET_ALL_SERVERS), new SmallMessage(messageContent3, AntiSpamTestsService.DEFAULT_TEST_USER_ID, DateTime.UtcNow.AddSeconds(-15), GetMessagesQuery.GET_ALL_SERVERS), new SmallMessage(messageContent4, AntiSpamTestsService.DEFAULT_TEST_USER_ID, DateTime.UtcNow.AddSeconds(-10), GetMessagesQuery.GET_ALL_SERVERS) }); var overallSpamDetector = OverallSpamDetectorStrategy.GetStrategyWithDefaultDetectors(serverMessages, userSafetyChecker.Object, this._configurationService); // Act var overallSpamProbability = overallSpamDetector.GetOverallSpamProbability(contexts); // Assert Assert.That(overallSpamProbability, Is.EqualTo(exceptedSpamProbability)); }
public void DuplicatesDetector_ShouldDetectSpam(string messageContent1, string messageContent2, string messageContent3, string messageContent4, bool isUserSafe, SpamProbability exceptedSpamProbability) { var spamDetectorsTestsService = new SpamDetectorsTestsService <DuplicatedMessagesDetectorStrategy>(); var spamProbability = spamDetectorsTestsService.GetSpamProbability(isUserSafe, messageContent1, messageContent2, messageContent3, messageContent4); // Assert Assert.That(spamProbability, Is.EqualTo(exceptedSpamProbability)); }
public void LinksDetector_ShouldDetectSpam(string messageContent, bool isUserSafe, SpamProbability exceptedSpamProbability) { var spamDetectorsTestsService = new SpamDetectorsTestsService <LinksDetectorStrategy>(); var spamProbability = spamDetectorsTestsService.GetSpamProbability(isUserSafe, messageContent); // Assert Assert.That(spamProbability, Is.EqualTo(exceptedSpamProbability)); }
public void OverallSpamDetectorStrategy_ShouldDetectSpam(string messageContent1, string messageContent2, string messageContent3, string messageContent4, bool isUserSafe, SpamProbability exceptedSpamProbability) { // Arrange var spamTestsService = new AntiSpamTestsService(); var userSafetyChecker = new Mock <IUserSafetyChecker>(); userSafetyChecker .Setup(x => x.IsUserSafe(AntiSpamTestsService.DEFAULT_TEST_USER_ID, GetMessagesQuery.GET_ALL_SERVERS)) .Returns(isUserSafe); var(request, contexts) = spamTestsService.CreateRequestAndContexts(messageContent4); var serverMessages = new ServerMessagesCacheService(); serverMessages.OverwriteMessages(new List <SmallMessage> { new SmallMessage(messageContent1, AntiSpamTestsService.DEFAULT_TEST_USER_ID, DateTime.Now, GetMessagesQuery.GET_ALL_SERVERS), new SmallMessage(messageContent2, AntiSpamTestsService.DEFAULT_TEST_USER_ID, DateTime.Now, GetMessagesQuery.GET_ALL_SERVERS), new SmallMessage(messageContent3, AntiSpamTestsService.DEFAULT_TEST_USER_ID, DateTime.Now, GetMessagesQuery.GET_ALL_SERVERS) }); var configurationService = new Mock <IConfigurationService>(); configurationService .Setup(x => x.GetConfigurationItem <PercentOfSimilarityBetweenMessagesToSuspectSpam>(It.IsAny <ulong>())) .Returns(new PercentOfSimilarityBetweenMessagesToSuspectSpam(GetMessagesQuery.GET_ALL_SERVERS)); var overallSpamDetector = OverallSpamDetectorStrategy.GetStrategyWithDefaultDetectors(serverMessages, userSafetyChecker.Object, configurationService.Object); // Act var overallSpamProbability = overallSpamDetector.GetOverallSpamProbability(request, contexts); // Assert Assert.That(overallSpamProbability, Is.EqualTo(exceptedSpamProbability)); }