Merge branch 'main' into 2678
This commit is contained in:
commit
a601be4708
61 changed files with 1343 additions and 887 deletions
|
@ -110,7 +110,7 @@ class ClearCeleryForm(forms.Form):
|
|||
def celery_ping(request):
|
||||
"""Just tells you if Celery is on or not"""
|
||||
try:
|
||||
ping = celery.control.inspect().ping(timeout=5)
|
||||
ping = celery.control.inspect().ping()
|
||||
if ping:
|
||||
return HttpResponse()
|
||||
# pylint: disable=broad-except
|
||||
|
|
|
@ -29,14 +29,20 @@ class ReportsAdmin(View):
|
|||
"""view current reports"""
|
||||
filters = {}
|
||||
|
||||
resolved = request.GET.get("resolved") == "true"
|
||||
# we sometimes want to see all reports, regardless of resolution
|
||||
if request.GET.get("resolved") == "all":
|
||||
resolved = "all"
|
||||
else:
|
||||
resolved = request.GET.get("resolved") == "true"
|
||||
|
||||
server = request.GET.get("server")
|
||||
if server:
|
||||
filters["user__federated_server__server_name"] = server
|
||||
username = request.GET.get("username")
|
||||
if username:
|
||||
filters["user__username__icontains"] = username
|
||||
filters["resolved"] = resolved
|
||||
if resolved != "all":
|
||||
filters["resolved"] = resolved
|
||||
|
||||
reports = models.Report.objects.filter(**filters)
|
||||
paginated = Paginator(reports, PAGE_LENGTH)
|
||||
|
|
|
@ -45,6 +45,7 @@ class EditBook(View):
|
|||
data = {"book": book, "form": form}
|
||||
ensure_transient_values_persist(request, data)
|
||||
if not form.is_valid():
|
||||
ensure_transient_values_persist(request, data, add_author=True)
|
||||
return TemplateResponse(request, "book/edit/edit_book.html", data)
|
||||
|
||||
data = add_authors(request, data)
|
||||
|
@ -102,11 +103,13 @@ class CreateBook(View):
|
|||
"authors": authors,
|
||||
}
|
||||
|
||||
ensure_transient_values_persist(request, data)
|
||||
|
||||
if not form.is_valid():
|
||||
ensure_transient_values_persist(request, data, form=form)
|
||||
return TemplateResponse(request, "book/edit/edit_book.html", data)
|
||||
|
||||
# we have to call this twice because it requires form.cleaned_data
|
||||
# which only exists after we validate the form
|
||||
ensure_transient_values_persist(request, data, form=form)
|
||||
data = add_authors(request, data)
|
||||
|
||||
# check if this is an edition of an existing work
|
||||
|
@ -139,9 +142,15 @@ class CreateBook(View):
|
|||
return redirect(f"/book/{book.id}")
|
||||
|
||||
|
||||
def ensure_transient_values_persist(request, data):
|
||||
def ensure_transient_values_persist(request, data, **kwargs):
|
||||
"""ensure that values of transient form fields persist when re-rendering the form"""
|
||||
data["cover_url"] = request.POST.get("cover-url")
|
||||
if kwargs and kwargs.get("form"):
|
||||
data["book"] = data.get("book") or {}
|
||||
data["book"]["subjects"] = kwargs["form"].cleaned_data["subjects"]
|
||||
data["add_author"] = request.POST.getlist("add_author")
|
||||
elif kwargs and kwargs.get("add_author") is True:
|
||||
data["add_author"] = request.POST.getlist("add_author")
|
||||
|
||||
|
||||
def add_authors(request, data):
|
||||
|
|
|
@ -3,7 +3,6 @@ import json
|
|||
import re
|
||||
import logging
|
||||
|
||||
from urllib.parse import urldefrag
|
||||
import requests
|
||||
|
||||
from django.http import HttpResponse, Http404
|
||||
|
@ -130,15 +129,18 @@ def has_valid_signature(request, activity):
|
|||
"""verify incoming signature"""
|
||||
try:
|
||||
signature = Signature.parse(request)
|
||||
|
||||
key_actor = urldefrag(signature.key_id).url
|
||||
if key_actor != activity.get("actor"):
|
||||
raise ValueError("Wrong actor created signature.")
|
||||
|
||||
remote_user = activitypub.resolve_remote_id(key_actor, model=models.User)
|
||||
remote_user = activitypub.resolve_remote_id(
|
||||
activity.get("actor"), model=models.User
|
||||
)
|
||||
if not remote_user:
|
||||
return False
|
||||
|
||||
if signature.key_id != remote_user.key_pair.remote_id:
|
||||
if (
|
||||
signature.key_id != f"{remote_user.remote_id}#main-key"
|
||||
): # legacy Bookwyrm
|
||||
raise ValueError("Wrong actor created signature.")
|
||||
|
||||
try:
|
||||
signature.verify(remote_user.key_pair.public_key, request)
|
||||
except ValueError:
|
||||
|
|
|
@ -36,14 +36,22 @@ class RssFeed(Feed):
|
|||
|
||||
def items(self, obj):
|
||||
"""the user's activity feed"""
|
||||
return obj.status_set.select_subclasses().filter(
|
||||
privacy__in=["public", "unlisted"],
|
||||
)[:10]
|
||||
return (
|
||||
obj.status_set.select_subclasses()
|
||||
.filter(
|
||||
privacy__in=["public", "unlisted"],
|
||||
)
|
||||
.order_by("-published_date")[:10]
|
||||
)
|
||||
|
||||
def item_link(self, item):
|
||||
"""link to the status"""
|
||||
return item.local_path
|
||||
|
||||
def item_pubdate(self, item):
|
||||
"""publication date of the item"""
|
||||
return item.published_date
|
||||
|
||||
|
||||
class RssReviewsOnlyFeed(Feed):
|
||||
"""serialize user's reviews in rss feed"""
|
||||
|
@ -76,12 +84,16 @@ class RssReviewsOnlyFeed(Feed):
|
|||
return Review.objects.filter(
|
||||
user=obj,
|
||||
privacy__in=["public", "unlisted"],
|
||||
)[:10]
|
||||
).order_by("-published_date")[:10]
|
||||
|
||||
def item_link(self, item):
|
||||
"""link to the status"""
|
||||
return item.local_path
|
||||
|
||||
def item_pubdate(self, item):
|
||||
"""publication date of the item"""
|
||||
return item.published_date
|
||||
|
||||
|
||||
class RssQuotesOnlyFeed(Feed):
|
||||
"""serialize user's quotes in rss feed"""
|
||||
|
@ -114,12 +126,16 @@ class RssQuotesOnlyFeed(Feed):
|
|||
return Quotation.objects.filter(
|
||||
user=obj,
|
||||
privacy__in=["public", "unlisted"],
|
||||
)[:10]
|
||||
).order_by("-published_date")[:10]
|
||||
|
||||
def item_link(self, item):
|
||||
"""link to the status"""
|
||||
return item.local_path
|
||||
|
||||
def item_pubdate(self, item):
|
||||
"""publication date of the item"""
|
||||
return item.published_date
|
||||
|
||||
|
||||
class RssCommentsOnlyFeed(Feed):
|
||||
"""serialize user's quotes in rss feed"""
|
||||
|
@ -152,8 +168,12 @@ class RssCommentsOnlyFeed(Feed):
|
|||
return Comment.objects.filter(
|
||||
user=obj,
|
||||
privacy__in=["public", "unlisted"],
|
||||
)[:10]
|
||||
).order_by("-published_date")[:10]
|
||||
|
||||
def item_link(self, item):
|
||||
"""link to the status"""
|
||||
return item.local_path
|
||||
|
||||
def item_pubdate(self, item):
|
||||
"""publication date of the item"""
|
||||
return item.published_date
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue