lib.itmens/common/views.py

83 lines
2.4 KiB
Python

from django.contrib import messages
from django.shortcuts import redirect, render
from django.urls import reverse
from django.contrib.auth.decorators import login_required
from .api import api
from oauthlib.common import generate_token
from oauth2_provider.models import AccessToken, Application
from django.utils import timezone
from dateutil.relativedelta import relativedelta
from oauth2_provider.models import RefreshToken
from django.conf import settings
@login_required
def me(request):
return redirect(
reverse("journal:user_profile", args=[request.user.mastodon_username])
)
def home(request):
if request.user.is_authenticated:
home = request.user.get_preference().classic_homepage
if home == 1:
return redirect(
reverse("journal:user_profile", args=[request.user.mastodon_username])
)
elif home == 2:
return redirect(reverse("social:feed"))
else:
return redirect(reverse("catalog:discover"))
else:
return redirect(reverse("catalog:discover"))
def error_400(request, exception=None):
return render(
request,
"400.html",
{"exception": exception},
status=400,
)
def error_403(request, exception=None):
return render(request, "403.html", status=403)
def error_404(request, exception=None):
return render(request, "404.html", status=404)
def error_500(request, exception=None):
return render(request, "500.html", status=500)
@login_required
def developer(request):
token = None
if request.method == "POST":
user = request.user
app = Application.objects.filter(
client_id=settings.DEVELOPER_CONSOLE_APPLICATION_CLIENT_ID
).first()
if app:
for token in AccessToken.objects.filter(user=user, application=app):
token.revoke()
token = generate_token()
AccessToken.objects.create(
user=user,
application=app,
scope="read write",
expires=timezone.now() + relativedelta(days=365),
token=token,
)
else:
token = "Configuration error, contact admin"
context = {
"api": api,
"token": token,
"openapi_json_url": reverse(f"{api.urls_namespace}:openapi-json"),
}
return render(request, "developer.html", context)