コード例 #1
0
        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));
        }
コード例 #2
0
        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));
        }
コード例 #3
0
        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));
        }
コード例 #4
0
        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);
            }
        }
コード例 #5
0
        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));
        }
コード例 #6
0
        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));
        }
コード例 #7
0
        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));
        }
コード例 #8
0
        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));
        }
コード例 #9
0
        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));
        }