예제 #1
0
    def render_admin_panel(self, req, cat, page, path_info):
        req.perm.assert_permission('SPAM_CONFIG')

        akismet = AkismetFilterStrategy(self.env)
        data = {}

        if req.method == 'POST':
            if 'cancel' in req.args:
                req.redirect(req.href.admin(cat, page))

            api_url = req.args.get('api_url')
            api_key = req.args.get('api_key')
            try:
                if not akismet._verify_key(req, api_url, api_key):
                    data['error'] = 'The API key is invalid'
                else:
                    self.config.set('spam-filter', 'akismet_api_url', api_url)
                    self.config.set('spam-filter', 'akismet_api_key', api_key)
                    self.config.save()
                    req.redirect(req.href.admin(cat, page))
            except urllib2.URLError, e:
                data['error'] = e.reason[1]
예제 #2
0
 def setUp(self):
     self.env = EnvironmentStub(enable=[AkismetFilterStrategy])
     self.strategy = AkismetFilterStrategy(self.env)
     self.urlopen = akismet.urllib2.urlopen = DummyURLOpener()
예제 #3
0
class AkismetFilterStrategyTestCase(unittest.TestCase):

    def setUp(self):
        self.env = EnvironmentStub(enable=[AkismetFilterStrategy])
        self.strategy = AkismetFilterStrategy(self.env)
        self.urlopen = akismet.urllib2.urlopen = DummyURLOpener()

    def test_no_api_key(self):
        req = Mock()
        retval = self.strategy.test(req, 'anonymous', 'foobar')
        self.assertEqual(None, retval)

    def test_bad_api_key(self):
        req = Mock(authname='anonymous', base_url='http://example.org/',
                   remote_addr='127.0.0.1')
        self.env.config.set('spam-filter', 'akismet_api_key', 'INVALID')

        self.urlopen.responses = ['invalid']
        retval = self.strategy.test(req, 'anonymous', 'foobar')
        self.assertEqual(None, retval)
        self.assertEqual(1, len(self.urlopen.requests))

        req = self.urlopen.requests[0]
        self.assertEqual('http://rest.akismet.com/1.1/verify-key', req.url)
        self.assertEqual('blog=http%3A%2F%2Fexample.org%2F&key=INVALID',
                         req.params)
        self.assertEqual(self.strategy.user_agent, req.headers['User-Agent'])

    def test_check_ham(self):
        req = Mock(authname='anonymous', base_url='http://example.org/',
                   remote_addr='127.0.0.1', get_header=lambda x: None)
        self.env.config.set('spam-filter', 'akismet_api_key', 'mykey')

        self.urlopen.responses = ['valid', 'false']
        retval = self.strategy.test(req, 'anonymous', 'foobar')
        self.assertEqual(None, retval)
        self.assertEqual(2, len(self.urlopen.requests))

        req = self.urlopen.requests[1]
        self.assertEqual('http://mykey.rest.akismet.com/1.1/comment-check',
                         req.url)
        self.assertEqual('user_ip=127.0.0.1&referrer=unknown&'
                         'blog=http%3A%2F%2Fexample.org%2F&user_agent=None&'
                         'comment_content=foobar&comment_author=&'
                         'comment_author_email=anonymous', req.params)
        self.assertEqual(self.strategy.user_agent, req.headers['User-Agent'])

    def test_check_spam(self):
        req = Mock(authname='anonymous', base_url='http://example.org/',
                   remote_addr='127.0.0.1', get_header=lambda x: None)
        self.env.config.set('spam-filter', 'akismet_api_key', 'mykey')

        self.urlopen.responses = ['valid', 'true']
        retval = self.strategy.test(req, 'anonymous', 'foobar')
        self.assertEqual((-5, 'Akismet says content is spam'), retval)
        self.assertEqual(2, len(self.urlopen.requests))

    def test_submit_ham(self):
        req = Mock(authname='anonymous', base_url='http://example.org/',
                   remote_addr='127.0.0.1', get_header=lambda x: None)
        self.env.config.set('spam-filter', 'akismet_api_key', 'mykey')

        self.urlopen.responses = ['valid', '']
        self.strategy.train(req, 'anonymous', 'foobar', spam=False)

        req = self.urlopen.requests[1]
        self.assertEqual('http://mykey.rest.akismet.com/1.1/submit-ham',
                         req.url)
        self.assertEqual('user_ip=127.0.0.1&referrer=unknown&'
                         'blog=http%3A%2F%2Fexample.org%2F&user_agent=None&'
                         'comment_content=foobar&comment_author=&'
                         'comment_author_email=anonymous', req.params)
        self.assertEqual(self.strategy.user_agent, req.headers['User-Agent'])

    def test_submit_spam(self):
        req = Mock(authname='anonymous', base_url='http://example.org/',
                   remote_addr='127.0.0.1', get_header=lambda x: None)
        self.env.config.set('spam-filter', 'akismet_api_key', 'mykey')

        self.urlopen.responses = ['valid', '']
        retval = self.strategy.train(req, 'anonymous', 'foobar', spam=True)

        req = self.urlopen.requests[1]
        self.assertEqual('http://mykey.rest.akismet.com/1.1/submit-spam',
                         req.url)
        self.assertEqual('user_ip=127.0.0.1&referrer=unknown&'
                         'blog=http%3A%2F%2Fexample.org%2F&user_agent=None&'
                         'comment_content=foobar&comment_author=&'
                         'comment_author_email=anonymous', req.params)
        self.assertEqual(self.strategy.user_agent, req.headers['User-Agent'])
