Add various fixes from upstream pr814

This commit is contained in:
Oneric 2024-10-03 21:14:29 +02:00
parent 22a486383d
commit ad3a2c49ba
5 changed files with 274 additions and 0 deletions

View file

@ -0,0 +1,52 @@
From 495a1a71e89f3a3b67f9948f5e241a8b195f5ecf Mon Sep 17 00:00:00 2001
From: Oneric <oneric@oneric.stub>
Date: Fri, 21 Jun 2024 18:30:47 +0200
Subject: [PATCH] strip_metadata: skip BMP files
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Not _yet_ supported as of exiftool 12.87, though
at first glance it seems like standard BMP files
can't store any metadata besides colour profiles
Fixes the specific case from
https://akkoma.dev/AkkomaGang/akkoma-fe/issues/396
although the frontend shouldnt get bricked regardless.
---
lib/pleroma/upload/filter/exiftool/strip_metadata.ex | 1 +
.../upload/filter/exiftool/strip_location_test.exs | 9 +++++++++
2 files changed, 10 insertions(+)
diff --git a/lib/pleroma/upload/filter/exiftool/strip_metadata.ex b/lib/pleroma/upload/filter/exiftool/strip_metadata.ex
index 912ff6a92..a2604a682 100644
--- a/lib/pleroma/upload/filter/exiftool/strip_metadata.ex
+++ b/lib/pleroma/upload/filter/exiftool/strip_metadata.ex
@@ -18,6 +18,7 @@ defmodule Pleroma.Upload.Filter.Exiftool.StripMetadata do
# Formats not compatible with exiftool at this time
def filter(%Pleroma.Upload{content_type: "image/webp"}), do: {:ok, :noop}
+ def filter(%Pleroma.Upload{content_type: "image/bmp"}), do: {:ok, :noop}
def filter(%Pleroma.Upload{content_type: "image/svg+xml"}), do: {:ok, :noop}
def filter(%Pleroma.Upload{tempfile: file, content_type: "image" <> _}) do
diff --git a/test/pleroma/upload/filter/exiftool/strip_location_test.exs b/test/pleroma/upload/filter/exiftool/strip_location_test.exs
index 2e017cd7e..1f798556b 100644
--- a/test/pleroma/upload/filter/exiftool/strip_location_test.exs
+++ b/test/pleroma/upload/filter/exiftool/strip_location_test.exs
@@ -115,6 +115,15 @@ defmodule Pleroma.Upload.Filter.Exiftool.StripMetadataTest do
assert Filter.Exiftool.StripMetadata.filter(upload) == {:ok, :noop}
end
+ test "verify bmp files are skipped" do
+ upload = %Pleroma.Upload{
+ name: "sample.bmp",
+ content_type: "image/bmp"
+ }
+
+ assert Filter.Exiftool.StripMetadata.filter(upload) == {:ok, :noop}
+ end
+
test "verify svg files are skipped" do
upload = %Pleroma.Upload{
name: "sample.svg",

View file

@ -0,0 +1,72 @@
From ca182a0ae7cde1838b6f1c63b7348af7eb6b45b1 Mon Sep 17 00:00:00 2001
From: Oneric <oneric@oneric.stub>
Date: Thu, 20 Jun 2024 19:52:43 +0200
Subject: [PATCH] Correctly parse content types with multiple profiles
Multiple profiles can be specified as a space-separated list
and the possibility of additional profiles is explicitly brought up
in ActivityStream spec
---
lib/pleroma/object/fetcher.ex | 8 ++++++--
test/pleroma/object/fetcher_test.exs | 22 +++++++++++++++++++++-
3 files changed, 27 insertions(+), 3 deletions(-)
diff --git a/lib/pleroma/object/fetcher.ex b/lib/pleroma/object/fetcher.ex
index 937026e04..54ea9e74e 100644
--- a/lib/pleroma/object/fetcher.ex
+++ b/lib/pleroma/object/fetcher.ex
@@ -369,8 +369,12 @@ defmodule Pleroma.Object.Fetcher do
{"activity+json", _} ->
{:ok, final_id, body}
- {"ld+json", %{"profile" => "https://www.w3.org/ns/activitystreams"}} ->
- {:ok, final_id, body}
+ {"ld+json", %{"profile" => profiles}} ->
+ if "https://www.w3.org/ns/activitystreams" in String.split(profiles) do
+ {:ok, final_id, body}
+ else
+ {:error, {:content_type, content_type}}
+ end
_ ->
{:error, {:content_type, content_type}}
diff --git a/test/pleroma/object/fetcher_test.exs b/test/pleroma/object/fetcher_test.exs
index 74f2cd31f..62dd64625 100644
--- a/test/pleroma/object/fetcher_test.exs
+++ b/test/pleroma/object/fetcher_test.exs
@@ -754,7 +754,7 @@ defmodule Pleroma.Object.FetcherTest do
assert {:ok, _, "{}"} = Fetcher.get_object("https://mastodon.social/2")
end
- test "should return ok if the content type is application/ld+json with a profile" do
+ test "should return ok if the content type is application/ld+json with the ActivityStream profile" do
Tesla.Mock.mock(fn
%{
method: :get,
@@ -774,6 +774,26 @@ defmodule Pleroma.Object.FetcherTest do
assert {:ok, _, "{}"} = Fetcher.get_object("https://mastodon.social/2")
end
+ test "should return ok if the content type is application/ld+json with several profiles" do
+ Tesla.Mock.mock(fn
+ %{
+ method: :get,
+ url: "https://mastodon.social/2"
+ } ->
+ %Tesla.Env{
+ status: 200,
+ url: "https://mastodon.social/2",
+ headers: [
+ {"content-type",
+ "application/ld+json; profile=\"https://example.org/ns/superduperspec https://www.w3.org/ns/activitystreams\""}
+ ],
+ body: "{}"
+ }
+ end)
+
+ assert {:ok, _, "{}"} = Fetcher.get_object("https://mastodon.social/2")
+ end
+
test "should not return ok with other content types" do
Tesla.Mock.mock(fn
%{

View file

@ -0,0 +1,81 @@
From d488cf476ea2ea662c5ec6acfa319331c3490d27 Mon Sep 17 00:00:00 2001
From: Oneric <oneric@oneric.stub>
Date: Thu, 20 Jun 2024 19:52:47 +0200
Subject: [PATCH] Fix voters count field
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Mastodon API demands this be null unless its a multi-selection poll.
Not abiding by this can mess up display in some clients.
Fixes: https://akkoma.dev/AkkomaGang/akkoma/issues/190
---
lib/pleroma/web/api_spec/schemas/poll.ex | 4 +++-
lib/pleroma/web/mastodon_api/views/poll_view.ex | 14 +++++++++++---
.../web/mastodon_api/views/poll_view_test.exs | 2 +-
4 files changed, 15 insertions(+), 5 deletions(-)
diff --git a/lib/pleroma/web/api_spec/schemas/poll.ex b/lib/pleroma/web/api_spec/schemas/poll.ex
index 943ad8bd4..13a5e8be2 100644
--- a/lib/pleroma/web/api_spec/schemas/poll.ex
+++ b/lib/pleroma/web/api_spec/schemas/poll.ex
@@ -32,7 +32,9 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Poll do
},
voters_count: %Schema{
type: :integer,
- description: "How many unique accounts have voted. Number."
+ nullable: true,
+ description:
+ "How many unique accounts have voted for a multi-selection poll. Number, or null if single-selection poll."
},
voted: %Schema{
type: :boolean,
diff --git a/lib/pleroma/web/mastodon_api/views/poll_view.ex b/lib/pleroma/web/mastodon_api/views/poll_view.ex
index aa6443754..411cbd15a 100644
--- a/lib/pleroma/web/mastodon_api/views/poll_view.ex
+++ b/lib/pleroma/web/mastodon_api/views/poll_view.ex
@@ -19,7 +19,7 @@ defmodule Pleroma.Web.MastodonAPI.PollView do
expired: expired,
multiple: multiple,
votes_count: votes_count,
- voters_count: voters_count(object),
+ voters_count: voters_count(multiple, object),
options: options,
emojis: Pleroma.Web.MastodonAPI.StatusView.build_emojis(object.data["emoji"])
}
@@ -68,11 +68,19 @@ defmodule Pleroma.Web.MastodonAPI.PollView do
end)
end
- defp voters_count(%{data: %{"voters" => voters}}) when is_list(voters) do
+ defp voters_count(false, _poll_data) do
+ # Mastodon always sets voter count to "null" unless multiple options were selectable
+ # Some clients may rely on this to detect multiple selection polls and it can mess
+ # up percentages for some clients if we never got a correct remote voter count and
+ # only count local voters here; see https://akkoma.dev/AkkomaGang/akkoma/issues/190
+ nil
+ end
+
+ defp voters_count(_multiple, %{data: %{"voters" => voters}}) when is_list(voters) do
length(voters)
end
- defp voters_count(_), do: 0
+ defp voters_count(_, _), do: 0
defp voted_and_own_votes(%{object: object} = params, options) do
if params[:for] do
diff --git a/test/pleroma/web/mastodon_api/views/poll_view_test.exs b/test/pleroma/web/mastodon_api/views/poll_view_test.exs
index 224b26cb9..91d95f229 100644
--- a/test/pleroma/web/mastodon_api/views/poll_view_test.exs
+++ b/test/pleroma/web/mastodon_api/views/poll_view_test.exs
@@ -43,7 +43,7 @@ defmodule Pleroma.Web.MastodonAPI.PollViewTest do
%{title: "why are you even asking?", votes_count: 0}
],
votes_count: 0,
- voters_count: 0
+ voters_count: nil
}
result = PollView.render("show.json", %{object: object})

View file

@ -0,0 +1,63 @@
From a3101a435bae8bba7da77bba52d80e06b85593a4 Mon Sep 17 00:00:00 2001
From: Oneric <oneric@oneric.stub>
Date: Thu, 20 Jun 2024 19:53:03 +0200
Subject: [PATCH] Fix swagger-ui
Ever since the browser frontend switcher was introduced in
de64c6c54aaacc4123031f2e3d5bfb9fc9c517fe /akkoma counts as
an API prefix and thus gets skipped by frontend plugs
breaking the old swagger ui path of /akkoma/swagger-ui.
Do the simple thing and change the frontend path to
/pleroma/swaggerui which isn't an API path and can't collide
with frontend user paths given pleroma is areserved nickname.
Reported in
https://meta.akkoma.dev/t/view-all-endpoints/269/7
https://meta.akkoma.dev/t/swagger-ui-not-loading/728
---
docs/docs/configuration/cheatsheet.md | 2 +-
docs/docs/configuration/frontend_management.md | 2 +-
lib/pleroma/web/endpoint.ex | 4 ++--
4 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/docs/docs/configuration/cheatsheet.md b/docs/docs/configuration/cheatsheet.md
index 80f5c3577..916e1cc0c 100644
--- a/docs/docs/configuration/cheatsheet.md
+++ b/docs/docs/configuration/cheatsheet.md
@@ -338,7 +338,7 @@ config :pleroma, :frontends,
* `:primary` - The frontend that will be served at `/`
* `:admin` - The frontend that will be served at `/pleroma/admin`
-* `:swagger` - Config for developers to act as an API reference to be served at `/akkoma/swaggerui/` (trailing slash _needed_). Disabled by default.
+* `:swagger` - Config for developers to act as an API reference to be served at `/pleroma/swaggerui/` (trailing slash _needed_). Disabled by default.
* `:mastodon` - The mastodon-fe configuration. This shouldn't need to be changed. This is served at `/web` when installed.
### :static\_fe
diff --git a/docs/docs/configuration/frontend_management.md b/docs/docs/configuration/frontend_management.md
index bc5344826..8875ee279 100644
--- a/docs/docs/configuration/frontend_management.md
+++ b/docs/docs/configuration/frontend_management.md
@@ -60,4 +60,4 @@ config :pleroma, :frontends,
Then run the [pleroma.frontend cli task](../../administration/CLI_tasks/frontend) with the name of `swagger-ui` to install the distribution files.
-You will now be able to view documentation at `/akkoma/swaggerui`
+You will now be able to view documentation at `/pleroma/swaggerui`
diff --git a/lib/pleroma/web/endpoint.ex b/lib/pleroma/web/endpoint.ex
index 6628fcaf3..3c9fcb48c 100644
--- a/lib/pleroma/web/endpoint.ex
+++ b/lib/pleroma/web/endpoint.ex
@@ -66,10 +66,10 @@ defmodule Pleroma.Web.Endpoint do
}
)
- plug(Plug.Static.IndexHtml, at: "/akkoma/swaggerui")
+ plug(Plug.Static.IndexHtml, at: "/pleroma/swaggerui/")
plug(Pleroma.Web.Plugs.FrontendStatic,
- at: "/akkoma/swaggerui",
+ at: "/pleroma/swaggerui",
frontend_type: :swagger,
gzip: true,
if: &Pleroma.Web.Swagger.ui_enabled?/0,

View file

@ -3,3 +3,9 @@
# and fix delete+redraft if cleanup is enabled # and fix delete+redraft if cleanup is enabled
pr789_01_dont-attempt-to-delete-remote-attachs.patch pr789_01_dont-attempt-to-delete-remote-attachs.patch
pr789_02_attach-deletion-grace-period.patch pr789_02_attach-deletion-grace-period.patch
# Various small things
# (omitted PR commits not relevant for production deployments)
pr814_07_fix-bmp-metadata-handling.patch
pr814_08_federation-with-multi-ld-profiles.patch
pr814_09_fix-multi-selection-poll-counts.patch
pr814_10_fix-swagger-ui.patch