Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import tekore as tk
- from django.shortcuts import render
- from django.http import HttpResponse
- from django.shortcuts import redirect
- conf = tk.config_from_environment()
- cred = tk.Credentials(*conf)
- spotify = tk.Spotify()
- auths = {} # Ongoing authorisations: state -> UserAuth
- users = {} # User tokens: state -> token (use state as a user ID)
- in_link = '<a href="/login">login</a>'
- out_link = '<a href="/logout">logout</a>'
- login_msg = f'You can {in_link} or {out_link}'
- # Create your views here.
- def login(request):
- if 'user' in request.session:
- return redirect('/')
- scope = tk.scope.every
- auth = tk.UserAuth(cred, scope)
- auths[auth.state] = auth
- return redirect(auth.url)
- # return HttpResponse('testing login')
- def logout(request):
- uid = request.session.pop('user', None)
- if uid is not None:
- users.pop(uid, None)
- return redirect('/')
- def home(request):
- user = request.session.get('user', None)
- token = users.get(user, None)
- # Return early if no login or old session
- if user is None or token is None:
- request.session.pop('user', None)
- return HttpResponse(f'User ID: None<br>{login_msg}')
- page = f'User ID: {user}<br>{login_msg}'
- if token.is_expiring:
- token = cred.refresh(token)
- users[user] = token
- try:
- with spotify.token_as(token):
- playback = spotify.playback_currently_playing()
- item = playback.item.name if playback else None
- page += f'<br>Now playing: {item}'
- except tk.HTTPError:
- page += '<br>Error in retrieving now playing!'
- return HttpResponse(page)
- # return HttpResponse('testing home')
- def callback(request):
- code = request.GET.get('code', None)
- state = request.GET.get('state', None)
- auth = auths.pop(state, None)
- if auth is None:
- return HttpResponse(f'Invalid state!', status=400)
- print(request.build_absolute_uri())
- token = auth.request_token(code, state)
- request.session['user'] = state
- users[state] = token
- return redirect('/')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement