lib.itmens/users/views/actions.py

185 lines
5.3 KiB
Python
Raw Permalink Normal View History

import json
2020-05-05 23:50:48 +08:00
from django.contrib.auth.decorators import login_required
2024-04-17 00:00:40 -04:00
from django.core.exceptions import BadRequest
2024-04-23 23:57:49 -04:00
from django.http import Http404, HttpResponseRedirect
2024-04-17 00:00:40 -04:00
from django.shortcuts import redirect, render
from django.urls import reverse
2024-06-07 22:29:10 -04:00
from django.utils.translation import gettext as _
from common.config import *
2024-12-30 01:51:19 -05:00
from common.models import int_
2023-08-13 23:11:12 -04:00
from common.utils import (
AuthedHttpRequest,
HTTPResponseHXRedirect,
target_identity_required,
)
2023-08-13 18:00:10 -04:00
from takahe.utils import Takahe
2024-07-03 00:07:07 -04:00
from ..models import APIdentity
from .account import *
from .data import *
2020-05-01 22:46:15 +08:00
2023-08-13 18:00:10 -04:00
def query_identity(request, handle):
try:
2024-02-25 23:04:50 -05:00
i = APIdentity.get_by_handle(handle)
2023-08-13 18:00:10 -04:00
return redirect(i.url)
except APIdentity.DoesNotExist:
if len(handle.split("@")) == 3:
Takahe.fetch_remote_identity(handle)
return render(
request, "users/fetch_identity_pending.html", {"handle": handle}
)
else:
2024-04-23 23:57:49 -04:00
raise Http404(_("User not found"))
2023-08-13 18:00:10 -04:00
def fetch_refresh(request):
handle = request.GET.get("handle", "")
try:
2024-02-25 23:04:50 -05:00
i = APIdentity.get_by_handle(handle)
2023-08-13 18:00:10 -04:00
return HTTPResponseHXRedirect(i.url)
2024-04-06 00:13:50 -04:00
except Exception:
2024-12-30 01:51:19 -05:00
retry = int_(request.GET.get("retry")) + 1
2023-08-13 18:00:10 -04:00
if retry > 10:
return render(request, "users/fetch_identity_failed.html")
else:
return render(
request,
"users/fetch_identity_refresh.html",
{"handle": handle, "retry": retry, "delay": retry * 2},
)
2023-07-07 02:02:48 -04:00
@login_required
2023-08-13 23:11:12 -04:00
@target_identity_required
2024-04-17 00:00:40 -04:00
@require_http_methods(["POST"])
2023-08-13 23:11:12 -04:00
def follow(request: AuthedHttpRequest, user_name):
request.user.identity.follow(request.target_identity)
return render(
request,
"users/profile_actions.html",
context={"identity": request.target_identity},
)
2023-07-07 02:02:48 -04:00
@login_required
2023-08-13 23:11:12 -04:00
@target_identity_required
2024-04-17 00:00:40 -04:00
@require_http_methods(["POST"])
2023-08-13 23:11:12 -04:00
def unfollow(request: AuthedHttpRequest, user_name):
request.user.identity.unfollow(request.target_identity)
return render(
request,
"users/profile_actions.html",
context={"identity": request.target_identity},
)
2023-07-07 16:54:15 -04:00
@login_required
2023-08-13 23:11:12 -04:00
@target_identity_required
2024-04-17 00:00:40 -04:00
@require_http_methods(["POST"])
2023-08-13 23:11:12 -04:00
def mute(request: AuthedHttpRequest, user_name):
request.user.identity.mute(request.target_identity)
return render(
request,
"users/profile_actions.html",
context={"identity": request.target_identity},
)
2023-07-07 16:54:15 -04:00
@login_required
2023-08-13 23:11:12 -04:00
@target_identity_required
2024-04-17 00:00:40 -04:00
@require_http_methods(["POST"])
2023-08-13 23:11:12 -04:00
def unmute(request: AuthedHttpRequest, user_name):
request.user.identity.unmute(request.target_identity)
return render(
request,
"users/profile_actions.html",
context={"identity": request.target_identity},
)
2023-07-07 16:54:15 -04:00
@login_required
2023-08-13 23:11:12 -04:00
@target_identity_required
2024-04-17 00:00:40 -04:00
@require_http_methods(["POST"])
2023-08-13 23:11:12 -04:00
def block(request: AuthedHttpRequest, user_name):
request.user.identity.block(request.target_identity)
return render(
request,
"users/profile_actions.html",
context={"identity": request.target_identity},
)
2023-07-07 16:54:15 -04:00
@login_required
2024-04-17 00:00:40 -04:00
@require_http_methods(["POST"])
2023-08-13 23:11:12 -04:00
def unblock(request: AuthedHttpRequest, user_name):
2023-12-05 22:00:35 -05:00
try:
2024-02-25 23:04:50 -05:00
target = APIdentity.get_by_handle(user_name)
2023-12-05 22:00:35 -05:00
except APIdentity.DoesNotExist:
2024-04-23 23:57:49 -04:00
raise Http404(_("User not found"))
2023-12-05 22:00:35 -05:00
target_user = target.user
if target_user and not target_user.is_active:
2024-04-23 23:57:49 -04:00
raise Http404(_("User no longer exists"))
2023-12-05 22:00:35 -05:00
request.user.identity.unblock(target)
2023-08-13 23:11:12 -04:00
return render(
request,
"users/profile_actions.html",
2023-12-05 22:00:35 -05:00
context={"identity": target},
2023-08-13 23:11:12 -04:00
)
@login_required
@target_identity_required
2024-04-17 00:00:40 -04:00
@require_http_methods(["POST"])
2023-08-13 23:11:12 -04:00
def accept_follow_request(request: AuthedHttpRequest, user_name):
request.user.identity.accept_follow_request(request.target_identity)
return render(
request,
"users/profile_actions.html",
context={"identity": request.target_identity},
)
2023-07-07 02:02:48 -04:00
@login_required
2023-08-13 23:11:12 -04:00
@target_identity_required
2024-04-17 00:00:40 -04:00
@require_http_methods(["POST"])
2023-08-13 23:11:12 -04:00
def reject_follow_request(request: AuthedHttpRequest, user_name):
request.user.identity.reject_follow_request(request.target_identity)
return render(
request,
"users/profile_actions.html",
context={"identity": request.target_identity},
)
2023-07-07 02:02:48 -04:00
2021-02-17 15:08:16 +01:00
@login_required
2024-04-17 00:00:40 -04:00
@require_http_methods(["POST"])
2023-08-13 23:11:12 -04:00
def set_layout(request: AuthedHttpRequest):
2024-04-17 00:00:40 -04:00
layout = json.loads(request.POST.get("layout", "{}"))
if request.POST.get("name") == "profile":
request.user.preference.profile_layout = layout
request.user.preference.save(update_fields=["profile_layout"])
return redirect(request.user.url)
elif request.POST.get("name") == "discover":
request.user.preference.discover_layout = layout
request.user.preference.save(update_fields=["discover_layout"])
return redirect(reverse("catalog:discover"))
2024-04-23 23:57:49 -04:00
raise BadRequest(_("Invalid parameter"))
2021-02-17 15:08:16 +01:00
2021-02-15 21:27:50 +01:00
@login_required
2024-04-17 00:00:40 -04:00
@require_http_methods(["POST"])
2023-08-13 23:11:12 -04:00
def mark_announcements_read(request: AuthedHttpRequest):
2024-04-17 00:00:40 -04:00
Takahe.mark_announcements_seen(request.user)
2023-08-13 23:11:12 -04:00
return HttpResponseRedirect(request.META.get("HTTP_REFERER", "/"))
2024-04-17 00:00:40 -04:00
def announcements(request):
return render(
request,
"users/announcements.html",
{"announcements": Takahe.get_announcements()},
)