예제 #4
0
    def render_admin_panel(self, req, cat, page, path_info):
        req.perm.require('SPAM_CONFIG')

        data = {}
        spam_config = self.config['spam-filter']

        akismet = AkismetFilterStrategy(self.env)
        stopforumspam = StopForumSpamFilterStrategy(self.env)
        botscout = BotScoutFilterStrategy(self.env)
        fspamlist = FSpamListFilterStrategy(self.env)

        ip_blacklist_default = ip6_blacklist_default = \
            url_blacklist_default = None
        if HttpBLFilterStrategy:
            ip_blacklist = IPBlacklistFilterStrategy(self.env)
            ip_blacklist_default = ip_blacklist.servers_default
            ip6_blacklist_default = ip_blacklist.servers6_default
            url_blacklist = URLBlacklistFilterStrategy(self.env)
            url_blacklist_default = url_blacklist.servers_default
        mollom = 0
        if MollomFilterStrategy:
            mollom = MollomFilterStrategy(self.env)
        blogspam = BlogSpamFilterStrategy(self.env)

        if req.method == 'POST':
            if 'cancel' in req.args:
                req.redirect(req.href.admin(cat, page))

            akismet_api_url = req.args.get('akismet_api_url')
            akismet_api_key = req.args.get('akismet_api_key')
            mollom_api_url = req.args.get('mollom_api_url')
            mollom_public_key = req.args.get('mollom_public_key')
            mollom_private_key = req.args.get('mollom_private_key')
            stopforumspam_api_key = req.args.get('stopforumspam_api_key')
            botscout_api_key = req.args.get('botscout_api_key')
            fspamlist_api_key = req.args.get('fspamlist_api_key')
            httpbl_api_key = req.args.get('httpbl_api_key')
            ip_blacklist_servers = req.args.get('ip_blacklist_servers')
            ip6_blacklist_servers = req.args.get('ip6_blacklist_servers')
            url_blacklist_servers = req.args.get('url_blacklist_servers')
            blogspam_api_url = req.args.get('blogspam_api_url')
            blogspam_skip_tests = req.args.get('blogspam_skip_tests')
            use_external = 'use_external' in req.args
            train_external = 'train_external' in req.args
            skip_external = req.args.get('skip_external')
            stop_external = req.args.get('stop_external')
            skip_externalham = req.args.get('skip_externalham')
            stop_externalham = req.args.get('stop_externalham')
            try:
                verified_key = akismet.verify_key(req, akismet_api_url,
                                                  akismet_api_key)
                if akismet_api_key and not verified_key:
                    data['akismeterror'] = 'The API key is invalid'
                    data['error'] = 1
            except urllib2.URLError, e:
                data['alismeterror'] = e.reason[1]
                data['error'] = 1

            if mollom:
                try:
                    verified_key = mollom.verify_key(req, mollom_api_url,
                                                     mollom_public_key,
                                                     mollom_private_key)
                except urllib2.URLError, e:
                    data['mollomerror'] = e.reason[1]
                    data['error'] = 1
                else:
                    if mollom_public_key and mollom_private_key and \
                            not verified_key:
                        data['mollomerror'] = 'The API keys are invalid'
                        data['error'] = 1
