# 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, F 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 # 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