# Episodes.Community - Community-Driven TV Show Episode Link Sharing Site # Copyright (C) 2017 Evert "Diamond" Prants , Taizo "Tsa6" Simpson # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as # published by the Free Software Foundation, either version 3 of the # License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . 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 class Shows(TemplateView): template_name = "shows.html" def get_context_data(self, **kwargs): ctx = super().get_context_data() ctx['shows'] = Show.objects.all() return ctx