Skip to content

Commit 5b51da7

Browse files
ryanpetrellojleclanche
authored andcommitted
Fix Refresh Token revocation when the access token does not exist
Fixes #625
1 parent 07f6430 commit 5b51da7

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
@@ -377,7 +377,10 @@ def revoke(self):
377377
if not self:
378378
return
379379

380-
access_token_model.objects.get(id=self.access_token_id).revoke()
380+
try:
381+
access_token_model.objects.get(id=self.access_token_id).revoke()
382+
except access_token_model.DoesNotExist:
383+
pass
381384
self.access_token = None
382385
self.revoked = timezone.now()
383386
self.save()

tests/test_token_revocation.py

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

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

0 commit comments

Comments
 (0)