2929AccessToken = get_access_token_model ()
3030UserModel = get_user_model ()
3131
32- exp = datetime .datetime .now () + datetime .timedelta (days = 1 )
32+ default_exp = datetime .datetime .now () + datetime .timedelta (days = 1 )
3333
3434
3535class ScopeResourceView (ScopedProtectedResourceView ):
@@ -42,27 +42,28 @@ def post(self, request, *args, **kwargs):
4242 return HttpResponse ("This is a protected resource" , 200 )
4343
4444
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+
4554def mocked_requests_post (url , data , * args , ** kwargs ):
4655 """
4756 Mock the response from the authentication server
4857 """
4958
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-
5859 if "token" in data and data ["token" ] and data ["token" ] != "12345678900" :
5960 return MockResponse (
6061 {
6162 "active" : True ,
6263 "scope" : "read write dolphin" ,
6364 "client_id" : "client_id_{}" .format (data ["token" ]),
6465 "username" : "{}_user" .format (data ["token" ]),
65- "exp" : int (calendar .timegm (exp .timetuple ())),
66+ "exp" : int (calendar .timegm (default_exp .timetuple ())),
6667 },
6768 200 ,
6869 )
@@ -75,6 +76,21 @@ def json(self):
7576 )
7677
7778
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+
7894urlpatterns = [
7995 path ("oauth2/" , include ("oauth2_provider.urls" )),
8096 path ("oauth2-test-resource/" , ScopeResourceView .as_view ()),
@@ -152,24 +168,76 @@ def test_get_token_from_authentication_server_existing_token(self, mock_get):
152168 self .assertEqual (token .user .username , "foo_user" )
153169 self .assertEqual (token .scope , "read write dolphin" )
154170
155- @mock .patch ("requests.post" , side_effect = mocked_requests_post )
156- def test_get_token_from_authentication_server_expires_timezone (self , mock_get ):
171+ @mock .patch ("requests.post" , side_effect = mocked_introspect_request_short_living_token )
172+ def test_get_token_from_authentication_server_expires_no_timezone (self , mock_get ):
157173 """
158174 Test method _get_token_from_authentication_server for projects with USE_TZ False
159175 """
160176 settings_use_tz_backup = settings .USE_TZ
161177 settings .USE_TZ = False
162178 try :
163- self .validator ._get_token_from_authentication_server (
179+ access_token = self .validator ._get_token_from_authentication_server (
180+ "foo" ,
181+ oauth2_settings .RESOURCE_SERVER_INTROSPECTION_URL ,
182+ oauth2_settings .RESOURCE_SERVER_AUTH_TOKEN ,
183+ oauth2_settings .RESOURCE_SERVER_INTROSPECTION_CREDENTIALS ,
184+ )
185+
186+ self .assertFalse (access_token .is_expired ())
187+ except ValueError as exception :
188+ self .fail (str (exception ))
189+ finally :
190+ settings .USE_TZ = settings_use_tz_backup
191+
192+ @mock .patch ("requests.post" , side_effect = mocked_introspect_request_short_living_token )
193+ def test_get_token_from_authentication_server_expires_utc_timezone (self , mock_get ):
194+ """
195+ Test method _get_token_from_authentication_server for projects with USE_TZ True and a UTC Timezone
196+ """
197+ settings_use_tz_backup = settings .USE_TZ
198+ settings_time_zone_backup = settings .TIME_ZONE
199+ settings .USE_TZ = True
200+ settings .TIME_ZONE = "UTC"
201+ try :
202+ access_token = self .validator ._get_token_from_authentication_server (
164203 "foo" ,
165204 oauth2_settings .RESOURCE_SERVER_INTROSPECTION_URL ,
166205 oauth2_settings .RESOURCE_SERVER_AUTH_TOKEN ,
167206 oauth2_settings .RESOURCE_SERVER_INTROSPECTION_CREDENTIALS ,
168207 )
208+
209+ self .assertFalse (access_token .is_expired ())
210+ except ValueError as exception :
211+ self .fail (str (exception ))
212+ finally :
213+ settings .USE_TZ = settings_use_tz_backup
214+ settings .TIME_ZONE = settings_time_zone_backup
215+
216+ @mock .patch ("requests.post" , side_effect = mocked_introspect_request_short_living_token )
217+ def test_get_token_from_authentication_server_expires_non_utc_timezone (self , mock_get ):
218+ """
219+ Test method _get_token_from_authentication_server for projects with USE_TZ True and a non UTC Timezone
220+
221+ This test is important to check if the UTC Exp. date gets converted correctly
222+ """
223+ settings_use_tz_backup = settings .USE_TZ
224+ settings_time_zone_backup = settings .TIME_ZONE
225+ settings .USE_TZ = True
226+ settings .TIME_ZONE = "Europe/Amsterdam"
227+ try :
228+ access_token = self .validator ._get_token_from_authentication_server (
229+ "foo" ,
230+ oauth2_settings .RESOURCE_SERVER_INTROSPECTION_URL ,
231+ oauth2_settings .RESOURCE_SERVER_AUTH_TOKEN ,
232+ oauth2_settings .RESOURCE_SERVER_INTROSPECTION_CREDENTIALS ,
233+ )
234+
235+ self .assertFalse (access_token .is_expired ())
169236 except ValueError as exception :
170237 self .fail (str (exception ))
171238 finally :
172239 settings .USE_TZ = settings_use_tz_backup
240+ settings .TIME_ZONE = settings_time_zone_backup
173241
174242 @mock .patch ("requests.post" , side_effect = mocked_requests_post )
175243 def test_validate_bearer_token (self , mock_get ):
0 commit comments