def test_token_from_cookie(self): request = Mock() request.COOKIES = { RidiOAuth2Config.get_access_token_cookie_key(): 'this-is-access-token', RidiOAuth2Config.get_refresh_token_cookie_key(): 'this-is-refresh-token' } token = get_token_from_cookie(request=request) self.assertEqual(token.access_token.token, 'this-is-access-token') self.assertEqual(token.refresh_token.token, 'this-is-refresh-token')
def get_token_info(token: str) -> typing.Optional[AccessTokenInfo]: try: token_info = JwtIntrospectHelper.introspect(jwt_info=RidiOAuth2Config.get_jwt_info(), access_token=token) except (KeyError, ExpireTokenException, InvalidJwtSignatureException): token_info = None return token_info
def test_login_and_loose_token(self): request = Mock() request.COOKIES = { RidiOAuth2Config.get_access_token_cookie_key(): self.loose_token, } response = self.middleware.process_request(request=request) self.assertIsNone(response, HttpUnauthorizedResponse) self.assertIsInstance(request.user, AnonymousUser) self.assertFalse(request.user.is_authenticated)
def test_login_and_not_expire(self): request = Mock() request.COOKIES = { RidiOAuth2Config.get_access_token_cookie_key(): self.valid_token, } response = self.middleware.process_request(request=request) self.assertIsNone(response) self.assertTrue(request.user.is_authenticated) self.assertIsInstance(request.user, get_user_model()) self.assertEqual(request.user.u_idx, request.user.token_info.u_idx)
def test_login(self): request = Mock() request.COOKIES = { RidiOAuth2Config.get_access_token_cookie_key(): jwt.encode(payload=self.jwt_payload, key='dummy_jwt_secret').decode(), } self.middleware.process_request(request) response = self.dummy_view(None, request) self.assertIsInstance(response, HttpResponse) self.assertEqual(response.status_code, 200) self.assertEqual(response.content.decode(), 'success')
def test_not_exists_token_info(self): request = Mock() request.COOKIES = { RidiOAuth2Config.get_access_token_cookie_key(): jwt.encode(payload=self.jwt_payload, key='dummy_jwt_secret').decode(), } self.middleware.process_request(request) del request.user.token_info response1 = self.dummy_view(None, request) self.assertIsNone(getattr(request.user, 'token_info', None)) self.assertIsInstance(response1, HttpUnauthorizedResponse) self.assertEqual(response1.status_code, 401)
def test_restriction_scope_with_custom_response(self): request = Mock() request.COOKIES = { RidiOAuth2Config.get_access_token_cookie_key(): jwt.encode(payload=self.jwt_loose_payload, key='dummy_jwt_secret').decode(), } self.middleware.process_request(request) response = self.dummy_view_with_custom_response(None, request) self.assertIn('user_info', request.user.token_info.scope) self.assertIsInstance(response, HttpResponse) self.assertEqual(response.content, b'tetete') self.assertEqual(response.status_code, 200)
def test_restriction_scope(self): request = Mock() request.COOKIES = { RidiOAuth2Config.get_access_token_cookie_key(): jwt.encode(payload=self.jwt_loose_payload, key='dummy_jwt_secret').decode(), } self.middleware.process_request(request) response1 = self.dummy_view1(None, request) response2 = self.dummy_view2(None, request) self.assertIn('user_info', request.user.token_info.scope) self.assertIsInstance(response1, HttpResponse) self.assertEqual(response1.status_code, 200) self.assertEqual(response1.content.decode(), 'success1') self.assertIsInstance(response2, HttpResponseForbidden) self.assertEqual(response2.status_code, 403)
def _get_refresh_token_from_cookie(request: HttpRequest) -> str: return request.COOKIES.get(RidiOAuth2Config.get_refresh_token_cookie_key())
def generate_cookie(access_token: str) -> typing.Dict: return {RidiOAuth2Config.get_access_token_cookie_key(): access_token}