from django.shortcuts import render from django.views import View from django.views.generic.base import TemplateView from django.contrib.auth import login as auth_login, authenticate from django.conf import settings from django.http import HttpResponse from django.http import HttpResponseRedirect from django.db.models import Max from django.contrib.auth.views import logout import requests import hashlib import json from .models import User from .models import Show from .models import Submission from .models import DiscussionBoard # Create your views here. # Redirect url should point to this view class LoginRedirect(View): def get(self, req): # Check request has correct arguments request_valid = 'state' in req.GET and 'code' in req.GET if not request_valid: r = HttpResponse('

Error

There was an error in your request. Please try again

') r.status = 400 return r # Check state userstate = generateState(req) if userstate == req.GET['state']: code = req.GET['code'] user = authenticate(code=code) if user is not None and user.is_active: auth_login(req, user) return HttpResponseRedirect('/') return HttpResponse('

Error


It looks like something went wrong while trying to authenticate you. Please try again later.

', status=500) return HttpResponse('

Unmatching state tokens


It looks like the request to login wasn\'t started by you. Try going back to the home page and logging in again.

', status=400) class Login(View): def get(self, req): url = '%sauthorize?response_type=code&client_id=%s&redirect_uri=%s&scope=email privilege&state=%s'%(settings.AUTH_TOKEN_ENDPOINT,settings.AUTH_CLIENT_ID,settings.AUTH_REDIRECT_URL, generateState(req)) response = HttpResponse("Redirecting you to the IcyNet auth page...") response.status_code = 302 response['Location'] = url return response def LogoutView(request): logout(request) return HttpResponseRedirect('/') def generateState(request): request.session.save() m = hashlib.sha256() m.update(bytearray(request.session.session_key, 'utf-8')) m.update(bytearray(settings.SECRET_KEY, 'utf-8')) return m.hexdigest() class LandingPage(TemplateView): template_name = "landing_page.html" def get_context_data(self, **kwargs): ctx = super().get_context_data() ctx['recent'] = Show.objects.annotate(recency=Max('episodes__airdate')).order_by('-recency')[:8] ctx['stats'] = { 'shows': Show.objects.count(), 'episodes': Submission.objects.count(), 'boards': DiscussionBoard.objects.count() } return ctx