Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
import os
import requests
from django.contrib.auth import authenticate, login as django_login, logout as django_logout
from django.contrib.auth.decorators import login_required
from django.forms import modelformset_factory
from django.shortcuts import render, redirect
from .forms import BaseForm, WusstestDuSchonSettingsForm
from .models import WusstestDuSchon
# Create your views here.
def home(request):
return render(request, "home.html", {'title': 'HaugeBot'})
@login_required(login_url="/login")
def wusstest_du_schon(request):
WusstestDuSchonFormSet = modelformset_factory(WusstestDuSchon, form=BaseForm,
fields=('advertised_command', 'text', 'use_prefix', 'active'),
field_classes=[''])
if request.method == "POST":
settings_form = WusstestDuSchonSettingsForm(request.POST)
formset = WusstestDuSchonFormSet(request.POST, request.FILES)
if formset.is_valid():
formset.save()
if settings_form.is_valid():
settings_form.save()
formset = WusstestDuSchonFormSet()
settings_form = WusstestDuSchonSettingsForm()
return render(request, "form.html",
{'title': 'Wusstest du Schon?', 'formset': formset, 'remove_url': 'wusstest_du_schon_remove',
'form': settings_form})
@login_required(login_url="/login")
def wusstest_du_schon_remove(request, id):
WusstestDuSchon.objects.filter(pk=id).delete()
return redirect("/wusstest_du_schon")
def login(request):
client_id = os.getenv("CLIENT_ID")
redirect_uri = os.getenv("REDIRECT_URI")
url = f"https://id.twitch.tv/oauth2/authorize?client_id={client_id}&redirect_uri={redirect_uri}&response_type=code&scope=moderation:read"
return redirect(url)
def logout(request):
django_logout(request)
return redirect("/")
def login_redirect(request):
code = request.GET.get('code')
user = exchange_code(code)
if user:
twitch_user = authenticate(request, user=user)
twitch_user = list(twitch_user).pop()
django_login(request, twitch_user)
return redirect("/")
def exchange_code(code):
client_id = os.getenv("CLIENT_ID")
client_secret = os.getenv("CLIENT_SECRET")
redirect_uri = os.getenv("REDIRECT_URI")
url = f"https://id.twitch.tv/oauth2/token?client_id={client_id}&client_secret={client_secret}&code={code}&grant_type=authorization_code&redirect_uri={redirect_uri}"
response = requests.post(url)
if response.status_code == 200:
credentials = response.json()
response = requests.get("https://api.twitch.tv/helix/users", headers={
'Authorization': f'Bearer {credentials["access_token"]}',
'Client-Id': client_id
})
user = response.json()["data"][0]
return {'id': user['id'], 'login': user['login'], 'access_token': credentials['access_token'],
'refresh_token': credentials['refresh_token']}
return None