No longer require the token for channels

This commit is contained in:
Wayne Witzel III
2017-07-26 13:57:14 -04:00
parent f6d59409de
commit eff62a17a4

View File

@@ -1,16 +1,14 @@
import json import json
import logging import logging
import urllib
from channels import Group, channel_layers from channels import Group, channel_layers
from channels.sessions import channel_session from channels.sessions import enforce_ordering, channel_session, channel_and_http_session
from channels.handler import AsgiRequest
from django.conf import settings from django.conf import settings
from django.core.serializers.json import DjangoJSONEncoder from django.core.serializers.json import DjangoJSONEncoder
from django.contrib.auth.models import User from django.contrib.auth.models import User
from awx.main.models.organization import AuthToken from django.contrib.sessions.models import Session
logger = logging.getLogger('awx.main.consumers') logger = logging.getLogger('awx.main.consumers')
@@ -22,24 +20,21 @@ def discard_groups(message):
Group(group).discard(message.reply_channel) Group(group).discard(message.reply_channel)
@channel_session @channel_and_http_session
def ws_connect(message): def ws_connect(message):
connect_text = {'accept':False, 'user':None} if message.http_session.session_key is None:
raise ValueError('No valid session key to get auth from')
message.content['method'] = 'FAKE' session = Session.objects.get(session_key=message.http_session.session_key)
request = AsgiRequest(message) session_data = session.get_decoded()
token = request.COOKIES.get('token', None)
if token is not None: try:
token = urllib.unquote(token).strip('"') user = User.objects.get(pk=session_data['_auth_user_id'])
try: except User.DoesNotExist:
auth_token = AuthToken.objects.get(key=token) raise ValueError('No valid user for the session key')
if auth_token.in_valid_tokens:
message.channel_session['user_id'] = auth_token.user_id message.channel_session['user_id'] = user.pk
connect_text['accept'] = True message.reply_channel.send({"text": json.dumps({'accept': True, 'user': user.pk})})
connect_text['user'] = auth_token.user_id
except AuthToken.DoesNotExist:
logger.error("auth_token provided was invalid.")
message.reply_channel.send({"text": json.dumps(connect_text)})
@channel_session @channel_session
@@ -47,6 +42,7 @@ def ws_disconnect(message):
discard_groups(message) discard_groups(message)
@enforce_ordering
@channel_session @channel_session
def ws_receive(message): def ws_receive(message):
from awx.main.access import consumer_access from awx.main.access import consumer_access