mirror of
https://github.com/ansible/awx.git
synced 2026-03-26 05:15:02 -02:30
fix token creation
This commit is contained in:
@@ -970,7 +970,7 @@ class UserAuthorizedTokenSerializer(BaseSerializer):
|
|||||||
obj = super(OAuth2TokenSerializer, self).create(validated_data)
|
obj = super(OAuth2TokenSerializer, self).create(validated_data)
|
||||||
obj.save()
|
obj.save()
|
||||||
if obj.application is not None:
|
if obj.application is not None:
|
||||||
OAuth2RefreshToken.objects.create(
|
RefreshToken.objects.create(
|
||||||
user=self.context['request'].user,
|
user=self.context['request'].user,
|
||||||
token=generate_token(),
|
token=generate_token(),
|
||||||
application=obj.application,
|
application=obj.application,
|
||||||
@@ -1097,7 +1097,7 @@ class OAuth2TokenSerializer(BaseSerializer):
|
|||||||
obj.user = obj.application.user
|
obj.user = obj.application.user
|
||||||
obj.save()
|
obj.save()
|
||||||
if obj.application is not None:
|
if obj.application is not None:
|
||||||
OAuth2RefreshToken.objects.create(
|
RefreshToken.objects.create(
|
||||||
user=obj.application.user if obj.application.user else None,
|
user=obj.application.user if obj.application.user else None,
|
||||||
token=generate_token(),
|
token=generate_token(),
|
||||||
application=obj.application,
|
application=obj.application,
|
||||||
@@ -1151,7 +1151,7 @@ class OAuth2AuthorizedTokenSerializer(BaseSerializer):
|
|||||||
obj.user = obj.application.user
|
obj.user = obj.application.user
|
||||||
obj.save()
|
obj.save()
|
||||||
if obj.application is not None:
|
if obj.application is not None:
|
||||||
OAuth2RefreshToken.objects.create(
|
RefreshToken.objects.create(
|
||||||
user=obj.application.user if obj.application.user else None,
|
user=obj.application.user if obj.application.user else None,
|
||||||
token=generate_token(),
|
token=generate_token(),
|
||||||
application=obj.application,
|
application=obj.application,
|
||||||
|
|||||||
@@ -55,21 +55,6 @@ class Migration(migrations.Migration):
|
|||||||
'verbose_name': 'access token',
|
'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(
|
migrations.AddField(
|
||||||
model_name='activitystream',
|
model_name='activitystream',
|
||||||
name='o_auth2_access_token',
|
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.main.models.channels import * # noqa
|
||||||
from awx.api.versioning import reverse
|
from awx.api.versioning import reverse
|
||||||
from awx.main.models.oauth import * # noqa
|
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
|
# 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 _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
# Django OAuth Toolkit
|
# 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
|
DATA_URI_RE = re.compile(r'.*') # FIXME
|
||||||
|
|
||||||
__all__ = ['OAuth2AccessToken', 'OAuth2Application', 'OAuth2RefreshToken']
|
__all__ = ['OAuth2AccessToken', 'OAuth2Application']
|
||||||
|
|
||||||
|
|
||||||
class OAuth2Application(AbstractApplication):
|
class OAuth2Application(AbstractApplication):
|
||||||
@@ -57,17 +57,3 @@ class OAuth2AccessToken(AbstractAccessToken):
|
|||||||
self.save(update_fields=['last_used'])
|
self.save(update_fields=['last_used'])
|
||||||
return valid
|
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 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,
|
from awx.main.models.oauth import (OAuth2Application as Application,
|
||||||
OAuth2AccessToken as AccessToken,
|
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
|
@pytest.mark.django_db
|
||||||
def test_oauth_application_create(admin, post):
|
def test_oauth_application_create(admin, post):
|
||||||
response = post(
|
response = post(
|
||||||
@@ -48,7 +67,6 @@ def test_oauth_application_update(oauth_application, patch, admin, alice):
|
|||||||
assert updated_app.user == admin
|
assert updated_app.user == admin
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.skip(reason="Needs Update - CA")
|
|
||||||
@pytest.mark.django_db
|
@pytest.mark.django_db
|
||||||
def test_oauth_token_create(oauth_application, get, post, admin):
|
def test_oauth_token_create(oauth_application, get, post, admin):
|
||||||
response = post(
|
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']['count'] == 1
|
||||||
assert response.data['summary_fields']['tokens']['results'][0] == {
|
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
|
user = data_or_user
|
||||||
elif 'data' not in kwargs:
|
elif 'data' not in kwargs:
|
||||||
kwargs['data'] = data_or_user
|
kwargs['data'] = data_or_user
|
||||||
if 'format' not in kwargs:
|
if 'format' not in kwargs and 'content_type' not in kwargs:
|
||||||
kwargs['format'] = 'json'
|
kwargs['format'] = 'json'
|
||||||
|
|
||||||
view, view_args, view_kwargs = resolve(urlparse(url)[2])
|
view, view_args, view_kwargs = resolve(urlparse(url)[2])
|
||||||
|
|||||||
@@ -338,7 +338,6 @@ AUTHENTICATION_BACKENDS = (
|
|||||||
# Django OAuth Toolkit settings
|
# Django OAuth Toolkit settings
|
||||||
OAUTH2_PROVIDER_APPLICATION_MODEL = 'main.OAuth2Application'
|
OAUTH2_PROVIDER_APPLICATION_MODEL = 'main.OAuth2Application'
|
||||||
OAUTH2_PROVIDER_ACCESS_TOKEN_MODEL = 'main.OAuth2AccessToken'
|
OAUTH2_PROVIDER_ACCESS_TOKEN_MODEL = 'main.OAuth2AccessToken'
|
||||||
OAUTH2_PROVIDER_REFRESH_TOKEN_MODEL = 'main.OAuth2RefreshToken'
|
|
||||||
|
|
||||||
OAUTH2_PROVIDER = {}
|
OAUTH2_PROVIDER = {}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user