summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Merickel <michael@merickel.org>2024-01-28 22:57:17 -0700
committerGitHub <noreply@github.com>2024-01-28 22:57:17 -0700
commite77b72dc3a0890911514ad8aab8c8bf26c4591d0 (patch)
tree569b1b1d53415f7f8fc692c632926f08611cccf9
parent8de7b1f2b5df9a9225c514b2cfc5e5e0919daac2 (diff)
parent3abbab66159286e98a32a53e9b3a6c4705c69679 (diff)
downloadpyramid-e77b72dc3a0890911514ad8aab8c8bf26c4591d0.tar.gz
pyramid-e77b72dc3a0890911514ad8aab8c8bf26c4591d0.tar.bz2
pyramid-e77b72dc3a0890911514ad8aab8c8bf26c4591d0.zip
Merge pull request #3742 from Pylons/fix-csrf-400-status
Fix csrf 400 status lines
-rw-r--r--CHANGES.rst7
-rw-r--r--src/pyramid/exceptions.py22
-rw-r--r--tests/test_exceptions.py10
3 files changed, 27 insertions, 12 deletions
diff --git a/CHANGES.rst b/CHANGES.rst
index cb82607cb..f27be0253 100644
--- a/CHANGES.rst
+++ b/CHANGES.rst
@@ -44,6 +44,13 @@ Bug Fixes
See https://github.com/Pylons/pyramid/pull/3741/files
+- Applications raising ``pyramid.exceptions.BadCSRFToken`` and
+ ``pyramid.exceptions.BadCSRFOrigin`` were returning invalid HTTP status
+ lines with values like ``400 Bad CSRF Origin`` instead of
+ ``400 Bad Request``.
+
+ See https://github.com/Pylons/pyramid/pull/3742
+
Backward Incompatibilities
--------------------------
diff --git a/src/pyramid/exceptions.py b/src/pyramid/exceptions.py
index 16aeb7e4f..9f19a4bb4 100644
--- a/src/pyramid/exceptions.py
+++ b/src/pyramid/exceptions.py
@@ -10,12 +10,11 @@ class BadCSRFOrigin(HTTPBadRequest):
origin validation.
"""
- title = "Bad CSRF Origin"
explanation = (
- "Access is denied. This server can not verify that the origin or "
- "referrer of your request matches the current site. Either your "
- "browser supplied the wrong Origin or Referrer or it did not supply "
- "one at all."
+ "Bad CSRF Origin. Access is denied. This server can not verify that "
+ "the origin or referrer of your request matches the current site. "
+ "Either your browser supplied the wrong Origin or Referrer or it did "
+ "not supply one at all."
)
@@ -25,14 +24,13 @@ class BadCSRFToken(HTTPBadRequest):
forgery token validation.
"""
- title = 'Bad CSRF Token'
explanation = (
- 'Access is denied. This server can not verify that your cross-site '
- 'request forgery token belongs to your login session. Either you '
- 'supplied the wrong cross-site request forgery token or your session '
- 'no longer exists. This may be due to session timeout or because '
- 'browser is not supplying the credentials required, as can happen '
- 'when the browser has cookies turned off.'
+ 'Bad CSRF token received. Access is denied. This server can not '
+ 'verify that your cross-site request forgery token belongs to your '
+ 'login session. Either you supplied the wrong cross-site request '
+ 'forgery token or your session no longer exists. This may be due to '
+ 'session timeout or because browser is not supplying the credentials '
+ 'required, as can happen when the browser has cookies turned off.'
)
diff --git a/tests/test_exceptions.py b/tests/test_exceptions.py
index e7a2871a5..d5f247c2a 100644
--- a/tests/test_exceptions.py
+++ b/tests/test_exceptions.py
@@ -16,12 +16,22 @@ class TestBWCompat(unittest.TestCase):
self.assertTrue(one is two)
+class TestBadCSRFOrigin(unittest.TestCase):
+ def test_response_equivalence(self):
+ from pyramid.exceptions import BadCSRFOrigin
+ from pyramid.httpexceptions import HTTPBadRequest
+
+ self.assertTrue(isinstance(BadCSRFOrigin(), HTTPBadRequest))
+ self.assertEqual(BadCSRFOrigin().status, HTTPBadRequest().status)
+
+
class TestBadCSRFToken(unittest.TestCase):
def test_response_equivalence(self):
from pyramid.exceptions import BadCSRFToken
from pyramid.httpexceptions import HTTPBadRequest
self.assertTrue(isinstance(BadCSRFToken(), HTTPBadRequest))
+ self.assertEqual(BadCSRFToken().status, HTTPBadRequest().status)
class TestNotFound(unittest.TestCase):