diff options
| author | Alex Burgel | 2013-06-05 16:59:19 -0400 | 
|---|---|---|
| committer | Alex Burgel | 2013-06-05 17:02:44 -0400 | 
| commit | ecb8a460c99238a959d8e7600af5b692f13c40d9 (patch) | |
| tree | 6a746a6de5de2351699ce83c46ac4daeab0b99c1 /rest_framework | |
| parent | 181e4fddd0b81e9fd86526ffe8eaed9853499573 (diff) | |
| download | django-rest-framework-ecb8a460c99238a959d8e7600af5b692f13c40d9.tar.bz2 | |
Fix serialization exception when using non-existent consumer
Diffstat (limited to 'rest_framework')
| -rw-r--r-- | rest_framework/authentication.py | 5 | ||||
| -rw-r--r-- | rest_framework/tests/test_authentication.py | 41 | 
2 files changed, 44 insertions, 2 deletions
| diff --git a/rest_framework/authentication.py b/rest_framework/authentication.py index 9caca788..f659a172 100644 --- a/rest_framework/authentication.py +++ b/rest_framework/authentication.py @@ -230,8 +230,9 @@ class OAuthAuthentication(BaseAuthentication):          try:              consumer_key = oauth_request.get_parameter('oauth_consumer_key')              consumer = oauth_provider_store.get_consumer(request, oauth_request, consumer_key) -        except oauth_provider.store.InvalidConsumerError as err: -            raise exceptions.AuthenticationFailed(err) +        except oauth_provider.store.InvalidConsumerError: +            msg = 'Invalid consumer token: %s' % oauth_request.get_parameter('oauth_consumer_key') +            raise exceptions.AuthenticationFailed(msg)          if consumer.status != oauth_provider.consts.ACCEPTED:              msg = 'Invalid consumer key status: %s' % consumer.get_status_display() diff --git a/rest_framework/tests/test_authentication.py b/rest_framework/tests/test_authentication.py index d46ac079..6a50be06 100644 --- a/rest_framework/tests/test_authentication.py +++ b/rest_framework/tests/test_authentication.py @@ -428,6 +428,47 @@ class OAuthTests(TestCase):          response = self.csrf_client.post('/oauth-with-scope/', params)          self.assertEqual(response.status_code, 200) +    @unittest.skipUnless(oauth_provider, 'django-oauth-plus not installed') +    @unittest.skipUnless(oauth, 'oauth2 not installed') +    def test_bad_consumer_key(self): +        """Ensure POSTing using HMAC_SHA1 signature method passes""" +        params = { +            'oauth_version': "1.0", +            'oauth_nonce': oauth.generate_nonce(), +            'oauth_timestamp': int(time.time()), +            'oauth_token': self.token.key, +            'oauth_consumer_key': 'badconsumerkey' +        } + +        req = oauth.Request(method="POST", url="http://testserver/oauth/", parameters=params) + +        signature_method = oauth.SignatureMethod_HMAC_SHA1() +        req.sign_request(signature_method, self.consumer, self.token) +        auth = req.to_header()["Authorization"] + +        response = self.csrf_client.post('/oauth/', HTTP_AUTHORIZATION=auth) +        self.assertEqual(response.status_code, 401) + +    @unittest.skipUnless(oauth_provider, 'django-oauth-plus not installed') +    @unittest.skipUnless(oauth, 'oauth2 not installed') +    def test_bad_token_key(self): +        """Ensure POSTing using HMAC_SHA1 signature method passes""" +        params = { +            'oauth_version': "1.0", +            'oauth_nonce': oauth.generate_nonce(), +            'oauth_timestamp': int(time.time()), +            'oauth_token': 'badtokenkey', +            'oauth_consumer_key': self.consumer.key +        } + +        req = oauth.Request(method="POST", url="http://testserver/oauth/", parameters=params) + +        signature_method = oauth.SignatureMethod_HMAC_SHA1() +        req.sign_request(signature_method, self.consumer, self.token) +        auth = req.to_header()["Authorization"] + +        response = self.csrf_client.post('/oauth/', HTTP_AUTHORIZATION=auth) +        self.assertEqual(response.status_code, 401)  class OAuth2Tests(TestCase):      """OAuth 2.0 authentication""" | 
