Skip to content

Commit a7cb8ec

Browse files
committed
Use JSON encoding/decoding in HTTP requests
1 parent e0a27af commit a7cb8ec

File tree

2 files changed

+42
-18
lines changed

2 files changed

+42
-18
lines changed

mozilla_django_oidc/auth.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,17 +46,19 @@ def authenticate(self, code=None, state=None):
4646

4747
# Get the token
4848
response = requests.post(self.OIDC_OP_TOKEN_ENDPOINT,
49-
data=token_payload,
49+
json=token_payload,
5050
verify=import_from_settings('VERIFY_SSL', True))
5151
# Validate the token
52-
payload = self.verify_token(response.get('id_token'))
52+
token_response = response.json()
53+
payload = self.verify_token(token_response.get('id_token'))
5354

5455
if payload:
5556
query = urlencode({
56-
'access_token': response.get('access_token')
57+
'access_token': token_response.get('access_token')
5758
})
58-
user_info = requests.get('{url}?{query}'.format(url=self.OIDC_OP_USER_ENDPOINT,
59-
query=query))
59+
user_response = requests.get('{url}?{query}'.format(url=self.OIDC_OP_USER_ENDPOINT,
60+
query=query))
61+
user_info = user_response.json()
6062

6163
try:
6264
return self.UserModel.objects.get(email=user_info['verified_email'])

tests/test_auth.py

Lines changed: 35 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from mock import patch
1+
from mock import Mock, patch
22

33
from django.contrib.auth import get_user_model
44
from django.core.urlresolvers import reverse
@@ -26,14 +26,18 @@ def test_invalid_token(self, request_mock, token_mock):
2626
"""Test authentication with an invalid token."""
2727

2828
token_mock.return_value = None
29-
request_mock.get.return_value = {
29+
get_json_mock = Mock()
30+
get_json_mock.json.return_value = {
3031
'username': 'username',
3132
'verified_email': '[email protected]'
3233
}
33-
request_mock.post.return_value = {
34+
request_mock.get.return_value = get_json_mock
35+
post_json_mock = Mock()
36+
post_json_mock.json.return_value = {
3437
'id_token': 'id_token',
3538
'accesss_token': 'access_token'
3639
}
40+
request_mock.post.return_value = post_json_mock
3741
self.assertEqual(self.backend.authenticate(code='foo', state='bar'), None)
3842

3943
def test_get_user(self):
@@ -55,14 +59,19 @@ def test_successful_authentication_existing_user(self, token_mock, request_mock)
5559
user = User.objects.create_user(username='a_username',
5660
5761
token_mock.return_value = True
58-
request_mock.get.return_value = {
62+
get_json_mock = Mock()
63+
get_json_mock.json.return_value = {
5964
'username': 'a_username',
6065
'verified_email': '[email protected]'
6166
}
62-
request_mock.post.return_value = {
67+
request_mock.get.return_value = get_json_mock
68+
post_json_mock = Mock()
69+
post_json_mock.json.return_value = {
6370
'id_token': 'id_token',
6471
'access_token': 'access_granted'
6572
}
73+
request_mock.post.return_value = post_json_mock
74+
6675
post_data = {
6776
'client_id': 'example_id',
6877
'client_secret': 'example_secret',
@@ -73,7 +82,7 @@ def test_successful_authentication_existing_user(self, token_mock, request_mock)
7382
self.assertEqual(self.backend.authenticate(code='foo', state='bar'), user)
7483
token_mock.assert_called_once_with('id_token')
7584
request_mock.post.assert_called_once_with('https://server.example.com/token',
76-
data=post_data,
85+
json=post_data,
7786
verify=True)
7887
request_mock.get.assert_called_once_with(
7988
'https://server.example.com/user?access_token=access_granted'
@@ -85,14 +94,18 @@ def test_successful_authentication_new_user(self, token_mock, request_mock):
8594
"""Test successful authentication and user creation."""
8695

8796
token_mock.return_value = True
88-
request_mock.get.return_value = {
97+
get_json_mock = Mock()
98+
get_json_mock.json.return_value = {
8999
'username': 'a_username',
90100
'verified_email': '[email protected]'
91101
}
92-
request_mock.post.return_value = {
102+
request_mock.get.return_value = get_json_mock
103+
post_json_mock = Mock()
104+
post_json_mock.json.return_value = {
93105
'id_token': 'id_token',
94106
'access_token': 'access_granted'
95107
}
108+
request_mock.post.return_value = post_json_mock
96109
post_data = {
97110
'client_id': 'example_id',
98111
'client_secret': 'example_secret',
@@ -109,7 +122,7 @@ def test_successful_authentication_new_user(self, token_mock, request_mock):
109122

110123
token_mock.assert_called_once_with('id_token')
111124
request_mock.post.assert_called_once_with('https://server.example.com/token',
112-
data=post_data,
125+
json=post_data,
113126
verify=True)
114127
request_mock.get.assert_called_once_with(
115128
'https://server.example.com/user?access_token=access_granted'
@@ -125,14 +138,18 @@ def test_authenticate_no_code_no_state(self):
125138
def test_jwt_decode_params(self, request_mock, jwt_mock):
126139
"""Test jwt verification signature."""
127140

128-
request_mock.get.return_value = {
141+
get_json_mock = Mock()
142+
get_json_mock.json.return_value = {
129143
'username': 'username',
130144
'verified_email': '[email protected]'
131145
}
132-
request_mock.post.return_value = {
146+
request_mock.get.return_value = get_json_mock
147+
post_json_mock = Mock()
148+
post_json_mock.json.return_value = {
133149
'id_token': 'token',
134150
'access_token': 'access_token'
135151
}
152+
request_mock.post.return_value = post_json_mock
136153
self.backend.authenticate(code='foo', state='bar')
137154
jwt_mock.decode.assert_called_once_with('token', 'example_secret', verify=True)
138155

@@ -142,13 +159,18 @@ def test_jwt_decode_params(self, request_mock, jwt_mock):
142159
def test_jwt_decode_params_verify_false(self, request_mock, jwt_mock):
143160
"""Test jwt verification signature with verify False"""
144161

145-
request_mock.get.return_value = {
162+
get_json_mock = Mock()
163+
get_json_mock.json.return_value = {
146164
'username': 'username',
147165
'verified_email': '[email protected]'
148166
}
149-
request_mock.post.return_value = {
167+
request_mock.get.return_value = get_json_mock
168+
post_json_mock = Mock()
169+
post_json_mock.json.return_value = {
150170
'id_token': 'token',
151171
'access_token': 'access_token'
152172
}
173+
request_mock.post.return_value = post_json_mock
174+
153175
self.backend.authenticate(code='foo', state='bar')
154176
jwt_mock.decode.assert_called_once_with('token', 'example_secret', verify=False)

0 commit comments

Comments
 (0)