예제 #5
0
class AkismetFilterStrategyTestCase(unittest.TestCase):

    def setUp(self):
        self.env = EnvironmentStub(enable=[AkismetFilterStrategy])
        self.strategy = AkismetFilterStrategy(self.env)
        self.urlopen = akismet.urllib2.urlopen = DummyURLOpener()

    def test_no_api_key(self):
        req = MockRequest(self.env)
        retval = self.strategy.test(req, 'anonymous', 'foobar',
                                    req.remote_addr)
        self.assertEqual(None, retval)

    def test_bad_api_key(self):
        req = MockRequest(self.env)
        self.env.config.set('spam-filter', 'akismet_api_key', 'INVALID')

        self.urlopen.responses = ['invalid']
        retval = self.strategy.test(req, 'anonymous', 'foobar',
                                    req.remote_addr)
        self.assertEqual(None, retval)
        self.assertEqual(1, len(self.urlopen.requests))

        req = self.urlopen.requests[0]
        self.assertEqual('http://rest.akismet.com/1.1/verify-key', req.url)
        self.assertEqual('blog=http%3A%2F%2Fexample.org%2Ftrac.cgi'
                         '&key=INVALID', req.params)
        self.assertEqual(user_agent, req.headers['User-Agent'])

    def test_check_ham(self):
        req = MockRequest(self.env)
        self.env.config.set('spam-filter', 'akismet_api_key', 'mykey')

        self.urlopen.responses = ['valid', 'false']
        retval = self.strategy.test(req, 'anonymous', 'foobar',
                                    req.remote_addr)
        self.assertEqual(None, retval)
        self.assertEqual(2, len(self.urlopen.requests))

        req = self.urlopen.requests[1]
        self.assertEqual('http://mykey.rest.akismet.com/1.1/comment-check',
                         req.url)
        self.assertEqual('user_ip=127.0.0.1&comment_type=trac&'
                         'referrer=unknown&HTTP_ACCEPT_LANGUAGE=en-US&'
                         'blog=http%3A%2F%2Fexample.org%2Ftrac.cgi&'
                         'user_agent=None&comment_content=foobar&'
                         'comment_author=anonymous', req.params)
        self.assertEqual(user_agent, req.headers['User-Agent'])

    def test_check_spam(self):
        req = MockRequest(self.env)
        self.env.config.set('spam-filter', 'akismet_api_key', 'mykey')

        self.urlopen.responses = ['valid', 'true']
        retval = self.strategy.test(req, 'anonymous', 'foobar',
                                    req.remote_addr)
        self.assertEqual((-10, 'Akismet says content is spam'), retval)
        self.assertEqual(2, len(self.urlopen.requests))

    def test_submit_ham(self):
        req = MockRequest(self.env)
        self.env.config.set('spam-filter', 'akismet_api_key', 'mykey')

        self.urlopen.responses = ['valid', '']
        self.strategy.train(req, 'anonymous', 'foobar', req.remote_addr,
                            spam=False)

        req = self.urlopen.requests[1]
        self.assertEqual('http://mykey.rest.akismet.com/1.1/submit-ham',
                         req.url)
        self.assertEqual('user_ip=127.0.0.1&comment_type=trac&'
                         'referrer=unknown&HTTP_ACCEPT_LANGUAGE=en-US&'
                         'blog=http%3A%2F%2Fexample.org%2Ftrac.cgi&'
                         'user_agent=None&comment_content=foobar&'
                         'comment_author=anonymous', req.params)
        self.assertEqual(user_agent, req.headers['User-Agent'])

    def test_submit_spam(self):
        req = MockRequest(self.env)
        self.env.config.set('spam-filter', 'akismet_api_key', 'mykey')

        self.urlopen.responses = ['valid', '']
        self.strategy.train(req, 'anonymous', 'foobar', req.remote_addr,
                            spam=True)

        req = self.urlopen.requests[1]
        self.assertEqual('http://mykey.rest.akismet.com/1.1/submit-spam',
                         req.url)
        self.assertEqual('user_ip=127.0.0.1&comment_type=trac&'
                         'referrer=unknown&HTTP_ACCEPT_LANGUAGE=en-US&'
                         'blog=http%3A%2F%2Fexample.org%2Ftrac.cgi&'
                         'user_agent=None&comment_content=foobar'
                         '&comment_author=anonymous',
                         req.params)
        self.assertEqual(user_agent, req.headers['User-Agent'])