29
29
AccessToken = get_access_token_model ()
30
30
UserModel = get_user_model ()
31
31
32
- exp = datetime .datetime .now () + datetime .timedelta (days = 1 )
32
+ default_exp = datetime .datetime .now () + datetime .timedelta (days = 1 )
33
33
34
34
35
35
class ScopeResourceView (ScopedProtectedResourceView ):
@@ -42,27 +42,28 @@ def post(self, request, *args, **kwargs):
42
42
return HttpResponse ("This is a protected resource" , 200 )
43
43
44
44
45
+ class MockResponse :
46
+ def __init__ (self , json_data , status_code ):
47
+ self .json_data = json_data
48
+ self .status_code = status_code
49
+
50
+ def json (self ):
51
+ return self .json_data
52
+
53
+
45
54
def mocked_requests_post (url , data , * args , ** kwargs ):
46
55
"""
47
56
Mock the response from the authentication server
48
57
"""
49
58
50
- class MockResponse :
51
- def __init__ (self , json_data , status_code ):
52
- self .json_data = json_data
53
- self .status_code = status_code
54
-
55
- def json (self ):
56
- return self .json_data
57
-
58
59
if "token" in data and data ["token" ] and data ["token" ] != "12345678900" :
59
60
return MockResponse (
60
61
{
61
62
"active" : True ,
62
63
"scope" : "read write dolphin" ,
63
64
"client_id" : "client_id_{}" .format (data ["token" ]),
64
65
"username" : "{}_user" .format (data ["token" ]),
65
- "exp" : int (calendar .timegm (exp .timetuple ())),
66
+ "exp" : int (calendar .timegm (default_exp .timetuple ())),
66
67
},
67
68
200 ,
68
69
)
@@ -75,6 +76,21 @@ def json(self):
75
76
)
76
77
77
78
79
+ def mocked_introspect_request_short_living_token (url , data , * args , ** kwargs ):
80
+ exp = datetime .datetime .now () + datetime .timedelta (minutes = 30 )
81
+
82
+ return MockResponse (
83
+ {
84
+ "active" : True ,
85
+ "scope" : "read write dolphin" ,
86
+ "client_id" : "client_id_{}" .format (data ["token" ]),
87
+ "username" : "{}_user" .format (data ["token" ]),
88
+ "exp" : int (calendar .timegm (exp .timetuple ())),
89
+ },
90
+ 200 ,
91
+ )
92
+
93
+
78
94
urlpatterns = [
79
95
path ("oauth2/" , include ("oauth2_provider.urls" )),
80
96
path ("oauth2-test-resource/" , ScopeResourceView .as_view ()),
@@ -156,24 +172,76 @@ def test_get_token_from_authentication_server_existing_token(self, mock_get):
156
172
self .assertEqual (token .user .username , "foo_user" )
157
173
self .assertEqual (token .scope , "read write dolphin" )
158
174
159
- @mock .patch ("requests.post" , side_effect = mocked_requests_post )
160
- def test_get_token_from_authentication_server_expires_timezone (self , mock_get ):
175
+ @mock .patch ("requests.post" , side_effect = mocked_introspect_request_short_living_token )
176
+ def test_get_token_from_authentication_server_expires_no_timezone (self , mock_get ):
161
177
"""
162
178
Test method _get_token_from_authentication_server for projects with USE_TZ False
163
179
"""
164
180
settings_use_tz_backup = settings .USE_TZ
165
181
settings .USE_TZ = False
166
182
try :
167
- self .validator ._get_token_from_authentication_server (
183
+ access_token = self .validator ._get_token_from_authentication_server (
184
+ "foo" ,
185
+ oauth2_settings .RESOURCE_SERVER_INTROSPECTION_URL ,
186
+ oauth2_settings .RESOURCE_SERVER_AUTH_TOKEN ,
187
+ oauth2_settings .RESOURCE_SERVER_INTROSPECTION_CREDENTIALS ,
188
+ )
189
+
190
+ self .assertFalse (access_token .is_expired ())
191
+ except ValueError as exception :
192
+ self .fail (str (exception ))
193
+ finally :
194
+ settings .USE_TZ = settings_use_tz_backup
195
+
196
+ @mock .patch ("requests.post" , side_effect = mocked_introspect_request_short_living_token )
197
+ def test_get_token_from_authentication_server_expires_utc_timezone (self , mock_get ):
198
+ """
199
+ Test method _get_token_from_authentication_server for projects with USE_TZ True and a UTC Timezone
200
+ """
201
+ settings_use_tz_backup = settings .USE_TZ
202
+ settings_time_zone_backup = settings .TIME_ZONE
203
+ settings .USE_TZ = True
204
+ settings .TIME_ZONE = "UTC"
205
+ try :
206
+ access_token = self .validator ._get_token_from_authentication_server (
168
207
"foo" ,
169
208
oauth2_settings .RESOURCE_SERVER_INTROSPECTION_URL ,
170
209
oauth2_settings .RESOURCE_SERVER_AUTH_TOKEN ,
171
210
oauth2_settings .RESOURCE_SERVER_INTROSPECTION_CREDENTIALS ,
172
211
)
212
+
213
+ self .assertFalse (access_token .is_expired ())
214
+ except ValueError as exception :
215
+ self .fail (str (exception ))
216
+ finally :
217
+ settings .USE_TZ = settings_use_tz_backup
218
+ settings .TIME_ZONE = settings_time_zone_backup
219
+
220
+ @mock .patch ("requests.post" , side_effect = mocked_introspect_request_short_living_token )
221
+ def test_get_token_from_authentication_server_expires_non_utc_timezone (self , mock_get ):
222
+ """
223
+ Test method _get_token_from_authentication_server for projects with USE_TZ True and a non UTC Timezone
224
+
225
+ This test is important to check if the UTC Exp. date gets converted correctly
226
+ """
227
+ settings_use_tz_backup = settings .USE_TZ
228
+ settings_time_zone_backup = settings .TIME_ZONE
229
+ settings .USE_TZ = True
230
+ settings .TIME_ZONE = "Europe/Amsterdam"
231
+ try :
232
+ access_token = self .validator ._get_token_from_authentication_server (
233
+ "foo" ,
234
+ oauth2_settings .RESOURCE_SERVER_INTROSPECTION_URL ,
235
+ oauth2_settings .RESOURCE_SERVER_AUTH_TOKEN ,
236
+ oauth2_settings .RESOURCE_SERVER_INTROSPECTION_CREDENTIALS ,
237
+ )
238
+
239
+ self .assertFalse (access_token .is_expired ())
173
240
except ValueError as exception :
174
241
self .fail (str (exception ))
175
242
finally :
176
243
settings .USE_TZ = settings_use_tz_backup
244
+ settings .TIME_ZONE = settings_time_zone_backup
177
245
178
246
@mock .patch ("requests.post" , side_effect = mocked_requests_post )
179
247
def test_validate_bearer_token (self , mock_get ):
0 commit comments