Advertisement
dyay108

django tekore

Jan 11th, 2021
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.08 KB | None | 0 0
  1. import tekore as tk
  2. from django.shortcuts import render
  3. from django.http import HttpResponse
  4. from django.shortcuts import redirect
  5.  
  6. conf = tk.config_from_environment()
  7. cred = tk.Credentials(*conf)
  8. spotify = tk.Spotify()
  9.  
  10. auths = {}  # Ongoing authorisations: state -> UserAuth
  11. users = {}  # User tokens: state -> token (use state as a user ID)
  12.  
  13. in_link = '<a href="/login">login</a>'
  14. out_link = '<a href="/logout">logout</a>'
  15. login_msg = f'You can {in_link} or {out_link}'
  16.  
  17. # Create your views here.
  18. def login(request):
  19.     if 'user' in request.session:
  20.         return redirect('/')
  21.  
  22.     scope = tk.scope.every
  23.     auth = tk.UserAuth(cred, scope)
  24.     auths[auth.state] = auth
  25.  
  26.     return redirect(auth.url)
  27.     # return HttpResponse('testing login')
  28.  
  29. def logout(request):
  30.     uid = request.session.pop('user', None)
  31.     if uid is not None:
  32.         users.pop(uid, None)
  33.     return redirect('/')
  34.  
  35. def home(request):
  36.     user = request.session.get('user', None)
  37.     token = users.get(user, None)
  38.     # Return early if no login or old session
  39.     if user is None or token is None:
  40.         request.session.pop('user', None)
  41.         return HttpResponse(f'User ID: None<br>{login_msg}')
  42.     page = f'User ID: {user}<br>{login_msg}'
  43.     if token.is_expiring:
  44.         token = cred.refresh(token)
  45.         users[user] = token
  46.     try:
  47.         with spotify.token_as(token):
  48.             playback = spotify.playback_currently_playing()
  49.         item = playback.item.name if playback else None
  50.         page += f'<br>Now playing: {item}'
  51.     except tk.HTTPError:
  52.          page += '<br>Error in retrieving now playing!'
  53.     return HttpResponse(page)
  54.     # return HttpResponse('testing home')
  55.  
  56. def callback(request):
  57.     code = request.GET.get('code', None)
  58.     state = request.GET.get('state', None)
  59.     auth = auths.pop(state, None)
  60.     if auth is None:
  61.         return HttpResponse(f'Invalid state!', status=400)
  62.     print(request.build_absolute_uri())
  63.     token = auth.request_token(code, state)
  64.     request.session['user'] = state
  65.     users[state] = token
  66.     return redirect('/')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement