Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from functools import wraps
- from channels.sessions import channel_session
- from urllib.parse import parse_qs
- import json
- from rest_framework.authtoken.models import Token
- def query_string_to_channel_session(consumer):
- @channel_session
- @wraps(consumer)
- def inner(message):
- query_string = message['query_string'] # assume UTF-8
- query_dict = parse_qs(query_string)
- for key, val in query_dict.items():
- message.channel_session[key] = val[0] # TODO: refactor for lists
- return consumer(message)
- return inner
- def channel_token_auth(consumer):
- @query_string_to_channel_session
- @wraps(consumer)
- def inner(message):
- received_token = message.channel_session.get('token', '')
- try:
- valid_token = Token.objects.select_related('user').get(key=received_token)
- message.channel_session['username'] = valid_token.user.username
- return consumer(message)
- except Token.DoesNotExist: # TODO: check if user is inactive
- error = dict(
- type='auth_error',
- payload="Token is incorrect or not provided",
- )
- message.reply_channel.send({"text": json.dumps(error), "close": True})
- return inner
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement