Skip to content

Commit

Permalink
add get_decoded_jwt_from_cookie
Browse files Browse the repository at this point in the history
ARCH-603
  • Loading branch information
robrap committed Apr 1, 2019
1 parent 0c5ec26 commit 2f4c168
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 1 deletion.
2 changes: 1 addition & 1 deletion edx_rest_framework_extensions/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
""" edx Django REST Framework extensions. """

__version__ = '2.1.0' # pragma: no cover
__version__ = '2.2.0' # pragma: no cover
15 changes: 15 additions & 0 deletions edx_rest_framework_extensions/auth/jwt/cookies.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
"""

from django.conf import settings
from edx_rest_framework_extensions.auth.jwt.decoder import jwt_decode_handler


def jwt_cookie_name():
Expand All @@ -19,3 +20,17 @@ def jwt_cookie_signature_name():

def jwt_refresh_cookie_name():
return settings.JWT_AUTH.get('JWT_AUTH_REFRESH_COOKIE') or 'edx-jwt-refresh-cookie'


def get_decoded_jwt(request):
"""
Grab jwt from jwt cookie in request if possible.
Returns a decoded jwt dict if it can be found.
Returns None if the jwt is not found.
"""
jwt_cookie = request.COOKIES.get(jwt_cookie_name(), None)

if not jwt_cookie:
return None
return jwt_decode_handler(jwt_cookie)
20 changes: 20 additions & 0 deletions edx_rest_framework_extensions/auth/jwt/tests/test_cookies.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,12 @@
Unit tests for jwt cookies module.
"""
import ddt
import mock
from django.test import override_settings, TestCase

from edx_rest_framework_extensions.auth.jwt.decoder import jwt_decode_handler
from edx_rest_framework_extensions.auth.jwt.tests.utils import generate_latest_version_payload, generate_jwt_token
from edx_rest_framework_extensions.tests.factories import UserFactory
from .. import cookies


Expand All @@ -29,3 +33,19 @@ def test_get_setting_value(self, jwt_cookie_func, setting_name, setting_value):
@ddt.unpack
def test_get_default_value(self, jwt_cookie_func, expected_default_value):
self.assertEqual(jwt_cookie_func(), expected_default_value)

def test_get_decoded_jwt_from_existing_cookie(self):
user = UserFactory()
payload = generate_latest_version_payload(user)
jwt = generate_jwt_token(payload)
expected_decoded_jwt = jwt_decode_handler(jwt)

mock_request_with_cookie = mock.Mock(COOKIES={'edx-jwt-cookie': jwt})

decoded_jwt = cookies.get_decoded_jwt(mock_request_with_cookie)
self.assertEquals(expected_decoded_jwt, decoded_jwt)

def test_get_decoded_jwt_when_no_cookie(self):
mock_request = mock.Mock(COOKIES={})

self.assertIsNone(cookies.get_decoded_jwt(mock_request))

0 comments on commit 2f4c168

Please sign in to comment.