diff options
| author | Michael Merickel <michael@merickel.org> | 2024-01-28 22:57:17 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-01-28 22:57:17 -0700 |
| commit | e77b72dc3a0890911514ad8aab8c8bf26c4591d0 (patch) | |
| tree | 569b1b1d53415f7f8fc692c632926f08611cccf9 | |
| parent | 8de7b1f2b5df9a9225c514b2cfc5e5e0919daac2 (diff) | |
| parent | 3abbab66159286e98a32a53e9b3a6c4705c69679 (diff) | |
| download | pyramid-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.rst | 7 | ||||
| -rw-r--r-- | src/pyramid/exceptions.py | 22 | ||||
| -rw-r--r-- | tests/test_exceptions.py | 10 |
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): |
