Skip to content

Commit ece5f43

Browse files
ryanpetrellojleclanche
authored andcommitted
Fix Refresh Token revocation when the access token does not exist
Fixes jazzband#625 (cherry picked from commit ef6767f)
1 parent 0f6252b commit ece5f43

File tree

2 files changed

+29
-1
lines changed

2 files changed

+29
-1
lines changed

oauth2_provider/models.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -368,7 +368,10 @@ def revoke(self):
368368
if not self:
369369
return
370370

371-
access_token_model.objects.get(id=self.access_token_id).revoke()
371+
try:
372+
access_token_model.objects.get(id=self.access_token_id).revoke()
373+
except access_token_model.DoesNotExist:
374+
pass
372375
self.access_token = None
373376
self.revoked = timezone.now()
374377
self.save()

tests/test_token_revocation.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,31 @@ def test_revoke_refresh_token(self):
153153
self.assertIsNotNone(refresh_token.revoked)
154154
self.assertFalse(AccessToken.objects.filter(id=rtok.access_token.id).exists())
155155

156+
def test_revoke_refresh_token_with_revoked_access_token(self):
157+
tok = AccessToken.objects.create(
158+
user=self.test_user, token="1234567890",
159+
application=self.application,
160+
expires=timezone.now() + datetime.timedelta(days=1),
161+
scope="read write"
162+
)
163+
rtok = RefreshToken.objects.create(
164+
user=self.test_user, token="999999999",
165+
application=self.application, access_token=tok
166+
)
167+
for token in (tok.token, rtok.token):
168+
query_string = urlencode({
169+
"client_id": self.application.client_id,
170+
"client_secret": self.application.client_secret,
171+
"token": token,
172+
})
173+
url = "{url}?{qs}".format(url=reverse("oauth2_provider:revoke-token"), qs=query_string)
174+
response = self.client.post(url)
175+
self.assertEqual(response.status_code, 200)
176+
177+
self.assertFalse(AccessToken.objects.filter(id=tok.id).exists())
178+
refresh_token = RefreshToken.objects.filter(id=rtok.id).first()
179+
self.assertIsNotNone(refresh_token.revoked)
180+
156181
def test_revoke_token_with_wrong_hint(self):
157182
"""
158183
From the revocation rfc, `Section 4.1.2`_ :

0 commit comments

Comments
 (0)