You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by tv...@apache.org on 2012/12/14 16:03:30 UTC

[35/50] git commit: [#5455] Fallback to REMOTE_ADDR if X_FORWARDED_FOR not present

[#5455] Fallback to REMOTE_ADDR if X_FORWARDED_FOR not present


Project: http://git-wip-us.apache.org/repos/asf/incubator-allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-allura/commit/c09d674f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/c09d674f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/c09d674f

Branch: refs/heads/ph/4655
Commit: c09d674fbc7b872c5fc1dc251727605a67d40aa9
Parents: 424999c
Author: Tim Van Steenburgh <tv...@gmail.com>
Authored: Thu Dec 13 15:49:52 2012 +0000
Committer: Dave Brondsema <db...@geek.net>
Committed: Thu Dec 13 15:53:52 2012 +0000

----------------------------------------------------------------------
 Allura/allura/lib/spam/akismetservice.py |    7 +++--
 Allura/allura/tests/unit/test_spam.py    |   31 +++++++++++++++++-------
 2 files changed, 26 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/c09d674f/Allura/allura/lib/spam/akismetservice.py
----------------------------------------------------------------------
diff --git a/Allura/allura/lib/spam/akismetservice.py b/Allura/allura/lib/spam/akismetservice.py
index 344a7ad..9378914 100644
--- a/Allura/allura/lib/spam/akismetservice.py
+++ b/Allura/allura/lib/spam/akismetservice.py
@@ -19,9 +19,10 @@ class Akismet(akismet.Akismet):
         if user:
             kw['comment_author'] = user.display_name or user.username
             kw['comment_author_email'] = user.email_addresses[0] if user.email_addresses else ''
-        kw['user_ip'] = request.environ['HTTP_X_REMOTE_ADDR']
-        kw['user_agent'] = request.environ['HTTP_USER_AGENT']
-        kw['referrer'] = request.environ['HTTP_REFERER']
+        user_ip = request.headers.get('X_FORWARDED_FOR', request.remote_addr)
+        kw['user_ip'] = user_ip.split(',')[0].strip()
+        kw['user_agent'] = request.headers.get('USER_AGENT')
+        kw['referrer'] = request.headers.get('REFERER')
         res = self.comment_check(text, data=kw, build_data=False)
         log.info("spam=%s (akismet): %s" % (str(res), log_msg))
         return res

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/c09d674f/Allura/allura/tests/unit/test_spam.py
----------------------------------------------------------------------
diff --git a/Allura/allura/tests/unit/test_spam.py b/Allura/allura/tests/unit/test_spam.py
index ea87b43..d09c907 100644
--- a/Allura/allura/tests/unit/test_spam.py
+++ b/Allura/allura/tests/unit/test_spam.py
@@ -15,10 +15,11 @@ class TestAkismet(unittest.TestCase):
         self.fake_artifact = mock.Mock(**{'url.return_value': 'artifact url'})
         self.fake_user = mock.Mock(display_name='Some User',
                 email_addresses=['user@domain'])
-        self.fake_environ = dict(
-            HTTP_X_REMOTE_ADDR='some ip',
-            HTTP_USER_AGENT='some browser',
-            HTTP_REFERER='some url')
+        self.fake_headers = dict(
+            REMOTE_ADDR='fallback ip',
+            X_FORWARDED_FOR='some ip',
+            USER_AGENT='some browser',
+            REFERER='some url')
         self.content = 'spam text'
         self.expected_data = dict(
             comment_content=self.content,
@@ -30,7 +31,7 @@ class TestAkismet(unittest.TestCase):
     @mock.patch('allura.lib.spam.akismetservice.c')
     @mock.patch('allura.lib.spam.akismetservice.request')
     def test_check(self, request, c):
-        request.environ = self.fake_environ
+        request.headers = self.fake_headers
         c.user = None
         self.akismet.check(self.content)
         self.akismet.comment_check.assert_called_once_with(self.content,
@@ -39,7 +40,7 @@ class TestAkismet(unittest.TestCase):
     @mock.patch('allura.lib.spam.akismetservice.c')
     @mock.patch('allura.lib.spam.akismetservice.request')
     def test_check_with_explicit_content_type(self, request, c):
-        request.environ = self.fake_environ
+        request.headers = self.fake_headers
         c.user = None
         self.akismet.check(self.content, content_type='some content type')
         self.expected_data['comment_type'] = 'some content type'
@@ -49,7 +50,7 @@ class TestAkismet(unittest.TestCase):
     @mock.patch('allura.lib.spam.akismetservice.c')
     @mock.patch('allura.lib.spam.akismetservice.request')
     def test_check_with_artifact(self, request, c):
-        request.environ = self.fake_environ
+        request.headers = self.fake_headers
         c.user = None
         self.akismet.check(self.content, artifact=self.fake_artifact)
         expected_data = self.expected_data
@@ -60,7 +61,7 @@ class TestAkismet(unittest.TestCase):
     @mock.patch('allura.lib.spam.akismetservice.c')
     @mock.patch('allura.lib.spam.akismetservice.request')
     def test_check_with_user(self, request, c):
-        request.environ = self.fake_environ
+        request.headers = self.fake_headers
         c.user = None
         self.akismet.check(self.content, user=self.fake_user)
         expected_data = self.expected_data
@@ -72,7 +73,7 @@ class TestAkismet(unittest.TestCase):
     @mock.patch('allura.lib.spam.akismetservice.c')
     @mock.patch('allura.lib.spam.akismetservice.request')
     def test_check_with_implicit_user(self, request, c):
-        request.environ = self.fake_environ
+        request.headers = self.fake_headers
         c.user = self.fake_user
         self.akismet.check(self.content)
         expected_data = self.expected_data
@@ -80,3 +81,15 @@ class TestAkismet(unittest.TestCase):
                 comment_author_email='user@domain')
         self.akismet.comment_check.assert_called_once_with(self.content,
                 data=expected_data, build_data=False)
+
+    @mock.patch('allura.lib.spam.akismetservice.c')
+    @mock.patch('allura.lib.spam.akismetservice.request')
+    def test_check_with_fallback_ip(self, request, c):
+        self.expected_data['user_ip'] = 'fallback ip'
+        self.fake_headers.pop('X_FORWARDED_FOR')
+        request.headers = self.fake_headers
+        request.remote_addr = self.fake_headers['REMOTE_ADDR']
+        c.user = None
+        self.akismet.check(self.content)
+        self.akismet.comment_check.assert_called_once_with(self.content,
+                data=self.expected_data, build_data=False)