Newer
Older
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.shortcuts import render, redirect, get_object_or_404
from django.http import Http404, JsonResponse, HttpResponse, HttpRequest
from .forms import BaseForm
from .models import WusstestDuSchon, Setting, Whisper
# Create your views here.
def home(request):
return render(request, "home.html", {'title': 'HaugeBot'})
@login_required(login_url="/login")
def wordcloud(request):
id = os.getenv("DJANGO_WORDCLOUD_LIVE_ID")
host = os.getenv("DJANGO_ALLOWED_HOST2")
embed_link = f"{request.scheme}://{host}{reverse('wordcloud_live', args=(id,))}" if request.user.is_broadcaster else ""
return render(request, "wordcloud.html", {'title': 'Wordcloud', "ws_url": os.getenv("WORDCLOUD_WS_URL"),
"session_key": request.session.session_key, "embed_link": embed_link})
def wordcloud_live(request, id):
if id == os.getenv("DJANGO_WORDCLOUD_LIVE_ID"):
return render(request, "live-wordcloud.html", {"ws_url": os.getenv("WORDCLOUD_WS_URL")})
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
# <editor-fold desc="Wusstest du Schon">
@login_required(login_url="/login")
def wusstest_du_schon(request: HttpRequest) -> HttpResponse:
settings_form = modelform_factory(Setting, form=BaseForm,
fields=('wusstest_du_schon_prefix', 'wusstest_du_schon_loop'))
loop_texts = WusstestDuSchon.objects.all()
active = "config"
if active_param := request.GET.get("active"):
active = active_param
if request.method == "POST":
active = request.POST["form-active"]
if active == "config":
form = settings_form(request.POST, instance=Setting.objects.first())
if form and form.is_valid():
form.save()
return render(request, "did_you_know/index.html", {'title': 'Wusstest du Schon?', 'active': active,
"config_form": settings_form(instance=Setting.objects.first()),
"loop_texts": loop_texts})
@login_required(login_url="/login")
def wusstest_du_schon_new(request: HttpRequest) -> HttpResponse:
wusstest_du_schon_form = modelform_factory(WusstestDuSchon, form=BaseForm,
fields=('command', 'text', 'use_prefix', 'active'))
if request.method == "POST":
form = wusstest_du_schon_form(request.POST)
if form.is_valid():
form.save()
return redirect("/wusstest_du_schon?active=texts")
form = wusstest_du_schon_form()
return render(request, "did_you_know/edit.html", {'title': 'Wusstest du Schon?', "form": {"form": form}})
@login_required(login_url="/login")
def wusstest_du_schon_edit(request: HttpRequest, text_id: int) -> HttpResponse:
text = get_object_or_404(WusstestDuSchon, pk=text_id)
wusstest_du_schon_form = modelform_factory(WusstestDuSchon, form=BaseForm,
fields=('command', 'text', 'use_prefix', 'active'))
if request.method == "POST":
form = wusstest_du_schon_form(request.POST, instance=text)
if form.is_valid():
form.save()
return redirect("/wusstest_du_schon?active=texts")
form = wusstest_du_schon_form(instance=text)
return render(request, "did_you_know/edit.html", {'title': 'Wusstest du Schon?', "form": {"form": form}})
@login_required(login_url="/login")
def wusstest_du_schon_active(request: HttpRequest) -> JsonResponse:
if request.method == "POST":
try:
payload = json.loads(request.body)
command = get_object_or_404(WusstestDuSchon, pk=payload["id"])
command.save()
except (json.decoder.JSONDecodeError, KeyError):
pass
raise Http404
@login_required(login_url="/login")
def wusstest_du_schon_prefix(request: HttpRequest) -> JsonResponse:
if request.method == "POST":
try:
payload = json.loads(request.body)
command = get_object_or_404(WusstestDuSchon, pk=payload["id"])
command.use_prefix = payload["active"]
command.save()
except (json.decoder.JSONDecodeError, KeyError):
pass
raise Http404
@login_required(login_url="/login")
def wusstest_du_schon_remove(request):
if request.method == "POST":
try:
payload = json.loads(request.body)
command = get_object_or_404(WusstestDuSchon, pk=payload["id"])
command.delete()
except (json.decoder.JSONDecodeError, KeyError):
pass
return JsonResponse({})
raise Http404
# </editor-fold>