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 }
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'
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)
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)
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)
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)
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)
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 }
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")])