Commit graph

18,463 commits

Author SHA1 Message Date
Ekaterina Vaartis
456dbf9997 Linting 2026-11-04 18:24:27 +03:00
Ekaterina Vaartis
0f21f6e802 Pagination and schema fixes for the media management endpoint 2026-11-04 18:18:08 +03:00
Ekaterina Vaartis
70de22bf9b Output attachment objects when listing uploaded media, error if used
Produce an error if the attachment is used in any posts
2026-11-03 20:28:25 +03:00
Ekaterina Vaartis
e0dce797ad Work-in-progress media management
Adds a way to list media files uploaded by the user and delete
them. Ideally needs to at least check if the attachment is used
somewhere before actually deleting it, still.
2026-11-03 12:16:12 +03:00
lain
d2b89f5723 Merge pull request 'Federation: do not federate Undo Block when outgoing_blocks is off' (#8044) from lambadalambda/pleroma:fix/undo-block-outgoing-blocks into develop
Reviewed-on: https://git.pleroma.social/pleroma/pleroma/pulls/8044
2026-11-02 09:07:03 +00:00
lain
b1c51018a3 Merge pull request 'HTTP: back off from hosts that answer 429 or 503' (#8049) from lambadalambda/pleroma:feat/http-backoff into develop
Reviewed-on: https://git.pleroma.social/pleroma/pleroma/pulls/8049
2026-11-02 08:38:04 +00:00
Lain Soykaf
4070b7be21
fix(http): back off from the host that answered, and read Unix resets
After a redirect the 429/503 came from the final host, but the backoff
was recorded for the requested one. X-RateLimit-Reset is also accepted
as a Unix timestamp or as seconds.
2026-11-01 17:03:11 +04:00
lain
ec6c522ba6 Merge pull request 'Gun: connect to hosts that only have IPv6 addresses' (#8052) from lambadalambda/pleroma:fix/gun-ipv6-only-hosts into develop
Reviewed-on: https://git.pleroma.social/pleroma/pleroma/pulls/8052
2026-11-01 12:38:29 +00:00
lain
356daab6af Merge pull request 'Federation: refetch a stale Move target once' (#8051) from lambadalambda/pleroma:fix/move-refetch-target into develop
Reviewed-on: https://git.pleroma.social/pleroma/pleroma/pulls/8051
2026-11-01 10:56:52 +00:00
lain
f71474b10b Merge pull request 'Update ssl_verify_fun and phoenix_html for security advisories' (#8055) from lambadalambda/pleroma:build/advisory-bumps into develop
Reviewed-on: https://git.pleroma.social/pleroma/pleroma/pulls/8055
2026-11-01 09:58:19 +00:00
lain
23f9484a76 Merge pull request 'Akkoma fixes: context, polls, media proxy, ConfigDB, API params' (#8047) from lambadalambda/pleroma:fix/akkoma-tier2 into develop
Reviewed-on: https://git.pleroma.social/pleroma/pleroma/pulls/8047
2026-11-01 09:11:11 +00:00
Lain Soykaf
9b7c59bc21
build: update ssl_verify_fun and phoenix_html for advisories
ssl_verify_fun 1.1.9 fixes partial-label wildcard matching
(EEF-CVE-2026-117666); Hackney uses its verify_fun for every HTTPS
request. phoenix_html 3.3.5 escapes attribute names
(EEF-CVE-2026-117645).
2026-11-01 11:10:49 +04:00
lain
d3495ceead Merge pull request 'Rate limit C2S outbox posts and emoji reactions' (#8042) from lambadalambda/pleroma:fix/c2s-rate-limit into develop
Reviewed-on: https://git.pleroma.social/pleroma/pleroma/pulls/8042
2026-10-31 16:22:00 +00:00
lain
240bc1be1f Merge pull request 'Search: fetch remote statuses only when resolving is allowed' (#8031) from lambadalambda/pleroma:fix/search-remote-fetch into develop
Reviewed-on: https://git.pleroma.social/pleroma/pleroma/pulls/8031
2026-10-31 16:20:39 +00:00
lain
2f9252c858 Merge pull request 'CastAndValidate: keep replace_params: false when strict is off' (#8045) from lambadalambda/pleroma:fix/cast-and-validate-cast-opts into develop
Reviewed-on: https://git.pleroma.social/pleroma/pleroma/pulls/8045
2026-10-31 16:19:35 +00:00
lain
0157ade4d3 Merge pull request 'MRF: match domain rules literally' (#8046) from lambadalambda/pleroma:fix/mrf-domain-regex-escape into develop
Reviewed-on: https://git.pleroma.social/pleroma/pleroma/pulls/8046
2026-10-31 16:18:35 +00:00
lain
4b08f7a553 Merge pull request 'Akkoma interop fixes: emoji reacts, personal inbox, markers, data: URLs' (#8050) from lambadalambda/pleroma:fix/akkoma-interop into develop
Reviewed-on: https://git.pleroma.social/pleroma/pleroma/pulls/8050
2026-10-31 16:17:48 +00:00
Lain Soykaf
542f8b2aef
fix(media_proxy): do not proxy data: URLs
Ported from Akkoma 7632765b4.

Co-authored-by: nopjmp <nop@unearthly.dev>
2026-10-31 18:47:54 +04:00
Lain Soykaf
13663cba71
fix(mastodon_api): use the Mastodon date format for marker updated_at
Ported from Akkoma 720785b4c.

Co-authored-by: Oneric <oneric@oneric.stub>
2026-10-31 18:47:54 +04:00
Lain Soykaf
d601a94c69
fix(api_spec): drop every unexpected query param in permissive mode
Ported from Akkoma 7e6efb235.

Co-authored-by: Oneric <oneric@oneric.stub>
2026-10-31 18:47:27 +04:00
Lain Soykaf
88a9562a9b
fix(config): skip ConfigDB settings for modules that no longer exist
Ported from Akkoma af7c3fab9; the rescue is in the Ecto type load so
admin input is still validated.

Co-authored-by: FloatingGhost <hannah@coffee-and-dreams.uk>
2026-10-31 18:47:26 +04:00
Lain Soykaf
6f31149d21
fix(gun): connect to hosts that only have IPv6 addresses
Gun resolves host names over IPv4 only unless :inet6 is in tcp_opts.
When the A lookup finds nothing, retry once with :inet6. Gun now runs
under its supervisor, so a failed connect no longer kills the pool
worker through the link; the worker still links after a successful open.
2026-10-31 15:53:51 +04:00
Lain Soykaf
3cd201c365
fix(activitypub): refetch a stale Move target once
A Move usually follows right after the alias was added, and the cached
remote target may not have it yet. Refetch the target when the alias is
missing instead of rejecting the Move. Same issue as Akkoma f18e2ba42.
2026-10-31 15:53:41 +04:00
Lain Soykaf
e0546f188d
fix(activitypub): do not require the personal inbox owner to be addressed
Bridgy Fed delivers Follow and Accept to the personal inbox addressed
only to Public. Any server can already address a local user directly,
so the check gave no protection. Ported from Akkoma 2b885288f.

Co-authored-by: Oneric <oneric@oneric.stub>
2026-10-31 15:37:41 +04:00
Lain Soykaf
654a41b2c9
fix(activitypub): accept emoji reactions with a single tag object
Ported from Akkoma 462225880.

Co-authored-by: Oneric <oneric@oneric.stub>
2026-10-31 15:37:41 +04:00
Lain Soykaf
b29d9d0981
fix(workers): snooze incoming jobs while a host is backed off
With 5 attempts and Oban's short retry delays, an incoming activity from
an unknown actor on a backed-off host was discarded without a request.
ReceiverWorker and SignatureRetryWorker now snooze for up to 2 hours.
Also lowercase backoff host keys and log backed-off user fetches at debug.
2026-10-31 14:35:58 +04:00
Lain Soykaf
8ce283f966
feat(http): back off from hosts that answer 429 or 503
Object fetches and WebFinger stop sending requests to a host until
Retry-After or X-RateLimit-Reset (default 5 minutes, max 1 hour).
Ported from Akkoma's Pleroma.HTTP.Backoff.

Co-authored-by: FloatingGhost <hannah@coffee-and-dreams.uk>
Co-authored-by: Oneric <oneric@oneric.stub>
2026-10-31 14:18:45 +04:00
Lain Soykaf
58a6534a44
fix(media_proxy): serve static previews instead of redirecting to the main host
Ported from Akkoma 4a810bb2e.

Co-authored-by: Oneric <oneric@oneric.stub>
2026-10-31 13:43:59 +04:00
Lain Soykaf
c3fb297b89
fix(activitypub): apply the Note fixups to incoming Questions
Ported from Akkoma 678f6fdb7.

Co-authored-by: Oneric <oneric@oneric.stub>
2026-10-31 13:43:59 +04:00
Lain Soykaf
b486a84fef
fix(context): show local-only replies to local users
Ported from Akkoma 7869030e0.

Co-authored-by: Oneric <oneric@oneric.stub>
2026-10-31 13:43:59 +04:00
Lain Soykaf
7e157d8cc9
fix(mrf): match domain rules literally
Escape the domain so `.` only matches a dot, and use an optional
group for the `*.` prefix, which matches the same hosts without
exponential backtracking. Bad entries now match nothing instead of
raising on every check.
2026-10-31 13:17:50 +04:00
Lain Soykaf
163c49c649
fix(api_spec): pass cast options on the first permissive cast
Without them replace_params: false was ignored when strict is off, so
conn.params got atom keys and RateLimiter params: ["id"] buckets
collapsed to one per user.
2026-10-31 13:12:15 +04:00
Lain Soykaf
865bcfb7b1
chore: add changelog entry for Undo Block federation 2026-10-31 12:36:22 +04:00
Floatingghost
06612c802b
Do not federate undo->block activities
the :do_not_federate checks were omitted from the undo pipeline,
which could lead to them federating.

this commit enforces :outgoing_blocks on undos as well - and
any existing value of :do_not_federate is preserved, if one exists

Akkoma issue 957.

[Pleroma: block/unblock test calls use the Pleroma (blocked, blocker) argument order.]

(cherry picked from commit eca7ed572b8a10a0235fb1a381eac4803614dee4)
2026-10-31 12:36:22 +04:00
Lain Soykaf
f568536b65
test(status_view): resolve the remote status as a logged-in user 2026-10-31 12:30:57 +04:00
Lain Soykaf
db43aec782
fix(search): fetch remote statuses only when resolving is allowed
Status search fetched any http(s) query from its remote server, for
anonymous users, on every result page and with resolve=false, so anyone
could make the server fetch URLs. As in Mastodon and in Pleroma's user
search, fetch only with resolve=true, on the first page, and for
anonymous users only if [:instance, :limit_to_local_content] is false.

Based on Akkoma ca9e33ed2 and 17efec060.

Co-authored-by: Oneric <oneric@oneric.stub>
2026-10-31 12:30:57 +04:00
Lain Soykaf
924df2a063
chore: add changelog entry for C2S rate limits 2026-10-31 11:51:28 +04:00
Lain Soykaf
a4f1300578
fix(pleroma_api): rate limit emoji reactions
The emoji reaction create and delete endpoints had no rate limiter.
Apply :statuses_actions like the other status actions, plus a per-status
:status_id_action bucket ("status_id_action:emoji_react") in the same way
favourite and reblog do.
2026-10-31 11:51:28 +04:00
Lain Soykaf
44adf271c2
fix(activitypub): rate limit C2S outbox posts
POST /users/:nickname/outbox had no rate limiter, so a client could send
unlimited activities through the C2S API. Apply :statuses_actions to
update_outbox. RateLimiter keys buckets by limiter name and user, so the
outbox shares one counter with the Mastodon API status actions and mixing
both APIs does not double the limit.
2026-10-31 11:51:24 +04:00
lain
3e9dc477c9 Merge pull request 'Uploads: replace exiftool with the built-in exif_stripper' (#8028) from lambadalambda/pleroma:feature/exif-stripper into develop
Reviewed-on: https://git.pleroma.social/pleroma/pleroma/pulls/8028
2026-10-31 07:48:00 +00:00
lain
9e7bfbe16b Merge pull request 'Fix per-status rate limit for favourites and reblogs' (#8043) from lambadalambda/pleroma:fix/status-id-action-rate-limit into develop
Reviewed-on: https://git.pleroma.social/pleroma/pleroma/pulls/8043
2026-10-30 11:17:06 +00:00
Lain Soykaf
53b79781da
fix(mastodon_api): rate limit status actions per status id
StatusController keeps string param keys (replace_params: false, since
b8db67daf), so params: [:id] never matched and status_id_action became
one bucket per user across all statuses (3 favourites/reblogs a minute).
2026-10-30 10:40:18 +04:00
lain
160c5c8f7d Merge pull request 'Stats: read peers from the instances table' (#8030) from lambadalambda/pleroma:perf/stats-peers-from-instances into develop
Reviewed-on: https://git.pleroma.social/pleroma/pleroma/pulls/8030
2026-10-29 10:15:17 +00:00
lain
95e210646b Merge pull request 'Sec: Update bandit to 1.14.1 and jose to 1.11.13' (#8037) from lambadalambda/pleroma:sec/bandit-1.14.1-jose-1.11.13 into develop
Reviewed-on: https://git.pleroma.social/pleroma/pleroma/pulls/8037
2026-10-29 09:36:18 +00:00
lain
ca44028928 Merge pull request 'Federation: reject stale and incomplete HTTP signatures' (#8033) from lambadalambda/pleroma:fix/signature-freshness into develop
Reviewed-on: https://git.pleroma.social/pleroma/pleroma/pulls/8033
2026-10-29 09:35:47 +00:00
lain
a17da1a431 Merge pull request 'CI: make the changelog check fetch only the target branch tip' (#8039) from lambadalambda/pleroma:ci/cheap-changelog-check into develop
Reviewed-on: https://git.pleroma.social/pleroma/pleroma/pulls/8039
2026-10-29 09:04:58 +00:00
lain
a9bea940a4 Merge pull request 'Search: set gin_fuzzy_search_limit only for search queries' (#8038) from lambadalambda/pleroma:fix/gin-fuzzy-search-limit into develop 2026-10-29 09:00:15 +00:00
Lain Soykaf
f26a760f86
ci: fetch only the target branch tip trees in check-changelog
The check fetched the whole history of develop with all tags for every
pull request (about 250 MB), which was slow and loaded the git server.
Listing added files only needs the trees of the tip.
2026-10-29 12:37:02 +04:00
Lain Soykaf
fa8541309c
fix(search): set gin_fuzzy_search_limit only for search queries
The limit was a connection parameter, so it applied to every GIN index
scan, not only full-text search: recipient lookups and Oban job queries
could return incomplete, random results. Set it with SET LOCAL around
the search query only, configurable under Pleroma.Search.DatabaseSearch.

The default stays 500 for search: measured on a 74M-object database,
higher limits or none make searches for common words exceed the query
timeout. Remote fetches for URL queries run outside the transaction.

Based on Akkoma 811f0a468.

Co-authored-by: Oneric <oneric@oneric.stub>
2026-10-29 11:26:02 +04:00
Lain Soykaf
1849356abe
fix(instances): record the instance when refreshing known users too
Hosts without a row (IPv6 literals skipped by the backfill, rows deleted
later) were never added again, because known users take the update path.
2026-10-29 10:42:54 +04:00