diff options
author | Bill Prin <waprin@gmail.com> | 2016-08-12 12:01:08 -0700 |
---|---|---|
committer | Jon Wayne Parrott <jonwayne@google.com> | 2016-08-12 12:01:08 -0700 |
commit | c9b4b07525730338f2e560981b3fbe295d2146ab (patch) | |
tree | 101a05d3eddab66444ad99da8732966b89f1db19 | |
parent | c6b30bf420b3e63ed086c1fecad4b7aa2adb5089 (diff) | |
download | oauth2client-c9b4b07525730338f2e560981b3fbe295d2146ab.tar.gz |
Switch django models from pickle to jsonpickle (#614)
-rw-r--r-- | oauth2client/contrib/django_util/views.py | 6 | ||||
-rw-r--r-- | tests/contrib/django_util/test_views.py | 20 | ||||
-rw-r--r-- | tox.ini | 1 |
3 files changed, 16 insertions, 11 deletions
diff --git a/oauth2client/contrib/django_util/views.py b/oauth2client/contrib/django_util/views.py index 4d8ae03..4858f20 100644 --- a/oauth2client/contrib/django_util/views.py +++ b/oauth2client/contrib/django_util/views.py @@ -22,13 +22,13 @@ in the configured storage.""" import hashlib import json import os -import pickle from django import http from django import shortcuts from django.conf import settings from django.core import urlresolvers from django.shortcuts import redirect +import jsonpickle from six.moves.urllib import parse from oauth2client import client @@ -71,7 +71,7 @@ def _make_flow(request, scopes, return_url=None): urlresolvers.reverse("google_oauth:callback"))) flow_key = _FLOW_KEY.format(csrf_token) - request.session[flow_key] = pickle.dumps(flow) + request.session[flow_key] = jsonpickle.encode(flow) return flow @@ -89,7 +89,7 @@ def _get_flow_for_token(csrf_token, request): CSRF token. """ flow_pickle = request.session.get(_FLOW_KEY.format(csrf_token), None) - return None if flow_pickle is None else pickle.loads(flow_pickle) + return None if flow_pickle is None else jsonpickle.decode(flow_pickle) def oauth2_callback(request): diff --git a/tests/contrib/django_util/test_views.py b/tests/contrib/django_util/test_views.py index 3a0b752..3962924 100644 --- a/tests/contrib/django_util/test_views.py +++ b/tests/contrib/django_util/test_views.py @@ -152,8 +152,8 @@ class Oauth2CallbackTest(tests_django_util.TestWithDjangoEnvironment): self.user = django_models.User.objects.create_user( username='bill', email='bill@example.com', password='hunter2') - @mock.patch('oauth2client.contrib.django_util.views.pickle') - def test_callback_works(self, pickle): + @mock.patch('oauth2client.contrib.django_util.views.jsonpickle') + def test_callback_works(self, jsonpickle_mock): request = self.factory.get('oauth2/oauth2callback', data={ 'state': json.dumps(self.fake_state), 'code': 123 @@ -169,9 +169,10 @@ class Oauth2CallbackTest(tests_django_util.TestWithDjangoEnvironment): redirect_uri=request.build_absolute_uri("oauth2/oauth2callback")) name = 'google_oauth2_flow_{0}'.format(self.CSRF_TOKEN) - self.session[name] = pickle.dumps(flow) + pickled_flow = object() + self.session[name] = pickled_flow flow.step2_exchange = mock.Mock() - pickle.loads.return_value = flow + jsonpickle_mock.decode.return_value = flow request.session = self.session request.user = self.user @@ -180,9 +181,10 @@ class Oauth2CallbackTest(tests_django_util.TestWithDjangoEnvironment): self.assertEqual( response.status_code, django.http.HttpResponseRedirect.status_code) self.assertEqual(response['Location'], self.RETURN_URL) + jsonpickle_mock.decode.assert_called_once_with(pickled_flow) - @mock.patch('oauth2client.contrib.django_util.views.pickle') - def test_callback_handles_bad_flow_exchange(self, pickle): + @mock.patch('oauth2client.contrib.django_util.views.jsonpickle') + def test_callback_handles_bad_flow_exchange(self, jsonpickle_mock): request = self.factory.get('oauth2/oauth2callback', data={ "state": json.dumps(self.fake_state), "code": 123 @@ -198,17 +200,19 @@ class Oauth2CallbackTest(tests_django_util.TestWithDjangoEnvironment): redirect_uri=request.build_absolute_uri('oauth2/oauth2callback')) session_key = 'google_oauth2_flow_{0}'.format(self.CSRF_TOKEN) - self.session[session_key] = pickle.dumps(flow) + pickled_flow = object() + self.session[session_key] = pickled_flow def local_throws(code): raise client.FlowExchangeError('test') flow.step2_exchange = local_throws - pickle.loads.return_value = flow + jsonpickle_mock.decode.return_value = flow request.session = self.session response = views.oauth2_callback(request) self.assertIsInstance(response, http.HttpResponseBadRequest) + jsonpickle_mock.decode.assert_called_once_with(pickled_flow) def test_error_returns_bad_request(self): request = self.factory.get('oauth2/oauth2callback', data={ @@ -14,6 +14,7 @@ basedeps = mock>=1.3.0 deps = {[testenv]basedeps} django keyring + jsonpickle setenv = pypy: with_gmp=no DJANGO_SETTINGS_MODULE=tests.contrib.django_util.settings |