Merge pull request 'misc: missing changelog entries + drop accepts_chat_messages + dedupe htmlMfm test payloads' (#943) from Oneric/akkoma:misc_chat+changelog+dedupehtmlMfmTest into develop
All checks were successful
ci/woodpecker/push/lint Pipeline was successful
ci/woodpecker/push/test/1 Pipeline was successful
ci/woodpecker/push/test/2 Pipeline was successful
ci/woodpecker/push/build-arm64 Pipeline was successful
ci/woodpecker/push/build-amd64 Pipeline was successful
ci/woodpecker/push/docs Pipeline was successful

Reviewed-on: #943
This commit is contained in:
Oneric 2025-06-22 15:10:04 +00:00
commit 16d7d612ff
3 changed files with 52 additions and 47 deletions

View file

@ -6,6 +6,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
## Unreleased ## Unreleased
### REMOVED
- Dropped `accepts_chat_messages` column from users table in database;
it has been unused for almost 3 years
### Added ### Added
- We mark our MFM posts as FEP-c16b compliant, and retain remote HTML representations for incoming posts marked as FEP-c16b-compliant. (Safety scrubbers are still applied) - We mark our MFM posts as FEP-c16b compliant, and retain remote HTML representations for incoming posts marked as FEP-c16b-compliant. (Safety scrubbers are still applied)
- Prometheus stats now exposes failed ActivityPub deliveries - Prometheus stats now exposes failed ActivityPub deliveries
@ -16,6 +20,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
- timestamps of incoming HTTP signatures are now verified. - timestamps of incoming HTTP signatures are now verified.
By default up to two hour old signatures and a maximal clock skew By default up to two hour old signatures and a maximal clock skew
of 40 min for future timestamps or explicit expiry deadlines are accepted of 40 min for future timestamps or explicit expiry deadlines are accepted
- Added `short_description` field to `api/v1/instance` for Mastodon compatibility; the corresponding
new setting `:pleroma, :instance, :short_description` is also preferred for nodeinfo use
- Note AP objects now expose full `replies` collections and those collections can be accessed on their own;
previously only self-replies were inlined as an anonymous collection into the Note object
### Fixed ### Fixed
- Internal actors no longer pretend to have unresolvable follow(er|ing) collections - Internal actors no longer pretend to have unresolvable follow(er|ing) collections
@ -27,17 +35,29 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
- fix network-path references not being handled by media proxy - fix network-path references not being handled by media proxy
- federation with bridgy now works - federation with bridgy now works
- remote signing keys are no longer refreshed multiple times per incoming request - remote signing keys are no longer refreshed multiple times per incoming request
- fix digest emails never being sent and clogging the job queue even if not enabled
- `api/v1/instance`s `uri` field now correctly shows the bare WebFinger domain
- fixed bug leading to `content` and thw `contentMap` entry of the primary language to sometimes diverge
- reloading emoji with a broken `pack.json` file being on disk no longer crashes the whole server
- fixed blocked servers being able to access local objects when authorized fetch isnt enabled
even when the remote server identifies itselfs
### Changed ### Changed
- Internal and relay actors are now again represented with type "Application" - Internal and relay actors are now again represented with type "Application"
- `cleanup_attachments` is now enabled by default - `cleanup_attachments` is now enabled by default
- shared inboxes are now generally preferred over personal inboxes, cutting down on duplicate publishing churn - shared inboxes are now generally preferred over personal inboxes, cutting down on duplicate publishing churn
- instance actors are now really of type `Service` - instance actors are now really of type `Service`
- ActivityPub delivery attempts are spaced out more giving up after 3h instead of ~20min before - ActivityPub delivery attempts are spaced out more and increased by one
now giving up after 24h instead of ~20min by default before
- inboxes now fake a succcess reply on incoming Delete documents whose signing key is unknown but gone; - inboxes now fake a succcess reply on incoming Delete documents whose signing key is unknown but gone;
this prevents older Mastodon from repeatedly trying to deliver Deletes of actors we never knew anyway this prevents older Mastodon from repeatedly trying to deliver Deletes of actors we never knew anyway
- The config option `config :pleroma, :http, :pool_max_idle_time` was removed; it never actually - The config option `config :pleroma, :http, :pool_max_idle_time` was removed; it never actually
did anything and was redundant with `config :pleroma, :http, :pool_timeout` which actually works. did anything and was redundant with `config :pleroma, :http, :pool_timeout` which actually works.
- repeated attempt to process incoming ActivityPub objects are spaced out more, allowing unreachable remotes
more time to come back up when e.g. processing repeats of a post not yet locally known
- `/api/v1/statuses/:id/reblog` now honours all possible visibilities except `list` and `conversation`
instead of mapping them down to a boolean private/public
## 2025.03 ## 2025.03

View file

@ -0,0 +1,17 @@
defmodule Pleroma.Repo.Migrations.DropAcceptsChatMessages do
use Ecto.Migration
def up do
alter table(:users) do
remove(:accepts_chat_messages)
end
end
def down do
alter table(:users) do
add(:accepts_chat_messages, :boolean, nullable: true)
end
execute("update users set accepts_chat_messages = true where local = true")
end
end

View file

@ -135,8 +135,8 @@ test "successfully processes incoming AP docs with correct origin" do
assert {:cancel, :already_present} = ObanHelpers.perform(job) assert {:cancel, :already_present} = ObanHelpers.perform(job)
end end
test "properly processes objects with the htmlMfm attribute true" do defp mfm_activity(object_overrides \\ %{}) do
params = %{ %{
"@context" => "https://www.w3.org/ns/activitystreams", "@context" => "https://www.w3.org/ns/activitystreams",
"actor" => "http://mastodon.example.org/users/admin", "actor" => "http://mastodon.example.org/users/admin",
"type" => "Create", "type" => "Create",
@ -145,17 +145,20 @@ test "properly processes objects with the htmlMfm attribute true" do
"type" => "Note", "type" => "Note",
"content" => "<p this-should-be-scrubbed-away>this is the original content</p>", "content" => "<p this-should-be-scrubbed-away>this is the original content</p>",
"source" => %{ "source" => %{
"content" => "content" => "this is the source content",
"this source content is irrelevant because the object content should be kept",
"mediaType" => "text/x.misskeymarkdown" "mediaType" => "text/x.misskeymarkdown"
}, },
"htmlMfm" => true,
"id" => "http://mastodon.example.org/users/admin/objects/1", "id" => "http://mastodon.example.org/users/admin/objects/1",
"attributedTo" => "http://mastodon.example.org/users/admin", "attributedTo" => "http://mastodon.example.org/users/admin",
"to" => ["https://www.w3.org/ns/activitystreams#Public"] "to" => ["https://www.w3.org/ns/activitystreams#Public"]
}, },
"to" => ["https://www.w3.org/ns/activitystreams#Public"] "to" => ["https://www.w3.org/ns/activitystreams#Public"]
} }
|> Map.update!("object", fn obj -> Map.merge(obj, object_overrides) end)
end
test "properly processes objects with the htmlMfm attribute true" do
params = mfm_activity(%{"htmlMfm" => true})
{:ok, job} = Federator.incoming_ap_doc(params) {:ok, job} = Federator.incoming_ap_doc(params)
{:ok, %Pleroma.Activity{data: %{"object" => object_ap_id}}} = ObanHelpers.perform(job) {:ok, %Pleroma.Activity{data: %{"object" => object_ap_id}}} = ObanHelpers.perform(job)
@ -165,30 +168,12 @@ test "properly processes objects with the htmlMfm attribute true" do
assert html_mfm == true assert html_mfm == true
refute content =~ "this-should-be-scrubbed-away" refute content =~ "this-should-be-scrubbed-away"
refute content =~ "source content is irrelevant" refute content =~ "this is the source content"
assert content =~ "this is the original content" assert content =~ "this is the original content"
end end
test "properly processes objects with the htmlMfm attribute false" do test "properly processes objects with the htmlMfm attribute false" do
params = %{ params = mfm_activity(%{"htmlMfm" => false})
"@context" => "https://www.w3.org/ns/activitystreams",
"actor" => "http://mastodon.example.org/users/admin",
"type" => "Create",
"id" => "http://mastodon.example.org/users/admin/activities/1",
"object" => %{
"type" => "Note",
"content" => "<p this-should-be-scrubbed-away>this is the original content</p>",
"source" => %{
"content" => "<p this-should-be-scrubbed-away>$[spin the source content is used]</p>",
"mediaType" => "text/x.misskeymarkdown"
},
"htmlMfm" => false,
"id" => "http://mastodon.example.org/users/admin/objects/1",
"attributedTo" => "http://mastodon.example.org/users/admin",
"to" => ["https://www.w3.org/ns/activitystreams#Public"]
},
"to" => ["https://www.w3.org/ns/activitystreams#Public"]
}
{:ok, job} = Federator.incoming_ap_doc(params) {:ok, job} = Federator.incoming_ap_doc(params)
{:ok, %Pleroma.Activity{data: %{"object" => object_ap_id}}} = ObanHelpers.perform(job) {:ok, %Pleroma.Activity{data: %{"object" => object_ap_id}}} = ObanHelpers.perform(job)
@ -198,29 +183,12 @@ test "properly processes objects with the htmlMfm attribute false" do
assert html_mfm == false assert html_mfm == false
refute content =~ "this-should-be-scrubbed-away" refute content =~ "this-should-be-scrubbed-away"
assert content =~ "the source content is used" assert content =~ "this is the source content"
refute content =~ "this is the original content" refute content =~ "this is the original content"
end end
test "properly processes objects with the htmlMfm attribute not set" do test "properly processes objects with the htmlMfm attribute not set" do
params = %{ params = mfm_activity()
"@context" => "https://www.w3.org/ns/activitystreams",
"actor" => "http://mastodon.example.org/users/admin",
"type" => "Create",
"id" => "http://mastodon.example.org/users/admin/activities/1",
"object" => %{
"type" => "Note",
"content" => "<p this-should-be-scrubbed-away>this is the original content</p>",
"source" => %{
"content" => "<p this-should-be-scrubbed-away>$[spin the source content is used]</p>",
"mediaType" => "text/x.misskeymarkdown"
},
"id" => "http://mastodon.example.org/users/admin/objects/1",
"attributedTo" => "http://mastodon.example.org/users/admin",
"to" => ["https://www.w3.org/ns/activitystreams#Public"]
},
"to" => ["https://www.w3.org/ns/activitystreams#Public"]
}
{:ok, job} = Federator.incoming_ap_doc(params) {:ok, job} = Federator.incoming_ap_doc(params)
{:ok, %Pleroma.Activity{data: %{"object" => object_ap_id}}} = ObanHelpers.perform(job) {:ok, %Pleroma.Activity{data: %{"object" => object_ap_id}}} = ObanHelpers.perform(job)
@ -228,9 +196,9 @@ test "properly processes objects with the htmlMfm attribute not set" do
%Pleroma.Object{data: %{"content" => content} = data} = %Pleroma.Object{data: %{"content" => content} = data} =
Pleroma.Object.get_by_ap_id(object_ap_id) Pleroma.Object.get_by_ap_id(object_ap_id)
assert Map.get(data, "htmlMfm") == nil refute Map.has_key?(data, "htmlMfm")
refute content =~ "this-should-be-scrubbed-away" refute content =~ "this-should-be-scrubbed-away"
assert content =~ "the source content is used" assert content =~ "this is the source content"
refute content =~ "this is the original content" refute content =~ "this is the original content"
end end