Fix: Token Model crashes in Django Admin when a token has been given to a Client using Client Credentials.
This commit is contained in:
parent
6e442a5f35
commit
d825061508
|
@ -145,15 +145,12 @@ class BaseCodeTokenModel(models.Model):
|
||||||
def scope(self, value):
|
def scope(self, value):
|
||||||
self._scope = ' '.join(value)
|
self._scope = ' '.join(value)
|
||||||
|
|
||||||
def has_expired(self):
|
|
||||||
return timezone.now() >= self.expires_at
|
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
return u'{0} - {1}'.format(self.client, self.user.email)
|
|
||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
return self.__str__()
|
return self.__str__()
|
||||||
|
|
||||||
|
def has_expired(self):
|
||||||
|
return timezone.now() >= self.expires_at
|
||||||
|
|
||||||
|
|
||||||
class Code(BaseCodeTokenModel):
|
class Code(BaseCodeTokenModel):
|
||||||
|
|
||||||
|
@ -170,6 +167,9 @@ class Code(BaseCodeTokenModel):
|
||||||
verbose_name = _(u'Authorization Code')
|
verbose_name = _(u'Authorization Code')
|
||||||
verbose_name_plural = _(u'Authorization Codes')
|
verbose_name_plural = _(u'Authorization Codes')
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return u'{0} - {1}'.format(self.client, self.code)
|
||||||
|
|
||||||
|
|
||||||
class Token(BaseCodeTokenModel):
|
class Token(BaseCodeTokenModel):
|
||||||
|
|
||||||
|
@ -179,6 +179,10 @@ class Token(BaseCodeTokenModel):
|
||||||
refresh_token = models.CharField(max_length=255, unique=True, verbose_name=_(u'Refresh Token'))
|
refresh_token = models.CharField(max_length=255, unique=True, verbose_name=_(u'Refresh Token'))
|
||||||
_id_token = models.TextField(verbose_name=_(u'ID Token'))
|
_id_token = models.TextField(verbose_name=_(u'ID Token'))
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
verbose_name = _(u'Token')
|
||||||
|
verbose_name_plural = _(u'Tokens')
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def id_token(self):
|
def id_token(self):
|
||||||
return json.loads(self._id_token)
|
return json.loads(self._id_token)
|
||||||
|
@ -187,9 +191,8 @@ class Token(BaseCodeTokenModel):
|
||||||
def id_token(self, value):
|
def id_token(self, value):
|
||||||
self._id_token = json.dumps(value)
|
self._id_token = json.dumps(value)
|
||||||
|
|
||||||
class Meta:
|
def __str__(self):
|
||||||
verbose_name = _(u'Token')
|
return u'{0} - {1}'.format(self.client, self.access_token)
|
||||||
verbose_name_plural = _(u'Tokens')
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def at_hash(self):
|
def at_hash(self):
|
||||||
|
|
|
@ -751,8 +751,8 @@ class TokenTestCase(TestCase):
|
||||||
id_token = self._request_id_token_with_scope(['openid', 'profile'])
|
id_token = self._request_id_token_with_scope(['openid', 'profile'])
|
||||||
kwargs_passed = id_token.get('kwargs_passed_to_processing_hook')
|
kwargs_passed = id_token.get('kwargs_passed_to_processing_hook')
|
||||||
assert kwargs_passed
|
assert kwargs_passed
|
||||||
self.assertEqual(kwargs_passed.get('token'),
|
self.assertTrue(kwargs_passed.get('token').startswith(
|
||||||
'<Token: Some Client - johndoe@example.com>')
|
'<Token: Some Client -'))
|
||||||
self.assertEqual(kwargs_passed.get('request'),
|
self.assertEqual(kwargs_passed.get('request'),
|
||||||
"<WSGIRequest: POST '/openid/token'>")
|
"<WSGIRequest: POST '/openid/token'>")
|
||||||
self.assertEqual(set(kwargs_passed.keys()), {'token', 'request'})
|
self.assertEqual(set(kwargs_passed.keys()), {'token', 'request'})
|
||||||
|
@ -835,3 +835,18 @@ class TokenTestCase(TestCase):
|
||||||
# It should fail when client does not have any scope added.
|
# It should fail when client does not have any scope added.
|
||||||
self.assertEqual(400, response.status_code)
|
self.assertEqual(400, response.status_code)
|
||||||
self.assertEqual('invalid_scope', response_dict['error'])
|
self.assertEqual('invalid_scope', response_dict['error'])
|
||||||
|
|
||||||
|
def test_printing_token_used_by_client_credentials_grant_type(self):
|
||||||
|
# Add scope for this client.
|
||||||
|
self.client.scope = ['something']
|
||||||
|
self.client.save()
|
||||||
|
|
||||||
|
post_data = {
|
||||||
|
'client_id': self.client.client_id,
|
||||||
|
'client_secret': self.client.client_secret,
|
||||||
|
'grant_type': 'client_credentials',
|
||||||
|
}
|
||||||
|
response = self._post_request(post_data)
|
||||||
|
response_dict = json.loads(response.content.decode('utf-8'))
|
||||||
|
token = Token.objects.get(access_token=response_dict['access_token'])
|
||||||
|
self.assertTrue(str(token))
|
||||||
|
|
Loading…
Reference in a new issue