Advertisement
for-mile

Article-auth example

May 8th, 2017
165
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.27 KB | None | 0 0
  1. from functools import wraps
  2. from channels.sessions import channel_session
  3. from urllib.parse import parse_qs
  4. import json
  5. from rest_framework.authtoken.models import Token
  6.  
  7.  
  8. def query_string_to_channel_session(consumer):
  9.     @channel_session
  10.     @wraps(consumer)
  11.     def inner(message):
  12.         query_string = message['query_string']  # assume UTF-8
  13.         query_dict = parse_qs(query_string)
  14.         for key, val in query_dict.items():
  15.             message.channel_session[key] = val[0]  # TODO: refactor for lists
  16.         return consumer(message)
  17.     return inner
  18.  
  19.  
  20. def channel_token_auth(consumer):
  21.     @query_string_to_channel_session
  22.     @wraps(consumer)
  23.     def inner(message):
  24.         received_token = message.channel_session.get('token', '')
  25.         try:
  26.             valid_token = Token.objects.select_related('user').get(key=received_token)
  27.             message.channel_session['username'] = valid_token.user.username
  28.             return consumer(message)
  29.         except Token.DoesNotExist:  # TODO: check if user is inactive
  30.             error = dict(
  31.                 type='auth_error',
  32.                 payload="Token is incorrect or not provided",
  33.             )
  34.             message.reply_channel.send({"text": json.dumps(error), "close": True})
  35.     return inner
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement