Example #1
0
    def _render_monitoring_panel(self, req, cat, page):
        req.perm.assert_permission('SPAM_MONITOR')

        try:
            pagenum = int(req.args.get('page', 1)) - 1
        except ValueError:
            pagenum = 1

        total = LogEntry.count(self.env)
        offset = pagenum * self.MAX_PER_PAGE
        entries = list(LogEntry.select(self.env, limit=self.MAX_PER_PAGE,
                                       offset=offset))
        if pagenum > 0:
            add_link(req, 'prev', req.href.admin(cat, page, page=pagenum),
                     'Previous Page')
        if offset + self.MAX_PER_PAGE < total:
            add_link(req, 'next', req.href.admin(cat, page, page=pagenum+2),
                     'Next Page')

        return {
            'enabled': FilterSystem(self.env).logging_enabled,
            'entries': entries,
            'offset': offset + 1,
            'page': pagenum + 1,
            'total': total
        }
Example #2
0
    def test(self, req, author, content):
        threshold = datetime.now() - timedelta(hours=1)
        num_posts = 0
        for entry in LogEntry.select(self.env, ipnr=req.remote_addr):
            if datetime.fromtimestamp(entry.time) < threshold:
                break
            num_posts += 1

        if num_posts > self.max_posts:
            return -abs(self.karma_points) * num_posts / self.max_posts, \
                   'Maximum number of posts per hour for this IP exceeded'
Example #3
0
    def test_log_accept(self):
        req = Mock(environ={}, path_info="/foo", authname="anonymous", remote_addr="127.0.0.1")
        DummyStrategy(self.env).configure(5)
        FilterSystem(self.env).test(req, "John Doe", [(None, "Test")])

        log = list(LogEntry.select(self.env))
        self.assertEqual(1, len(log))
        entry = log[0]
        self.assertEqual("/foo", entry.path)
        self.assertEqual("John Doe", entry.author)
        self.assertEqual(False, entry.authenticated)
        self.assertEqual("127.0.0.1", entry.ipnr)
        self.assertEqual("Test", entry.content)
        self.assertEqual(False, entry.rejected)
        self.assertEqual(5, entry.karma)
        self.assertEqual([], entry.reasons)
Example #4
0
    def test_purge(self):
        now = datetime.now()
        oneweekago = time.mktime((now - timedelta(weeks=1)).timetuple())
        onedayago = time.mktime((now - timedelta(days=1)).timetuple())

        LogEntry(self.env, oneweekago, '/foo', 'john', False, '127.0.0.1',
                 '', 'Test', False, 5, []).insert()
        LogEntry(self.env, onedayago, '/foo', 'anonymous', False, '127.0.0.1',
                 '', 'Test', True, -3, []).insert()

        LogEntry.purge(self.env, days=4)

        log = list(LogEntry.select(self.env))
        self.assertEqual(1, len(log))
        entry = log[0]
        self.assertEqual('anonymous', entry.author)
Example #5
0
    def test_log_accept(self):
        req = MockRequest(self.env, path_info='/foo')
        DummyStrategy(self.env).configure(5)
        FilterSystem(self.env).test(req, 'John Doe', [(None, 'Test')])

        log = list(LogEntry.select(self.env))
        self.assertEqual(1, len(log))
        entry = log[0]
        self.assertEqual('/foo', entry.path)
        self.assertEqual('John Doe', entry.author)
        self.assertEqual(False, entry.authenticated)
        self.assertEqual('127.0.0.1', entry.ipnr)
        self.assertEqual('Test', entry.content)
        self.assertEqual(False, entry.rejected)
        self.assertEqual(5, entry.karma)
        self.assertEqual([['DummyStrategy', '5', 'Dummy']], entry.reasons)
Example #6
0
    def test_train_ham(self):
        req = MockRequest(self.env, path_info='/foo')
        entry = LogEntry(self.env, time.time(), '/foo', 'john', False,
                         '127.0.0.1', '', 'Test', True, -5, [], req)
        entry.insert()
        FilterSystem(self.env).train(req, entry.id, spam=False)

        strategy = DummyStrategy(self.env)
        self.assertEqual(True, strategy.train_called)
        self.assertEqual('john', strategy.author)
        self.assertEqual('Test', strategy.content)
        self.assertEqual(False, strategy.spam)

        log = list(LogEntry.select(self.env))
        self.assertEqual(1, len(log))
        entry = log[0]
        self.assertEqual(False, entry.rejected)
Example #7
0
    def test_train_ham(self):
        entry = LogEntry(self.env, time.time(), "/foo", "john", False, "127.0.0.1", "", "Test", True, -5, [])
        entry.insert()

        req = Mock(
            environ={"SERVER_NAME": "localhost", "SERVER_PORT": "80", "wsgi.url_scheme": "http"},
            path_info="/foo",
            authname="anonymous",
            remote_addr="127.0.0.1",
        )
        FilterSystem(self.env).train(req, entry.id, spam=False)

        strategy = DummyStrategy(self.env)
        self.assertEqual(True, strategy.train_called)
        self.assertEqual("john", strategy.author)
        self.assertEqual("Test", strategy.content)
        self.assertEqual(False, strategy.spam)

        log = list(LogEntry.select(self.env))
        self.assertEqual(1, len(log))
        entry = log[0]
        self.assertEqual(False, entry.rejected)
Example #8
0
    def _render_monitoring_panel(self, req, cat, page):
        req.perm.require('SPAM_MONITOR')

        pagenum = req.args.as_int('page', 1) - 1

        pagesize = req.args.as_int('num', self.DEF_PER_PAGE,
                                   min=self.MIN_PER_PAGE,
                                   max=self.MAX_PER_PAGE)

        total = LogEntry.count(self.env)

        if total < pagesize:
            pagenum = 0
        elif total <= pagenum * pagesize:
            pagenum = (total - 1) / pagesize

        offset = pagenum * pagesize
        entries = list(LogEntry.select(self.env, limit=pagesize,
                                       offset=offset))
        if pagenum > 0:
            add_link(req, 'prev',
                     req.href.admin(cat, page, page=pagenum, num=pagesize),
                     _("Previous Page"))
        if offset + pagesize < total:
            add_link(req, 'next',
                     req.href.admin(cat, page, page=pagenum + 2, num=pagesize),
                     _("Next Page"))

        return {
            'enabled': FilterSystem(self.env).logging_enabled,
            'entries': entries,
            'offset': offset + 1,
            'page': pagenum + 1,
            'num': pagesize,
            'total': total,
            'train_only': self.train_only
        }
Example #9
0
    def test_good_karma(self):
        req = Mock(environ={}, path_info="/foo", authname="anonymous", remote_addr="127.0.0.1")
        DummyStrategy(self.env).configure(5)
        FilterSystem(self.env).test(req, "John Doe", [(None, "Test")])

    def test_log_reject(self):
        req = Mock(environ={}, path_info="/foo", authname="anonymous", remote_addr="127.0.0.1")
        DummyStrategy(self.env).configure(-5, "Blacklisted")
        try:
            FilterSystem(self.env).test(req, "John Doe", [(None, "Test")])
            self.fail("Expected RejectContent exception")
        except RejectContent, e:
            pass

        log = list(LogEntry.select(self.env))
        self.assertEqual(1, len(log))
        entry = log[0]
        self.assertEqual("/foo", entry.path)
        self.assertEqual("John Doe", entry.author)
        self.assertEqual(False, entry.authenticated)
        self.assertEqual("127.0.0.1", entry.ipnr)
        self.assertEqual("Test", entry.content)
        self.assertEqual(True, entry.rejected)
        self.assertEqual(-5, entry.karma)
        self.assertEqual(["DummyStrategy (-5): Blacklisted"], entry.reasons)

    def test_log_accept(self):
        req = Mock(environ={}, path_info="/foo", authname="anonymous", remote_addr="127.0.0.1")
        DummyStrategy(self.env).configure(5)
        FilterSystem(self.env).test(req, "John Doe", [(None, "Test")])