mirror of
https://github.com/ansible/awx.git
synced 2026-01-13 19:10:07 -03:30
fix token creation
This commit is contained in:
parent
d7616accf5
commit
fa7647f828
@ -970,7 +970,7 @@ class UserAuthorizedTokenSerializer(BaseSerializer):
|
||||
obj = super(OAuth2TokenSerializer, self).create(validated_data)
|
||||
obj.save()
|
||||
if obj.application is not None:
|
||||
OAuth2RefreshToken.objects.create(
|
||||
RefreshToken.objects.create(
|
||||
user=self.context['request'].user,
|
||||
token=generate_token(),
|
||||
application=obj.application,
|
||||
@ -1097,7 +1097,7 @@ class OAuth2TokenSerializer(BaseSerializer):
|
||||
obj.user = obj.application.user
|
||||
obj.save()
|
||||
if obj.application is not None:
|
||||
OAuth2RefreshToken.objects.create(
|
||||
RefreshToken.objects.create(
|
||||
user=obj.application.user if obj.application.user else None,
|
||||
token=generate_token(),
|
||||
application=obj.application,
|
||||
@ -1151,7 +1151,7 @@ class OAuth2AuthorizedTokenSerializer(BaseSerializer):
|
||||
obj.user = obj.application.user
|
||||
obj.save()
|
||||
if obj.application is not None:
|
||||
OAuth2RefreshToken.objects.create(
|
||||
RefreshToken.objects.create(
|
||||
user=obj.application.user if obj.application.user else None,
|
||||
token=generate_token(),
|
||||
application=obj.application,
|
||||
|
||||
@ -55,21 +55,6 @@ class Migration(migrations.Migration):
|
||||
'verbose_name': 'access token',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='OAuth2RefreshToken',
|
||||
fields=[
|
||||
('id', models.BigAutoField(primary_key=True, serialize=False)),
|
||||
('token', models.CharField(max_length=255, unique=True)),
|
||||
('created', models.DateTimeField(auto_now_add=True)),
|
||||
('updated', models.DateTimeField(auto_now=True)),
|
||||
('access_token', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='refresh_token', to=settings.OAUTH2_PROVIDER_ACCESS_TOKEN_MODEL)),
|
||||
('application', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.OAUTH2_PROVIDER_APPLICATION_MODEL)),
|
||||
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='main_oauth2refreshtoken', to=settings.AUTH_USER_MODEL)),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'refresh token',
|
||||
},
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='activitystream',
|
||||
name='o_auth2_access_token',
|
||||
|
||||
@ -26,8 +26,8 @@ from awx.main.models.workflow import * # noqa
|
||||
from awx.main.models.channels import * # noqa
|
||||
from awx.api.versioning import reverse
|
||||
from awx.main.models.oauth import * # noqa
|
||||
from oauth2_provider.models import Grant, RefreshToken # noqa -- needed django-oauth-toolkit model migrations
|
||||
|
||||
from oauth2_provider.models import Grant # noqa
|
||||
|
||||
|
||||
# Monkeypatch Django serializer to ignore django-taggit fields (which break
|
||||
|
||||
@ -8,12 +8,12 @@ from django.utils.timezone import now
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
# Django OAuth Toolkit
|
||||
from oauth2_provider.models import AbstractApplication, AbstractAccessToken, AbstractRefreshToken
|
||||
from oauth2_provider.models import AbstractApplication, AbstractAccessToken
|
||||
|
||||
|
||||
DATA_URI_RE = re.compile(r'.*') # FIXME
|
||||
|
||||
__all__ = ['OAuth2AccessToken', 'OAuth2Application', 'OAuth2RefreshToken']
|
||||
__all__ = ['OAuth2AccessToken', 'OAuth2Application']
|
||||
|
||||
|
||||
class OAuth2Application(AbstractApplication):
|
||||
@ -57,17 +57,3 @@ class OAuth2AccessToken(AbstractAccessToken):
|
||||
self.save(update_fields=['last_used'])
|
||||
return valid
|
||||
|
||||
|
||||
class OAuth2RefreshToken(AbstractRefreshToken):
|
||||
|
||||
class Meta:
|
||||
app_label = 'main'
|
||||
verbose_name = _('refresh token')
|
||||
|
||||
application = models.ForeignKey(
|
||||
OAuth2Application,
|
||||
on_delete=models.CASCADE,
|
||||
blank=True,
|
||||
null=True,
|
||||
)
|
||||
|
||||
|
||||
@ -1,12 +1,31 @@
|
||||
import pytest
|
||||
import base64
|
||||
|
||||
from awx.api.versioning import reverse
|
||||
from awx.api.versioning import reverse, drf_reverse
|
||||
from awx.main.models.oauth import (OAuth2Application as Application,
|
||||
OAuth2AccessToken as AccessToken,
|
||||
OAuth2RefreshToken as RefreshToken
|
||||
)
|
||||
from oauth2_provider.models import RefreshToken
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_personal_access_token_creation(oauth_application, post, alice):
|
||||
url = drf_reverse('api:oauth_authorization_root_view') + 'token/'
|
||||
resp = post(
|
||||
url,
|
||||
data='grant_type=password&username=alice&password=alice&scope=read',
|
||||
content_type='application/x-www-form-urlencoded',
|
||||
HTTP_AUTHORIZATION='Basic ' + base64.b64encode(':'.join([
|
||||
oauth_application.client_id, oauth_application.client_secret
|
||||
]))
|
||||
)
|
||||
|
||||
resp_json = resp._container[0]
|
||||
assert 'access_token' in resp_json
|
||||
assert 'scope' in resp_json
|
||||
assert 'refresh_token' in resp_json
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_oauth_application_create(admin, post):
|
||||
response = post(
|
||||
@ -48,7 +67,6 @@ def test_oauth_application_update(oauth_application, patch, admin, alice):
|
||||
assert updated_app.user == admin
|
||||
|
||||
|
||||
@pytest.mark.skip(reason="Needs Update - CA")
|
||||
@pytest.mark.django_db
|
||||
def test_oauth_token_create(oauth_application, get, post, admin):
|
||||
response = post(
|
||||
@ -76,7 +94,7 @@ def test_oauth_token_create(oauth_application, get, post, admin):
|
||||
)
|
||||
assert response.data['summary_fields']['tokens']['count'] == 1
|
||||
assert response.data['summary_fields']['tokens']['results'][0] == {
|
||||
'id': token.pk, 'token': token.token
|
||||
'id': token.pk, 'scope': token.scope, 'token': '**************'
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -531,7 +531,7 @@ def _request(verb):
|
||||
user = data_or_user
|
||||
elif 'data' not in kwargs:
|
||||
kwargs['data'] = data_or_user
|
||||
if 'format' not in kwargs:
|
||||
if 'format' not in kwargs and 'content_type' not in kwargs:
|
||||
kwargs['format'] = 'json'
|
||||
|
||||
view, view_args, view_kwargs = resolve(urlparse(url)[2])
|
||||
|
||||
@ -338,7 +338,6 @@ AUTHENTICATION_BACKENDS = (
|
||||
# Django OAuth Toolkit settings
|
||||
OAUTH2_PROVIDER_APPLICATION_MODEL = 'main.OAuth2Application'
|
||||
OAUTH2_PROVIDER_ACCESS_TOKEN_MODEL = 'main.OAuth2AccessToken'
|
||||
OAUTH2_PROVIDER_REFRESH_TOKEN_MODEL = 'main.OAuth2RefreshToken'
|
||||
|
||||
OAUTH2_PROVIDER = {}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user