Compare commits

...

248 commits

Author SHA1 Message Date
4e4d5bbc09 Merge remote-tracking branch 'upstream/main'
All checks were successful
continuous-integration/drone Build is passing
2025-02-24 15:18:05 +01:00
renovate[bot]
b1692628de
fix(deps): update dependency postcss-preset-env to v10.1.5 (#33986)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-24 09:33:09 +00:00
github-actions[bot]
5a3fb4594b
New Crowdin Translations (automated) (#33977)
Co-authored-by: GitHub Actions <noreply@github.com>
2025-02-24 08:48:56 +00:00
renovate[bot]
3a60b53e9a
chore(deps): update dependency selenium-webdriver to v4.29.1 (#33981)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-24 08:35:42 +00:00
Matt Jankowski
db97197685
Remove rails-controller-testing gem (#33955) 2025-02-21 14:00:16 +00:00
renovate[bot]
68e5f0c452
fix(deps): update dependency ws to v8.18.1 (#33970)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-21 11:48:32 +00:00
Matt Jankowski
2a15bf4ede
Convert admin/roles controller spec to request/sytem specs (#33947) 2025-02-21 11:47:47 +00:00
Matt Jankowski
93bc48d649
Use bundler version 2.6.5 (#33965) 2025-02-21 07:55:34 +00:00
Claire
26c692d45b
Fix streaming server not filtering unknown-language posts from public timelines (#33774) 2025-02-21 07:48:31 +00:00
github-actions[bot]
2788808b07
New Crowdin Translations (automated) (#33967)
Co-authored-by: GitHub Actions <noreply@github.com>
2025-02-21 07:41:14 +00:00
renovate[bot]
8d3bd919d8
chore(deps): update dependency selenium-webdriver to v4.29.0 (#33969)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-21 07:41:08 +00:00
Matt Jankowski
d065d02d88
Improve example wording in 2FA/confirmations controller spec (#33944) 2025-02-21 07:31:06 +00:00
renovate[bot]
fc83fdc993
fix(deps): update dependency postcss to v8.5.3 (#33962)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-21 07:29:53 +00:00
Eugen Rochko
12d0533bd7
Change "Specific people" to "Private mention" in menu in web UI (#33963) 2025-02-21 07:29:34 +00:00
renovate[bot]
52c6f6dffc
fix(deps): update dependency uuid to v11.1.0 (#33964)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-21 07:24:35 +00:00
renovate[bot]
d103be09ab
chore(deps): update dependency nokogiri to v1.18.3 [security] (#33961)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-19 08:17:40 +00:00
github-actions[bot]
70f8fb6d08
New Crowdin Translations (automated) (#33960)
Co-authored-by: GitHub Actions <noreply@github.com>
2025-02-19 08:17:23 +00:00
Matt Jankowski
f1d4be1e75
Use preferred allowed origin configuration style for webauthn config (#33953) 2025-02-18 15:03:43 +00:00
Matt Jankowski
fbea3a64cc
Convert statuses spec controller->system/request (#33921) 2025-02-18 11:43:49 +00:00
renovate[bot]
c7f208eecf
chore(deps): update dependency webauthn to v3.4.0 (#33950)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-18 10:27:46 +00:00
github-actions[bot]
e2eceaf2fa
New Crowdin Translations (automated) (#33949)
Co-authored-by: GitHub Actions <noreply@github.com>
2025-02-18 10:23:53 +00:00
Matt Jankowski
d75c4bf53e
Update rubocop to version 1.72.2 and use plugins configuration style (#33946) 2025-02-18 08:25:41 +00:00
renovate[bot]
405fa6de55
fix(deps): update babel monorepo to v7.26.9 (#33929)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-18 08:22:18 +00:00
renovate[bot]
32fd40d689
fix(deps): update dependency sass to v1.85.0 (#33924)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-18 08:21:53 +00:00
renovate[bot]
4d5ae1069c
fix(deps): update dependency ioredis to v5.5.0 (#33878)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-18 08:21:24 +00:00
renovate[bot]
ea5805c8a9
chore(deps): update docker.io/ruby docker tag to v3.4.2 (#33936)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-17 09:58:09 +00:00
renovate[bot]
e3d97006a2
chore(deps): update dependency ruby to v3.4.2 (#33935)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-17 09:57:44 +00:00
renovate[bot]
47a1f72ee6
chore(deps): update dependency annotaterb to v4.14.0 (#33943)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-17 09:27:37 +00:00
Matt Jankowski
ea53faeb3f
Convert admin/users/roles spec controller->system/request (#33930) 2025-02-17 09:25:25 +00:00
github-actions[bot]
a3ef72a541
New Crowdin Translations (automated) (#33933)
Co-authored-by: GitHub Actions <noreply@github.com>
2025-02-17 09:22:13 +00:00
github-actions[bot]
5cd80b7836
New Crowdin Translations (automated) (#33925)
Co-authored-by: GitHub Actions <noreply@github.com>
2025-02-14 08:38:48 +00:00
github-actions[bot]
58a029335b
New Crowdin Translations (automated) (#33918)
Co-authored-by: GitHub Actions <noreply@github.com>
2025-02-13 10:50:09 +00:00
Matt Jankowski
8f1b41622b
Convert settings/two_factor_authentication_methods spec controller->system/request (#33914) 2025-02-13 10:50:04 +00:00
Matt Jankowski
62dc303d3c
Convert settings/two_factor_authentication/recovery_codes spec controller->system/request (#33912) 2025-02-13 08:02:01 +00:00
renovate[bot]
c433fd01a6
fix(deps): update dependency postcss-preset-env to v10.1.4 (#33915)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-13 07:58:52 +00:00
renovate[bot]
efd485cb46
fix(deps): update dependency pg to v8.13.3 (#33916)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-13 07:58:27 +00:00
Matt Jankowski
4fc8c69129
Update selenium-webdriver to version 4.28.0 (#33908) 2025-02-12 16:32:16 +00:00
Claire
1248c4d1f4
Fix handling of duplicate mentions in incoming status Update (#33911) 2025-02-12 15:34:56 +00:00
Claire
6b52227fcc
Fix Mastodon listing updates older or equal to current version (#33906) 2025-02-12 14:27:42 +00:00
Matt Jankowski
fb0856458b
Verify page content in ChallengableConcern spec (#33895) 2025-02-12 14:24:17 +00:00
Matt Jankowski
6df24b4bc2
Move signed out statuses controller spec examples to request spec (#33907) 2025-02-12 14:24:03 +00:00
Matt Jankowski
b07cd11f4c
Convert settings/migration/redirects spec controller->system (#33905) 2025-02-12 14:06:35 +00:00
Claire
db59f37269
Fix redirect after log-in when allow_referrer_origin setting is enabled (#33903) 2025-02-12 12:58:48 +00:00
Nicholas La Roux
7a50fd8849
Migrate BlockDomainService notification job enqueueing to Sidekiq's perform_bulk for efficiency (#33897) 2025-02-12 12:48:09 +00:00
Claire
447d12aa08
Update dependency net-imap to 0.5.6 (#33901) 2025-02-12 10:31:42 +00:00
renovate[bot]
773d58eb70
chore(deps): update node.js to 22.14 (#33889)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-12 10:02:53 +00:00
renovate[bot]
dd25023f8c
chore(deps): update dependency rack to v2.2.11 (#33900)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-12 08:37:16 +00:00
github-actions[bot]
e918d4e3e8
New Crowdin Translations (automated) (#33899)
Co-authored-by: GitHub Actions <noreply@github.com>
2025-02-12 08:33:41 +00:00
Matt Jankowski
506a70d0d8
Convert "http signatures" portion of statuses controller spec to request spec (#33890) 2025-02-12 08:33:25 +00:00
Matt Jankowski
aa10e8f399
Verify page content in 2FA portion of auth/sessions controller spec (#33891) 2025-02-12 08:14:35 +00:00
Matt Jankowski
4c597d5e2c
Convert settings/privacy spec controller->system (#33894) 2025-02-12 08:13:01 +00:00
renovate[bot]
46329d297a
chore(deps): update dependency ox to v2.14.22 (#33896)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-12 08:07:11 +00:00
renovate[bot]
5c81921ef5
fix(deps): update dependency pg to v8.13.2 (#33892)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-12 08:04:34 +00:00
github-actions[bot]
0b4e5b64f9
New Crowdin Translations (automated) (#33885)
Co-authored-by: GitHub Actions <noreply@github.com>
2025-02-11 06:50:18 +00:00
Matt Jankowski
4e58570f73
Use common before and contexts in admin/base controller spec (#33879) 2025-02-11 06:49:51 +00:00
Matt Jankowski
7d20c12913
Convert settings/featured_tags controller->request/system spec (#33880) 2025-02-11 06:45:34 +00:00
Matt Jankowski
dd2cb77f1a
Remove unused "oversized" spec fixture PNG file (#33881) 2025-02-11 06:45:27 +00:00
Matt Jankowski
83a271c003
Run optimize PNG on archetypes images (#33882) 2025-02-11 06:45:22 +00:00
renovate[bot]
57373ee344
fix(deps): update dependency postcss to v8.5.2 (#33884)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-11 06:39:28 +00:00
renovate[bot]
8a2ebcb8ef
fix(deps): update formatjs monorepo (#33877)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-10 10:16:04 +00:00
github-actions[bot]
804e6832d3
New Crowdin Translations (automated) (#33861)
Co-authored-by: GitHub Actions <noreply@github.com>
2025-02-10 10:10:38 +00:00
renovate[bot]
3a47dd78ac
fix(deps): update babel monorepo to v7.26.8 (#33868)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-10 09:22:36 +00:00
renovate[bot]
08f8bc4dfa
chore(deps): update dependency stoplight to v4.1.1 (#33867)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-10 07:33:44 +00:00
Matt Jankowski
8c240ef042
Remove final remaining assigns usage in controller specs (#33866) 2025-02-10 07:33:36 +00:00
Claire
1cf30717db
Fix potential inefficiency in media privacy system check (#33858) 2025-02-07 10:22:59 +00:00
renovate[bot]
38a3e8d0e3
chore(deps): update dependency webauthn to v3.3.0 (#33857)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-07 09:11:01 +00:00
github-actions[bot]
b7bc7cd087
New Crowdin Translations (automated) (#33856)
Co-authored-by: GitHub Actions <noreply@github.com>
2025-02-07 08:51:09 +00:00
renovate[bot]
5ffc17415c
chore(deps): update dependency ruby-vips to v2.2.3 (#33853)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-07 08:48:43 +00:00
renovate[bot]
6d5e6a6818
chore(deps): update dependency rspec-rails to v7.1.1 (#33850)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-06 15:18:41 +00:00
renovate[bot]
d8f1881ab0
chore(deps): update dependency fog-core to v2.6.0 (#33775)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-06 15:18:20 +00:00
Matt Jankowski
23a0d91126
Combine examples to reduce factories in specs (#33841) 2025-02-06 10:54:31 +00:00
renovate[bot]
aff2b11394
chore(deps): update dependency fog-openstack to v1.1.4 (#33843)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-06 10:54:27 +00:00
renovate[bot]
9701c6f148
fix(deps): update dependency sass to v1.84.0 (#33845)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-06 10:54:22 +00:00
renovate[bot]
116f5826d3
chore(deps): update dependency webmock to v3.25.0 (#33848)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-06 10:54:15 +00:00
github-actions[bot]
9692ffb911
New Crowdin Translations (automated) (#33847)
Co-authored-by: GitHub Actions <noreply@github.com>
2025-02-06 10:53:56 +00:00
Claire
9e164c532f
Add --skip-filled-timeline option to tootctl feed build to skip half-filled feeds (#33844) 2025-02-06 09:38:32 +00:00
Claire
a9643cb7e7
Use github's native arm64 runners for docker builds (#33788) 2025-02-05 15:58:28 +00:00
Claire
334d306ccc
Fix filtering for lists (#33842) 2025-02-05 15:08:12 +00:00
Claire
1be5269151
Optimize timeline generation (#33839) 2025-02-05 14:02:39 +00:00
Renaud Chaput
4af91e564d
Fix a missing require when enabling the local prometheus exporter with Sidekiq (#33840) 2025-02-05 13:49:47 +00:00
renovate[bot]
5cb54f7c5e
chore(deps): update dependency opentelemetry-instrumentation-redis to v0.26.1 (#33837)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-05 09:23:13 +00:00
Matt Jankowski
c3419d146a
Remove duplicate cache header setting before action (#33833) 2025-02-05 09:19:08 +00:00
renovate[bot]
8dce5138dd
chore(deps): update opentelemetry-ruby (non-major) (#33834)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-05 08:58:05 +00:00
github-actions[bot]
7dca242795
New Crowdin Translations (automated) (#33835)
Co-authored-by: GitHub Actions <noreply@github.com>
2025-02-05 08:53:32 +00:00
Matt Jankowski
3b1ba46c93
Use require: false on CLI/console tool gems in Gemfile (#33830) 2025-02-04 16:08:27 +00:00
Matt Jankowski
745391092c
Configure webpacker cache_manifest: true in non-dev environments (#33832) 2025-02-04 15:55:10 +00:00
Matt Jankowski
95caa8bc4e
Switch coverage generation default to false, allow opt in with COVERAGE env var (#33824) 2025-02-04 11:14:45 +00:00
Claire
5212cd43ec
Change preview cards to be shown when Content Warnings are expanded (#33827) 2025-02-04 10:40:43 +00:00
github-actions[bot]
c3e80784ee
New Crowdin Translations (automated) (#33825)
Co-authored-by: GitHub Actions <noreply@github.com>
2025-02-04 09:39:07 +00:00
Claire
5553941666
Drop custom scopes conversion code from /settings/applications controller (#33819) 2025-02-04 09:31:42 +00:00
renovate[bot]
bc0fb83ce5
chore(deps): update dependency rubocop to v1.71.2 (#33826)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-04 09:25:06 +00:00
Claire
44f5f1f0a5
Fix emoji rewrite adding unnecessary curft to the DOM for most emoji (#33818) 2025-02-03 13:43:45 +00:00
Claire
b1c9cff71b
Add language column to public timelines index (#33779) 2025-02-03 13:41:44 +00:00
github-actions[bot]
a85a9f98d9
New Crowdin Translations (automated) (#33802)
Co-authored-by: GitHub Actions <noreply@github.com>
2025-02-03 08:40:09 +00:00
Matt Jankowski
107b2afb74
Revert selenium-webdriver version bump (#33797) 2025-02-03 07:49:31 +00:00
renovate[bot]
4b6c955e5b
chore(deps): update dependency strong_migrations to v2.2.0 (#33808)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-03 07:49:05 +00:00
renovate[bot]
cefa829c1d
chore(deps): update dependency typescript to v5.7.3 (#33814)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-03 07:48:45 +00:00
renovate[bot]
7481d94bb6
chore(deps): update definitelytyped types (non-major) (#33813)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-02-03 07:48:35 +00:00
Claire
cf820b2eca
Fix /settings/applications rejecting scopes parameter (#33798) 2025-02-02 21:11:32 +00:00
renovate[bot]
f79b96a5ef
chore(deps): update dependency rubocop to v1.71.1 (#33796)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-31 14:52:27 +00:00
renovate[bot]
a29fc4b44a
chore(deps): update dependency puma to v6.6.0 (#33768)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-31 14:14:07 +00:00
Matt Jankowski
77587913ce
Convert admin/reports spec controller->system (#33789) 2025-01-31 08:15:51 +00:00
github-actions[bot]
91e4a09f24
New Crowdin Translations (automated) (#33795)
Co-authored-by: GitHub Actions <noreply@github.com>
2025-01-31 08:09:02 +00:00
Matt Jankowski
c5cd9bda48
Convert auth/passwords spec controller->system/request (#33790) 2025-01-31 08:08:56 +00:00
renovate[bot]
7c03327a17
chore(deps): update dependency haml_lint to v0.60.0 (#33791)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-31 07:59:58 +00:00
Claire
a3d2849d15
Fix tootctl feeds build not building list timelines (#33783) 2025-01-30 09:18:46 +00:00
github-actions[bot]
3f4f6317d4
New Crowdin Translations (automated) (#33787)
Co-authored-by: GitHub Actions <noreply@github.com>
2025-01-30 08:52:04 +00:00
renovate[bot]
005b2ba32f
chore(deps): update dependency pino-pretty to v13 (#33778)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-29 15:18:48 +00:00
Claire
e53c8fbaf8
Fix PollExpirationValidator redundant check for expires_at presence (#33777) 2025-01-29 14:37:59 +00:00
Wolf Noble
7ffda06b6a
build(Dockerfiles): Set the base registry via an ARG (#33712) 2025-01-29 13:09:17 +00:00
Eugen Rochko
796187c1e8
Add ability to dismiss alt text badge by tapping it in web UI (#33737) 2025-01-29 12:51:47 +00:00
Claire
2d545c5fe5
Fix flaky test in /api/v2/notifications tests (#33773) 2025-01-29 12:49:03 +00:00
Eugen Rochko
1e70da5e3c
Add reminder when about to post without alt text in web UI (#33760) 2025-01-29 11:37:56 +00:00
Matt Jankowski
2beab34ca4
Convert admin/email_domain_blocks controller -> system spec (#33759) 2025-01-29 10:54:20 +00:00
Eugen Rochko
6aa565b319
Fix missing button styles on some forms (#33771) 2025-01-29 10:36:24 +00:00
Claire
51bbca7723
Fix “x” hotkey not working on boosted filtered posts (#33758) 2025-01-29 10:15:32 +00:00
Claire
85668becde
Change language detection debouncing behavior to refresh at least once every 1.5 seconds (#33770) 2025-01-29 09:26:06 +00:00
Eugen Rochko
82183d8a79
Add loading indicator to timeline gap indicators in web UI (#33762) 2025-01-29 08:46:04 +00:00
Claire
bd481204b5
Fix missing timeout options in Request class (#33769) 2025-01-29 08:42:20 +00:00
github-actions[bot]
9c85825ac6
New Crowdin Translations (automated) (#33766)
Co-authored-by: GitHub Actions <noreply@github.com>
2025-01-29 08:38:53 +00:00
renovate[bot]
8e24c4801d
Update dependency opentelemetry-instrumentation-rails to v0.35.1 (#33767)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-29 08:27:27 +00:00
Claire
5b291fcbe4
Fix incorrect signature after HTTP redirect (#33757) 2025-01-28 14:44:27 +00:00
Claire
32aa83e9d7
Fix polls not being validated on edition (#33755) 2025-01-28 14:38:18 +00:00
github-actions[bot]
80f72ee501
New Crowdin Translations (automated) (#33753)
Co-authored-by: GitHub Actions <noreply@github.com>
2025-01-28 09:40:50 +00:00
renovate[bot]
0091459369
Update RuboCop (non-major) to v1.71.0 (#33644)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-28 08:39:50 +00:00
Claire
6646a0a9fa
Fix parameter validation in our custom devise strategies (#33754) 2025-01-28 08:21:59 +00:00
Matt Jankowski
8a2d764d34
Reduce factory creation across controllers/admin specs (#33752) 2025-01-28 08:08:16 +00:00
Matt Jankowski
93f3c724ae
Use expect in remaining controller locations (#33748) 2025-01-27 16:32:06 +00:00
Claire
ea743d68f3
Fix error in TwoFactorPamAuthenticatable when handling invalid params (#33746) 2025-01-27 16:30:18 +00:00
Claire
e97335191d
Add hover cards to follow suggestions (#33749) 2025-01-27 16:24:41 +00:00
Matt Jankowski
d3b637c757
Use expect in Admin::ExportControllerConcern import params (#33745) 2025-01-27 14:29:25 +00:00
Matt Jankowski
65d9171c7d
Use expect for admin/ controllers (#33686) 2025-01-27 14:05:16 +00:00
Renaud Chaput
59384282ed
Add an optional metric exporter (#33734) 2025-01-27 12:52:30 +00:00
renovate[bot]
b868e30fdf
Update dependency @reduxjs/toolkit to v2.5.1 (#33739)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-27 12:47:23 +00:00
renovate[bot]
df63470ea6
Update dependency ox to v2.14.21 (#33740)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-27 12:47:20 +00:00
renovate[bot]
f8f31826bd
Update formatjs monorepo (#33656)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-27 12:46:11 +00:00
github-actions[bot]
b53bf23df0
New Crowdin Translations (automated) (#33731)
Co-authored-by: GitHub Actions <noreply@github.com>
2025-01-27 08:39:56 +00:00
Mikkel Ricky
2bfcda172d
Fix documentation URL (#33728) 2025-01-27 08:23:53 +00:00
Eugen Rochko
956873362e
Remove system tooltip for alt text in web UI (#33736) 2025-01-27 08:17:59 +00:00
Eugen Rochko
81271a18c5
Fix color of language indicator in light theme in web UI (#33724) 2025-01-27 08:08:31 +00:00
Eugen Rochko
52a5c8ae05
Refactor <LanguageDropdown> into TypeScript (#33723) 2025-01-27 08:06:33 +00:00
Eugen Rochko
2df86d6413
Fix wrong styles on rules and buttons in the sign-up form (#33725) 2025-01-24 22:20:05 +00:00
renovate[bot]
79cbb6160d
Update dependency react-select to v5.10.0 (#33722)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-24 17:16:22 +00:00
Matt Jankowski
f73df1f2b0
Fix Style/HashSlice cop violations (#33720) 2025-01-24 16:57:55 +00:00
renovate[bot]
469c8f8db1
Update babel monorepo to v7.26.7 (#33721)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-24 16:49:48 +00:00
Claire
9a0166c3f3
Convert LanguageDropdownMenu to functional component (#33704) 2025-01-24 16:11:23 +00:00
Matt Jankowski
a1d9c3fb99
Use expect params wrapper for more "auth" and "2FA" "controllers" (#33717) 2025-01-24 14:40:20 +00:00
github-actions[bot]
e44b78413a
New Crowdin Translations (automated) (#33711)
Co-authored-by: GitHub Actions <noreply@github.com>
2025-01-24 09:06:25 +00:00
Christian Schmidt
5c50d89a86
Store Bootsnap cache outside bind mounts (devcontainer only) (#33677) 2025-01-24 08:18:46 +00:00
Claire
7261951791
Fix LDSignature tests (#33705) 2025-01-23 17:56:33 +00:00
Claire
4b4de02fee
Remove broken link to Terms of Service when none are defined (#33699) 2025-01-23 14:34:30 +00:00
Claire
ffaf458f99
Change “Prohibited uses” section of ToS template according to feedback (#33703) 2025-01-23 14:09:33 +00:00
github-actions[bot]
1b2c952471
New Crowdin Translations (automated) (#33697)
Co-authored-by: GitHub Actions <noreply@github.com>
2025-01-23 13:36:03 +00:00
Matt Jankowski
51ecc7326f
Fix intermittent services/ap/process_status_update tags failure (#33695) 2025-01-23 13:35:19 +00:00
Eugen Rochko
0885c31633
Add information about alt text to alt text modal in web UI (#33702) 2025-01-23 13:01:11 +00:00
Claire
db146046c4
Convert LanguageDropdown to a functional component (#33701) 2025-01-23 12:54:23 +00:00
Claire
3178acc5cb
Fix language detection taking mentions and URLs into account (#33700) 2025-01-23 10:25:14 +00:00
Matt Jankowski
8eee7ae4c3
Fix issue with saving empty fields values on filter keyword updates (#33691) 2025-01-23 09:04:12 +00:00
Matt Jankowski
4a9c49ee43
Fix issue with saving empty fields values on profile update (#33689) 2025-01-22 18:50:15 +00:00
Claire
a6fc776c6f
Change mastodon:setup to prevent overwriting already-configured servers (#33684) 2025-01-22 15:34:22 +00:00
Claire
8dcfd3f246
Fix WebUI crash when language detection code returns undefined (#33683) 2025-01-22 15:30:59 +00:00
Matt Jankowski
607f65a0a5
Use expect for api/v1 and api/web push subs controllers (#33682) 2025-01-22 14:55:44 +00:00
Jonathan de Jong
b18caff5b6
Change first_of_value to first_of_hash, and add more test cases (#33647) 2025-01-22 14:02:05 +00:00
Matt Jankowski
e155aab39e
Use expect for nested params in settings/* controllers (#33673) 2025-01-22 08:49:52 +00:00
Eugen Rochko
8b24085f8e
Refactor <DomainPill> into TypeScript (#33680) 2025-01-22 08:39:13 +00:00
github-actions[bot]
38c27a7708
New Crowdin Translations (automated) (#33679)
Co-authored-by: GitHub Actions <noreply@github.com>
2025-01-22 08:35:41 +00:00
Matt Jankowski
d2cc28813f
Use expect for nested params in more controllers (#33675) 2025-01-22 08:35:34 +00:00
renovate[bot]
2a6a418f48
Update dependency irb to v1.15.1 (#33674)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-22 08:34:58 +00:00
Jonathan de Jong
e380e803a8
Order emoji categories (in admin interface) by name (#33630) 2025-01-22 08:31:51 +00:00
Claire
3dcf5e12b1
Change notifications from moderators to not be filtered (#33654) 2025-01-21 11:39:53 +00:00
Eugen Rochko
11786f1114
Change design of edit media modal in web UI (#33516) 2025-01-21 11:34:22 +00:00
Claire
4ebdfed8ea
Fix opening modals losing some location parameters (#33670) 2025-01-21 09:53:52 +00:00
github-actions[bot]
9e90248abc
New Crowdin Translations (automated) (#33668)
Co-authored-by: GitHub Actions <noreply@github.com>
2025-01-21 08:37:53 +00:00
Matt Jankowski
45149cd5e1
Use expect for nested params in auth/setup#update (#33657) 2025-01-21 08:16:40 +00:00
Matt Jankowski
7543c90642
Use bundler version 2.6.3 (#33658) 2025-01-21 08:00:35 +00:00
renovate[bot]
004e120e02
Update dependency selenium-webdriver to v4.28.0 (#33667)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-21 07:59:52 +00:00
renovate[bot]
7f866daf63
Update formatjs monorepo (#33652)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-20 10:36:25 +00:00
renovate[bot]
2deab346b3
Update dependency nokogiri to v1.18.2 (#33651)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-20 10:36:21 +00:00
renovate[bot]
a0c76f6017
Update dependency i18n to v1.14.7 (#33650)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-20 10:36:19 +00:00
Claire
ac59ed39dd
Fix re-encoding of high-framerate VFR videos with FFmpeg 6+ (#33634) 2025-01-20 09:22:49 +00:00
Eugen Rochko
8962f11578
Add warning when selected and detected language is different in web UI (#33042) 2025-01-20 09:17:13 +00:00
github-actions[bot]
329a9e1ac1
New Crowdin Translations (automated) (#33643)
Co-authored-by: GitHub Actions <noreply@github.com>
2025-01-20 08:59:23 +00:00
Nicholas La Roux
4bd969e4bb
Fix broken CONTRIBUTING link in DEVELOPMENT (#33637) 2025-01-17 15:53:32 +00:00
Matt Jankowski
bc63f2b908
Update CONTRIBUTING doc with various clarifications (#33517) 2025-01-17 15:38:06 +00:00
Claire
ab4874ff13
Further harden the warnings against changing encryption secrets (#33631) 2025-01-17 10:42:52 +00:00
Claire
b37e48d5c8
Revert "Update dependency aws-sdk-s3 to v1.178.0 (#33611)" (#33628) 2025-01-17 10:33:03 +00:00
Matt Jankowski
5be938e661
Migrate visibility interaction checks on statuses to request spec (#33622) 2025-01-17 10:06:52 +00:00
github-actions[bot]
1c23ebd62f
New Crowdin Translations (automated) (#33626)
Co-authored-by: GitHub Actions <noreply@github.com>
2025-01-17 10:05:41 +00:00
renovate[bot]
531ca4b968
Update dependency tzinfo-data to v1.2025.1 (#33625)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-17 09:35:34 +00:00
Claire
092e60eb7d
Change activity distribution error handling to skip retrying for deleted accounts (#33617) 2025-01-17 09:12:59 +00:00
renovate[bot]
febdfefafe
Update formatjs monorepo (#33627)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-17 08:57:11 +00:00
Christian Schmidt
a3baae0b99
API for updating attribution domains (#32730) 2025-01-17 08:18:55 +00:00
Matt Jankowski
3af6739f21
Add coverage for AnnualReport.prepare method (#33618) 2025-01-16 15:45:48 +00:00
Matt Jankowski
a19141441d
Move clear environment portion of mastodon:setup to private method (#33616) 2025-01-16 15:45:02 +00:00
renovate[bot]
29b355b699
Update dependency concurrent-ruby to v1.3.5 (#33610)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-16 15:24:31 +00:00
renovate[bot]
9e2f930eed
Update dependency aws-sdk-s3 to v1.178.0 (#33611)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-16 15:23:37 +00:00
renovate[bot]
da208771b9
Update opentelemetry-ruby (non-major) (#33613)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-16 15:23:32 +00:00
Matt Jankowski
69b8a0b9bf
Collect errors in setup rake task (#33603) 2025-01-16 14:58:59 +00:00
Claire
0aa9bb8130
Bump version to v4.4.0-alpha.2 (#33615) 2025-01-16 11:02:54 +00:00
Claire
da4e55eb17
Merge commit from fork 2025-01-16 11:10:08 +01:00
github-actions[bot]
4a44c47982
New Crowdin Translations (automated) (#33609)
Co-authored-by: GitHub Actions <noreply@github.com>
2025-01-16 09:13:39 +00:00
Matt Jankowski
3db8498903
Fix Style/MutableConstant cop (#33602) 2025-01-16 09:09:06 +00:00
Matt Jankowski
998cf0dd53
Convert auth/setup spec controller->system/request (#33604) 2025-01-16 09:03:46 +00:00
Matt Jankowski
72abf05269
Add "needs refresh" scenario to api/v1/polls request spec (#33608) 2025-01-16 09:00:04 +00:00
Matt Jankowski
c20824fa76
Promote Style/WordArray rule out of todo into main config (#33580) 2025-01-15 14:29:14 +00:00
renovate[bot]
ea01ecd441
Update dependency opentelemetry-instrumentation-rails to v0.34.1 (#33595)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-15 12:49:12 +00:00
renovate[bot]
2a0951e987
Update dependency stackprof to v0.2.27 (#33596)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-15 12:48:52 +00:00
fusagiko / takayamaki
1ae574e32a
Enable parallel execution for linting tasks in HAML workflows (#33593) 2025-01-15 07:48:26 +00:00
Matt Jankowski
9f03e5b53a
Expand coverage of admin/*blocks areas (#33594) 2025-01-15 07:47:34 +00:00
Matt Jankowski
68c9f91ccb
Treat non-null but blank account domain as local (#33576) 2025-01-14 17:40:55 +00:00
Michael Stanclift
e1d7efadc0
Fix libyaml missing from Dockerfile build stage (#33591) 2025-01-14 16:35:58 +00:00
renovate[bot]
bfe73e153d
Update dependency postcss to v8.5.1 (#33586)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-14 16:34:26 +00:00
Matt Jankowski
50013b10a5
Add Status::Visibility concern to hold visibility logic (#33578) 2025-01-14 14:32:57 +00:00
Matt Jankowski
7c56517c7c
Move mastodon version config to config_for yml (#33577) 2025-01-14 14:32:29 +00:00
renovate[bot]
87849d739e
Update dependency rspec-github to v3 (#33589)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-14 14:17:11 +00:00
renovate[bot]
6356870dae
Update dependency sass to v1.83.4 (#33585)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-14 14:14:03 +00:00
renovate[bot]
7b608b41f2
Update dependency @babel/plugin-transform-nullish-coalescing-operator to v7.26.6 (#33584)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-14 14:13:58 +00:00
Claire
e9462960a7
Redirect new users to onboarding (#33471) 2025-01-14 13:10:48 +00:00
Claire
e2f085e2b2
Use final specification for new WebPush subscriptions in web interface (#33587) 2025-01-14 10:42:06 +00:00
Matt Jankowski
a9a8b6b701
Expand coverage of admin/trends/* areas (#33581) 2025-01-14 10:27:21 +00:00
S1m
4a2813158d
Add support for standard webpush (#33528)
Co-authored-by: Claire <claire.github-309c@sitedethib.com>
2025-01-14 09:14:00 +00:00
github-actions[bot]
ee4edbb94f
New Crowdin Translations (automated) (#33582)
Co-authored-by: GitHub Actions <noreply@github.com>
2025-01-14 08:44:58 +00:00
Jeong Arm
74da9e9281
Fix custom css cache miss (#33583) 2025-01-14 08:24:00 +00:00
Wolfgang
77a44e61a8
Add enum validation to DomainBlock#severity (#29158) 2025-01-13 16:05:24 +00:00
Matt Jankowski
f9451c5614
Fix issue with trending order when user has chosen languages (#33557) 2025-01-13 14:27:30 +00:00
Daniel M Brasil
0db7558822
Fix HTTP 500 on POST /api/v1/admin/ip_blocks (#29308) 2025-01-13 13:50:58 +00:00
Jonathan de Jong
3a762cddf6
Reject announce payload if object is nil (#33570) 2025-01-13 13:35:16 +00:00
Matt Jankowski
3c4a83fc62
Remove unused LanguagePresenter#native_name (#33551) 2025-01-13 12:58:53 +00:00
Claire
68d818121d
Switch webpush dependency to latest version of Mastodon-maintained fork (#33572) 2025-01-13 12:46:32 +00:00
Claire
50449ae7ac
Fix media preview height in compose form when 3 or more images are attached (#33571) 2025-01-13 11:48:47 +00:00
Claire
d517fa5ab7
Change ActivityPub path generation to all happen in ActivityPub::TagManager (#33527) 2025-01-13 09:39:05 +00:00
github-actions[bot]
53885b0fdb
New Crowdin Translations (automated) (#33559)
Co-authored-by: GitHub Actions <noreply@github.com>
2025-01-13 09:13:47 +00:00
renovate[bot]
99637f2deb
Update dependency ox to v2.14.20 (#33567)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-13 08:53:56 +00:00
renovate[bot]
44d9dc4bb0
Update dependency pino-http to v10.4.0 (#33560)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-13 08:51:46 +00:00
renovate[bot]
f3f6b65db4
Update dependency @babel/plugin-transform-nullish-coalescing-operator to v7.26.5 (#33553)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-13 08:47:43 +00:00
Matt Jankowski
22c1b6f3ee
Fix Invite#code changing value on every save (#33550) 2025-01-10 20:34:18 +00:00
Matt Jankowski
34cd7d6585
Use config_for for Mastodon::Version metadata/prerelease values (#33548) 2025-01-10 15:52:43 +00:00
Matt Jankowski
2cfc2a777a
Add build_object method for defaults in AP::Activity::Create spec (#33537) 2025-01-10 11:59:19 +00:00
Matt Jankowski
4f6edc7596
Use in_order_of in trends/* classes (#33531) 2025-01-10 09:33:07 +00:00
renovate[bot]
e0f6292492
Update dependency uuid to v11.0.5 (#33538)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-10 09:12:45 +00:00
Matt Jankowski
a8b0152bc5
Convert admin/terms_of_service/histories spec controller->system (#33534) 2025-01-10 09:11:57 +00:00
renovate[bot]
1d680f1941
Update dependency rubocop to v1.70.0 (#33543)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-10 09:11:17 +00:00
renovate[bot]
d155763014
Update dependency react-textarea-autosize to v8.5.7 (#33542)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-10 09:10:58 +00:00
Matt Jankowski
8d4ca95163
Convert admin/follow_recommendations spec controller->system (#33533) 2025-01-10 09:10:21 +00:00
Matt Jankowski
2499cd01db
Add duplicate_record helper to maintenance CLI spec (#33536) 2025-01-10 09:04:23 +00:00
Matt Jankowski
4fb3dc0363
Extract CSS_COLORS constant for UserRole regex validation (#33532) 2025-01-10 09:02:48 +00:00
github-actions[bot]
846c89b66e
New Crowdin Translations (automated) (#33541)
Co-authored-by: GitHub Actions <noreply@github.com>
2025-01-10 09:00:41 +00:00
Matt Jankowski
f98972e4eb
Use with_options for Account if: :local? validation group (#33529) 2025-01-10 09:00:31 +00:00
673 changed files with 11052 additions and 7090 deletions

View file

@ -10,6 +10,7 @@ services:
RAILS_ENV: development
NODE_ENV: development
BIND: 0.0.0.0
BOOTSNAP_CACHE_DIR: /tmp
REDIS_HOST: redis
REDIS_PORT: '6379'
DB_HOST: db

View file

@ -50,7 +50,7 @@ OTP_SECRET=
# Must be available (and set to same values) for all server processes
# These are private/secret values, do not share outside hosting environment
# Use `bin/rails db:encryption:init` to generate fresh secrets
# Do not change these secrets once in use, as this would cause data loss and other issues
# Do NOT change these secrets once in use, as this would cause data loss and other issues
# ------------------
# ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY=
# ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT=

View file

@ -1,14 +1,9 @@
on:
workflow_call:
inputs:
platforms:
required: true
type: string
cache:
type: boolean
default: true
use_native_arm64_builder:
type: boolean
push_to_images:
type: string
version_prerelease:
@ -24,42 +19,36 @@ on:
file_to_build:
type: string
# This builds multiple images with one runner each, allowing us to build for multiple architectures
# using Github's runners.
# The two-step process is adapted form:
# https://docs.docker.com/build/ci/github-actions/multi-platform/#distribute-build-across-multiple-runners
jobs:
# Build each (amd64 and arm64) image separately
build-image:
runs-on: ubuntu-latest
runs-on: ${{ startsWith(matrix.platform, 'linux/arm') && 'ubuntu-24.04-arm' || 'ubuntu-24.04' }}
strategy:
fail-fast: false
matrix:
platform:
- linux/amd64
- linux/arm64
steps:
- uses: actions/checkout@v4
- uses: docker/setup-qemu-action@v3
if: contains(inputs.platforms, 'linux/arm64') && !inputs.use_native_arm64_builder
- name: Prepare
env:
PUSH_TO_IMAGES: ${{ inputs.push_to_images }}
run: |
platform=${{ matrix.platform }}
echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV
# Transform multi-line variable into comma-separated variable
image_names=${PUSH_TO_IMAGES//$'\n'/,}
echo "IMAGE_NAMES=${image_names%,}" >> $GITHUB_ENV
- uses: docker/setup-buildx-action@v3
id: buildx
if: ${{ !(inputs.use_native_arm64_builder && contains(inputs.platforms, 'linux/arm64')) }}
- name: Start a local Docker Builder
if: inputs.use_native_arm64_builder && contains(inputs.platforms, 'linux/arm64')
run: |
docker run --rm -d --name buildkitd -p 1234:1234 --privileged moby/buildkit:latest --addr tcp://0.0.0.0:1234
- uses: docker/setup-buildx-action@v3
id: buildx-native
if: inputs.use_native_arm64_builder && contains(inputs.platforms, 'linux/arm64')
with:
driver: remote
endpoint: tcp://localhost:1234
platforms: linux/amd64
append: |
- endpoint: tcp://${{ vars.DOCKER_BUILDER_HETZNER_ARM64_01_HOST }}:13865
platforms: linux/arm64
name: mastodon-docker-builder-arm64-01
driver-opts:
- servername=mastodon-docker-builder-arm64-01
env:
BUILDER_NODE_1_AUTH_TLS_CACERT: ${{ secrets.DOCKER_BUILDER_HETZNER_ARM64_01_CACERT }}
BUILDER_NODE_1_AUTH_TLS_CERT: ${{ secrets.DOCKER_BUILDER_HETZNER_ARM64_01_CERT }}
BUILDER_NODE_1_AUTH_TLS_KEY: ${{ secrets.DOCKER_BUILDER_HETZNER_ARM64_01_KEY }}
- name: Log in to Docker Hub
if: contains(inputs.push_to_images, 'tootsuite')
@ -76,16 +65,18 @@ jobs:
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- uses: docker/metadata-action@v5
- name: Docker meta
id: meta
uses: docker/metadata-action@v5
if: ${{ inputs.push_to_images != '' }}
with:
images: ${{ inputs.push_to_images }}
flavor: ${{ inputs.flavor }}
tags: ${{ inputs.tags }}
labels: ${{ inputs.labels }}
- uses: docker/build-push-action@v6
- name: Build and push by digest
id: build
uses: docker/build-push-action@v6
with:
context: .
file: ${{ inputs.file_to_build }}
@ -93,11 +84,87 @@ jobs:
MASTODON_VERSION_PRERELEASE=${{ inputs.version_prerelease }}
MASTODON_VERSION_METADATA=${{ inputs.version_metadata }}
SOURCE_COMMIT=${{ github.sha }}
platforms: ${{ inputs.platforms }}
platforms: ${{ matrix.platform }}
provenance: false
builder: ${{ steps.buildx.outputs.name || steps.buildx-native.outputs.name }}
push: ${{ inputs.push_to_images != '' }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: ${{ inputs.cache && 'type=gha' || '' }}
cache-to: ${{ inputs.cache && 'type=gha,mode=max' || '' }}
outputs: type=image,"name=${{ env.IMAGE_NAMES }}",push-by-digest=true,name-canonical=true,push=${{ inputs.push_to_images != '' }}
- name: Export digest
if: ${{ inputs.push_to_images != '' }}
run: |
mkdir -p "${{ runner.temp }}/digests"
digest="${{ steps.build.outputs.digest }}"
touch "${{ runner.temp }}/digests/${digest#sha256:}"
- name: Upload digest
if: ${{ inputs.push_to_images != '' }}
uses: actions/upload-artifact@v4
with:
# `hashFiles` is used to disambiguate between streaming and non-streaming images
name: digests-${{ hashFiles(inputs.file_to_build) }}-${{ env.PLATFORM_PAIR }}
path: ${{ runner.temp }}/digests/*
if-no-files-found: error
retention-days: 1
# Then merge the docker images into a single one
merge-images:
if: ${{ inputs.push_to_images != '' }}
runs-on: ubuntu-24.04
needs:
- build-image
env:
PUSH_TO_IMAGES: ${{ inputs.push_to_images }}
steps:
- uses: actions/checkout@v4
- name: Download digests
uses: actions/download-artifact@v4
with:
path: ${{ runner.temp }}/digests
# `hashFiles` is used to disambiguate between streaming and non-streaming images
pattern: digests-${{ hashFiles(inputs.file_to_build) }}-*
merge-multiple: true
- name: Log in to Docker Hub
if: contains(inputs.push_to_images, 'tootsuite')
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Log in to the GitHub Container registry
if: contains(inputs.push_to_images, 'ghcr.io')
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Docker meta
id: meta
uses: docker/metadata-action@v5
if: ${{ inputs.push_to_images != '' }}
with:
images: ${{ inputs.push_to_images }}
flavor: ${{ inputs.flavor }}
tags: ${{ inputs.tags }}
labels: ${{ inputs.labels }}
- name: Create manifest list and push
working-directory: ${{ runner.temp }}/digests
run: |
echo "$PUSH_TO_IMAGES" | xargs -I{} \
docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \
$(printf '{}@sha256:%s ' *)
- name: Inspect image
run: |
echo "$PUSH_TO_IMAGES" | xargs -i{} \
docker buildx imagetools inspect {}:${{ steps.meta.outputs.version }}

View file

@ -26,8 +26,6 @@ jobs:
uses: ./.github/workflows/build-container-image.yml
with:
file_to_build: Dockerfile
platforms: linux/amd64,linux/arm64
use_native_arm64_builder: true
cache: false
push_to_images: |
tootsuite/mastodon
@ -48,8 +46,6 @@ jobs:
uses: ./.github/workflows/build-container-image.yml
with:
file_to_build: streaming/Dockerfile
platforms: linux/amd64,linux/arm64
use_native_arm64_builder: true
cache: false
push_to_images: |
tootsuite/mastodon-streaming

View file

@ -32,8 +32,6 @@ jobs:
uses: ./.github/workflows/build-container-image.yml
with:
file_to_build: Dockerfile
platforms: linux/amd64,linux/arm64
use_native_arm64_builder: true
push_to_images: |
ghcr.io/mastodon/mastodon
version_metadata: ${{ needs.compute-suffix.outputs.metadata }}
@ -49,8 +47,6 @@ jobs:
uses: ./.github/workflows/build-container-image.yml
with:
file_to_build: streaming/Dockerfile
platforms: linux/amd64,linux/arm64
use_native_arm64_builder: true
push_to_images: |
ghcr.io/mastodon/mastodon-streaming
version_metadata: ${{ needs.compute-suffix.outputs.metadata }}

View file

@ -13,8 +13,6 @@ jobs:
uses: ./.github/workflows/build-container-image.yml
with:
file_to_build: Dockerfile
platforms: linux/amd64,linux/arm64
use_native_arm64_builder: true
push_to_images: |
tootsuite/mastodon
ghcr.io/mastodon/mastodon
@ -34,8 +32,6 @@ jobs:
uses: ./.github/workflows/build-container-image.yml
with:
file_to_build: streaming/Dockerfile
platforms: linux/amd64,linux/arm64
use_native_arm64_builder: true
push_to_images: |
tootsuite/mastodon-streaming
ghcr.io/mastodon/mastodon-streaming

View file

@ -24,8 +24,6 @@ jobs:
uses: ./.github/workflows/build-container-image.yml
with:
file_to_build: Dockerfile
platforms: linux/amd64,linux/arm64
use_native_arm64_builder: true
cache: false
push_to_images: |
tootsuite/mastodon
@ -46,8 +44,6 @@ jobs:
uses: ./.github/workflows/build-container-image.yml
with:
file_to_build: streaming/Dockerfile
platforms: linux/amd64,linux/arm64
use_native_arm64_builder: true
cache: false
push_to_images: |
tootsuite/mastodon-streaming

View file

@ -43,4 +43,4 @@ jobs:
- name: Run haml-lint
run: |
echo "::add-matcher::.github/workflows/haml-lint-problem-matcher.json"
bin/haml-lint --reporter github
bin/haml-lint --parallel --reporter github

View file

@ -20,7 +20,6 @@ jobs:
uses: ./.github/workflows/build-container-image.yml
with:
file_to_build: Dockerfile
platforms: linux/amd64 # Testing only on native platform so it is performant
cache: true
build-image-streaming:
@ -31,5 +30,4 @@ jobs:
uses: ./.github/workflows/build-container-image.yml
with:
file_to_build: streaming/Dockerfile
platforms: linux/amd64 # Testing only on native platform so it is performant
cache: true

View file

@ -64,7 +64,6 @@ jobs:
DB_HOST: localhost
DB_USER: postgres
DB_PASS: postgres
DISABLE_SIMPLECOV: true
RAILS_ENV: test
BUNDLE_CLEAN: true
BUNDLE_FROZEN: true

View file

@ -107,7 +107,7 @@ jobs:
DB_HOST: localhost
DB_USER: postgres
DB_PASS: postgres
DISABLE_SIMPLECOV: ${{ matrix.ruby-version != '.ruby-version' }}
COVERAGE: ${{ matrix.ruby-version == '.ruby-version' }}
RAILS_ENV: test
ALLOW_NOPAM: true
PAM_ENABLED: true
@ -208,7 +208,7 @@ jobs:
DB_HOST: localhost
DB_USER: postgres
DB_PASS: postgres
DISABLE_SIMPLECOV: ${{ matrix.ruby-version != '.ruby-version' }}
COVERAGE: ${{ matrix.ruby-version == '.ruby-version' }}
RAILS_ENV: test
ALLOW_NOPAM: true
PAM_ENABLED: true
@ -295,7 +295,6 @@ jobs:
DB_HOST: localhost
DB_USER: postgres
DB_PASS: postgres
DISABLE_SIMPLECOV: true
RAILS_ENV: test
BUNDLE_WITH: test
LOCAL_DOMAIN: localhost:3000
@ -411,7 +410,6 @@ jobs:
DB_HOST: localhost
DB_USER: postgres
DB_PASS: postgres
DISABLE_SIMPLECOV: true
RAILS_ENV: test
BUNDLE_WITH: test
ES_ENABLED: true

2
.nvmrc
View file

@ -1 +1 @@
22.13
22.14

View file

@ -26,9 +26,11 @@ inherit_mode:
merge:
- Exclude
require:
plugins:
- rubocop-rails
- rubocop-rspec
- rubocop-rspec_rails
- rubocop-performance
require:
- rubocop-rspec_rails
- rubocop-capybara

View file

@ -2,6 +2,9 @@
Rails/BulkChangeTable:
Enabled: false # Conflicts with strong_migrations features
Rails/Delegate:
Enabled: false
Rails/FilePath:
EnforcedStyle: arguments

View file

@ -58,3 +58,6 @@ Style/TrailingCommaInArrayLiteral:
Style/TrailingCommaInHashLiteral:
EnforcedStyleForMultiline: comma
Style/WordArray:
MinSize: 3 # Override default of 2

View file

@ -1,6 +1,6 @@
# This configuration was generated by
# `rubocop --auto-gen-config --auto-gen-only-exclude --no-offense-counts --no-auto-gen-timestamp`
# using RuboCop version 1.69.2.
# using RuboCop version 1.72.2.
# The point is for the user to remove these configuration records
# one by one as the offenses are removed from the code base.
# Note that changes in the inspected code, or installation of new
@ -69,15 +69,6 @@ Style/MapToHash:
Exclude:
- 'app/models/status.rb'
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: EnforcedStyle.
# SupportedStyles: literals, strict
Style/MutableConstant:
Exclude:
- 'app/models/tag.rb'
- 'app/services/delete_account_service.rb'
- 'lib/mastodon/migration_warning.rb'
# Configuration parameters: AllowedMethods.
# AllowedMethods: respond_to_missing?
Style/OptionalBooleanParameter:
@ -103,10 +94,3 @@ Style/RedundantConstantBase:
Exclude:
- 'config/environments/production.rb'
- 'config/initializers/sidekiq.rb'
# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: WordRegex.
# SupportedStyles: percent, brackets
Style/WordArray:
EnforcedStyle: percent
MinSize: 3

View file

@ -1 +1 @@
3.4.1
3.4.2

View file

@ -2,6 +2,24 @@
All notable changes to this project will be documented in this file.
## [4.3.3] - 2025-01-16
### Security
- Fix insufficient validation of account URIs ([GHSA-5wxh-3p65-r4g6](https://github.com/mastodon/mastodon/security/advisories/GHSA-5wxh-3p65-r4g6))
- Update dependencies
### Fixed
- Fix `libyaml` missing from `Dockerfile` build stage (#33591 by @vmstan)
- Fix incorrect notification settings migration for non-followers (#33348 by @ClearlyClaire)
- Fix down clause for notification policy v2 migrations (#33340 by @jesseplusplus)
- Fix error decrementing status count when `FeaturedTags#last_status_at` is `nil` (#33320 by @ClearlyClaire)
- Fix last paginated notification group only including data on a single notification (#33271 by @ClearlyClaire)
- Fix processing of mentions for post edits with an existing corresponding silent mention (#33227 by @ClearlyClaire)
- Fix deletion of unconfirmed users with Webauthn set (#33186 by @ClearlyClaire)
- Fix empty authors preview card serialization (#33151, #33466 by @mjankowski and @ClearlyClaire)
## [4.3.2] - 2024-12-03
### Added

View file

@ -9,30 +9,51 @@ You can contribute in the following ways:
- Contributing code to Mastodon by fixing bugs or implementing features
- Improving the documentation
If your contributions are accepted into Mastodon, you can request to be paid through [our OpenCollective](https://opencollective.com/mastodon).
Please review the org-level [contribution guidelines] for high-level acceptance
criteria guidance and the [DEVELOPMENT] guide for environment-specific details.
[contribution guidelines]: https://github.com/mastodon/.github/blob/main/CONTRIBUTING.md
## API Changes and Additions
Please note that any changes or additions made to the API should have an accompanying pull request on [our documentation repository](https://github.com/mastodon/documentation).
Any changes or additions made to the API should have an accompanying pull
request on our [documentation repository].
## Bug reports
## Bug Reports
Bug reports and feature suggestions must use descriptive and concise titles and be submitted to [GitHub Issues](https://github.com/mastodon/mastodon/issues). Please use the search function to make sure that you are not submitting duplicates, and that a similar report or request has not already been resolved or rejected.
Bug reports and feature suggestions must use descriptive and concise titles and
be submitted to [GitHub Issues]. Please use the search function to make sure
there are not duplicate bug reports or feature requests.
## Translations
You can submit translations via [Crowdin](https://crowdin.com/project/mastodon). They are periodically merged into the codebase.
Translations are community contributed via [Crowdin]. They are periodically
reviewed and merged into the codebase.
[![Crowdin](https://d322cqt584bo4o.cloudfront.net/mastodon/localized.svg)](https://crowdin.com/project/mastodon)
## Pull requests
## Pull Requests
**Please use clean, concise titles for your pull requests.** Unless the pull request is about refactoring code, updating dependencies or other internal tasks, assume that the person reading the pull request title is not a programmer or Mastodon developer, but instead a Mastodon user or server administrator, and **try to describe your change or fix from their perspective**. We use commit squashing, so the final commit in the main branch will carry the title of the pull request, and commits from the main branch are fed into the changelog. The changelog is separated into [keepachangelog.com categories](https://keepachangelog.com/en/1.0.0/), and while that spec does not prescribe how the entries ought to be named, for easier sorting, start your pull request titles using one of the verbs "Add", "Change", "Deprecate", "Remove", or "Fix" (present tense).
### Size and Scope
Our time is limited and PRs making large, unsolicited changes are unlikely to
get a response. Changes which link to an existing confirmed issue, or which come
from a "help wanted" issue or other request are more likely to be reviewed.
The smaller and more narrowly focused the changes in a PR are, the easier they
are to review and potentially merge. If the change only makes sense in some
larger context of future ongoing work, note that in the description, but still
aim to keep each distinct PR to a "smallest viable change" chunk of work.
### Description of Changes
Unless the Pull Request is about refactoring code, updating dependencies or
other internal tasks, assume that the audience are not developers, but a
Mastodon user or server admin, and try to describe it from their perspective.
The final commit in the main branch will carry the title from the PR. The main
branch is then fed into the changelog and ultimately into release notes. We try
to follow the [keepachangelog] spec, and while that does not prescribe how
exactly the entries ought to be named, starting titles using one of the verbs
"Add", "Change", "Deprecate", "Remove", or "Fix" (present tense) is helpful.
Example:
@ -40,18 +61,25 @@ Example:
| ------------------------------------ | ------------------------------------------------------------- |
| Fixed NoMethodError in RemovalWorker | Fix nil error when removing statuses caused by race condition |
It is not always possible to phrase every change in such a manner, but it is desired.
### Technical Requirements
**The smaller the set of changes in the pull request is, the quicker it can be reviewed and merged.** Splitting tasks into multiple smaller pull requests is often preferable.
**Pull requests that do not pass automated checks may not be reviewed**. In particular, you need to keep in mind:
Pull requests that do not pass automated checks on CI may not be reviewed. In
particular, please keep in mind:
- Unit and integration tests (rspec, jest)
- Code style rules (rubocop, eslint)
- Normalization of locale files (i18n-tasks)
- Relevant accessibility or performance concerns
## Documentation
The [Mastodon documentation](https://docs.joinmastodon.org) is a statically generated site. You can [submit merge requests to mastodon/documentation](https://github.com/mastodon/documentation).
The [Mastodon documentation] is a statically generated site that contains guides
and API docs. Improvements are made via PRs to the [documentation repository].
[contribution guidelines]: https://github.com/mastodon/.github/blob/main/CONTRIBUTING.md
[Crowdin]: https://crowdin.com/project/mastodon
[DEVELOPMENT]: docs/DEVELOPMENT.md
[documentation repository]: https://github.com/mastodon/documentation
[GitHub Issues]: https://github.com/mastodon/mastodon/issues
[keepachangelog]: https://keepachangelog.com/en/1.0.0/
[Mastodon documentation]: https://docs.joinmastodon.org

View file

@ -1,7 +1,7 @@
# syntax=docker/dockerfile:1.12
# This file is designed for production server deployment, not local development work
# For a containerized local dev environment, see: https://github.com/mastodon/mastodon/blob/main/README.md#docker
# For a containerized local dev environment, see: https://github.com/mastodon/mastodon/blob/main/docs/DEVELOPMENT.md#docker
# Please see https://docs.docker.com/engine/reference/builder for information about
# the extended buildx capabilities used in this file.
@ -9,19 +9,20 @@
# See: https://docs.docker.com/build/building/multi-platform/
ARG TARGETPLATFORM=${TARGETPLATFORM}
ARG BUILDPLATFORM=${BUILDPLATFORM}
ARG BASE_REGISTRY="docker.io"
# Ruby image to use for base image, change with [--build-arg RUBY_VERSION="3.4.x"]
# renovate: datasource=docker depName=docker.io/ruby
ARG RUBY_VERSION="3.4.1"
ARG RUBY_VERSION="3.4.2"
# # Node version to use in base image, change with [--build-arg NODE_MAJOR_VERSION="20"]
# renovate: datasource=node-version depName=node
ARG NODE_MAJOR_VERSION="22"
# Debian image to use for base image, change with [--build-arg DEBIAN_VERSION="bookworm"]
ARG DEBIAN_VERSION="bookworm"
# Node image to use for base image based on combined variables (ex: 20-bookworm-slim)
FROM docker.io/node:${NODE_MAJOR_VERSION}-${DEBIAN_VERSION}-slim AS node
FROM ${BASE_REGISTRY}/node:${NODE_MAJOR_VERSION}-${DEBIAN_VERSION}-slim AS node
# Ruby image to use for base image based on combined variables (ex: 3.4.x-slim-bookworm)
FROM docker.io/ruby:${RUBY_VERSION}-slim-${DEBIAN_VERSION} AS ruby
FROM ${BASE_REGISTRY}/ruby:${RUBY_VERSION}-slim-${DEBIAN_VERSION} AS ruby
# Resulting version string is vX.X.X-MASTODON_VERSION_PRERELEASE+MASTODON_VERSION_METADATA
# Example: v4.3.0-nightly.2023.11.09+pr-123456
@ -153,6 +154,7 @@ RUN \
libpq-dev \
libssl-dev \
libtool \
libyaml-dev \
meson \
nasm \
pkg-config \

43
Gemfile
View file

@ -94,29 +94,31 @@ gem 'twitter-text', '~> 3.1.0'
gem 'tzinfo-data', '~> 1.2023'
gem 'webauthn', '~> 3.0'
gem 'webpacker', '~> 5.4'
gem 'webpush', github: 'ClearlyClaire/webpush', ref: 'f14a4d52e201128b1b00245d11b6de80d6cfdcd9'
gem 'webpush', github: 'mastodon/webpush', ref: '9631ac63045cfabddacc69fc06e919b4c13eb913'
gem 'json-ld'
gem 'json-ld-preloaded', '~> 3.2'
gem 'rdf-normalize', '~> 0.5'
gem 'prometheus_exporter', '~> 2.2', require: false
gem 'opentelemetry-api', '~> 1.4.0'
group :opentelemetry do
gem 'opentelemetry-exporter-otlp', '~> 0.29.0', require: false
gem 'opentelemetry-instrumentation-active_job', '~> 0.7.1', require: false
gem 'opentelemetry-instrumentation-active_model_serializers', '~> 0.21.0', require: false
gem 'opentelemetry-instrumentation-concurrent_ruby', '~> 0.21.2', require: false
gem 'opentelemetry-instrumentation-excon', '~> 0.22.0', require: false
gem 'opentelemetry-instrumentation-faraday', '~> 0.25.0', require: false
gem 'opentelemetry-instrumentation-http', '~> 0.23.2', require: false
gem 'opentelemetry-instrumentation-http_client', '~> 0.22.3', require: false
gem 'opentelemetry-instrumentation-net_http', '~> 0.22.4', require: false
gem 'opentelemetry-instrumentation-pg', '~> 0.29.0', require: false
gem 'opentelemetry-instrumentation-rack', '~> 0.25.0', require: false
gem 'opentelemetry-instrumentation-rails', '~> 0.34.0', require: false
gem 'opentelemetry-instrumentation-redis', '~> 0.25.3', require: false
gem 'opentelemetry-instrumentation-sidekiq', '~> 0.25.2', require: false
gem 'opentelemetry-instrumentation-active_job', '~> 0.8.0', require: false
gem 'opentelemetry-instrumentation-active_model_serializers', '~> 0.22.0', require: false
gem 'opentelemetry-instrumentation-concurrent_ruby', '~> 0.22.0', require: false
gem 'opentelemetry-instrumentation-excon', '~> 0.23.0', require: false
gem 'opentelemetry-instrumentation-faraday', '~> 0.26.0', require: false
gem 'opentelemetry-instrumentation-http', '~> 0.24.0', require: false
gem 'opentelemetry-instrumentation-http_client', '~> 0.23.0', require: false
gem 'opentelemetry-instrumentation-net_http', '~> 0.23.0', require: false
gem 'opentelemetry-instrumentation-pg', '~> 0.30.0', require: false
gem 'opentelemetry-instrumentation-rack', '~> 0.26.0', require: false
gem 'opentelemetry-instrumentation-rails', '~> 0.36.0', require: false
gem 'opentelemetry-instrumentation-redis', '~> 0.26.0', require: false
gem 'opentelemetry-instrumentation-sidekiq', '~> 0.26.0', require: false
gem 'opentelemetry-sdk', '~> 1.4', require: false
end
@ -125,7 +127,7 @@ group :test do
gem 'flatware-rspec'
# Adds RSpec Error/Warning annotations to GitHub PRs on the Files tab
gem 'rspec-github', '~> 2.4', require: false
gem 'rspec-github', '~> 3.0', require: false
# RSpec helpers for email specs
gem 'email_spec'
@ -143,9 +145,6 @@ group :test do
# Used to mock environment variables
gem 'climate_control'
# Add back helpers functions removed in Rails 5.1
gem 'rails-controller-testing', '~> 1.0'
# Validate schemas in specs
gem 'json-schema', '~> 5.0'
@ -154,7 +153,7 @@ group :test do
gem 'shoulda-matchers'
# Coverage formatter for RSpec test if DISABLE_SIMPLECOV is false
# Coverage formatter for RSpec
gem 'simplecov', '~> 0.22', require: false
gem 'simplecov-lcov', '~> 0.8', require: false
@ -172,7 +171,7 @@ group :development do
gem 'rubocop-rspec_rails', require: false
# Annotates modules with schema
gem 'annotaterb', '~> 4.13'
gem 'annotaterb', '~> 4.13', require: false
# Enhanced error message pages for development
gem 'better_errors', '~> 2.9'
@ -195,7 +194,7 @@ end
group :development, :test do
# Interactive Debugging tools
gem 'debug', '~> 1.8'
gem 'debug', '~> 1.8', require: false
# Generate fake data values
gem 'faker', '~> 3.2'
@ -207,7 +206,7 @@ group :development, :test do
gem 'memory_profiler', require: false
gem 'ruby-prof', require: false
gem 'stackprof', require: false
gem 'test-prof'
gem 'test-prof', require: false
# RSpec runner for rails
gem 'rspec-rails', '~> 7.0'

View file

@ -1,9 +1,9 @@
GIT
remote: https://github.com/ClearlyClaire/webpush.git
revision: f14a4d52e201128b1b00245d11b6de80d6cfdcd9
ref: f14a4d52e201128b1b00245d11b6de80d6cfdcd9
remote: https://github.com/mastodon/webpush.git
revision: 9631ac63045cfabddacc69fc06e919b4c13eb913
ref: 9631ac63045cfabddacc69fc06e919b4c13eb913
specs:
webpush (0.3.8)
webpush (1.1.0)
hkdf (~> 0.2)
jwt (~> 2.0)
@ -90,7 +90,7 @@ GEM
public_suffix (>= 2.0.2, < 7.0)
aes_key_wrap (1.1.0)
android_key_attestation (0.3.0)
annotaterb (4.13.0)
annotaterb (4.14.0)
ast (2.4.2)
attr_required (1.0.2)
aws-eventstream (1.3.0)
@ -159,7 +159,7 @@ GEM
climate_control (1.2.0)
cocoon (1.2.15)
color_diff (0.1)
concurrent-ruby (1.3.4)
concurrent-ruby (1.3.5)
connection_pool (2.5.0)
cose (1.3.1)
cbor (~> 0.5.9)
@ -194,7 +194,7 @@ GEM
devise_pam_authenticatable2 (9.2.0)
devise (>= 4.0.0)
rpam2 (~> 4.0)
diff-lcs (1.5.1)
diff-lcs (1.6.0)
discard (1.4.0)
activerecord (>= 4.2, < 9.0)
docile (1.4.1)
@ -220,7 +220,7 @@ GEM
erubi (1.13.1)
et-orbi (1.2.11)
tzinfo
excon (0.112.0)
excon (1.2.3)
fabrication (2.31.0)
faker (3.5.1)
i18n (>= 1.8.11, < 2)
@ -244,15 +244,15 @@ GEM
flatware-rspec (2.3.4)
flatware (= 2.3.4)
rspec (>= 3.6)
fog-core (2.5.0)
fog-core (2.6.0)
builder
excon (~> 0.71)
excon (~> 1.0)
formatador (>= 0.2, < 2.0)
mime-types
fog-json (1.2.0)
fog-core
multi_json (~> 1.10)
fog-openstack (1.1.3)
fog-openstack (1.1.4)
fog-core (~> 2.1)
fog-json (>= 1.0)
formatador (1.1.0)
@ -273,7 +273,7 @@ GEM
activesupport (>= 5.1)
haml (>= 4.0.6)
railties (>= 5.1)
haml_lint (0.59.0)
haml_lint (0.60.0)
haml (>= 5.0)
parallel (~> 1.10)
rainbow
@ -283,7 +283,7 @@ GEM
hashie (5.0.0)
hcaptcha (7.1.0)
json
highline (3.1.1)
highline (3.1.2)
reline
hiredis (0.6.3)
hkdf (0.3.0)
@ -302,7 +302,7 @@ GEM
httplog (1.7.0)
rack (>= 2.0)
rainbow (>= 2.0.0)
i18n (1.14.6)
i18n (1.14.7)
concurrent-ruby (~> 1.0)
i18n-tasks (1.0.14)
activesupport (>= 4.0.2)
@ -319,7 +319,8 @@ GEM
activesupport (>= 3.0)
nokogiri (>= 1.6)
io-console (0.8.0)
irb (1.14.3)
irb (1.15.1)
pp (>= 0.6.0)
rdoc (>= 4.0.0)
reline (>= 0.4.2)
jd-paperclip-azure (3.0.0)
@ -327,7 +328,7 @@ GEM
azure-blob (~> 0.5.2)
hashie (~> 5.0)
jmespath (1.6.2)
json (2.9.1)
json (2.10.1)
json-canonicalization (1.0.0)
json-jwt (1.15.3.1)
activesupport (>= 4.2)
@ -349,7 +350,7 @@ GEM
addressable (~> 2.8)
bigdecimal (~> 3.1)
jsonapi-renderer (0.2.2)
jwt (2.9.3)
jwt (2.10.1)
base64
kaminari (1.2.2)
activesupport (>= 4.1.0)
@ -369,10 +370,11 @@ GEM
marcel (~> 1.0.1)
mime-types
terrapin (>= 0.6.0, < 2.0)
language_server-protocol (3.17.0.3)
launchy (3.0.1)
language_server-protocol (3.17.0.4)
launchy (3.1.0)
addressable (~> 2.8)
childprocess (~> 5.0)
logger (~> 1.6)
letter_opener (1.10.0)
launchy (>= 2.2, < 4)
letter_opener_web (3.0.0)
@ -381,10 +383,11 @@ GEM
railties (>= 6.1)
rexml
link_header (0.0.8)
lint_roller (1.1.0)
llhttp-ffi (0.5.0)
ffi-compiler (~> 1.0)
rake (~> 13.0)
logger (1.6.4)
logger (1.6.6)
lograge (0.14.0)
actionpack (>= 4)
activesupport (>= 4)
@ -406,16 +409,16 @@ GEM
mime-types (3.6.0)
logger
mime-types-data (~> 3.2015)
mime-types-data (3.2024.1203)
mime-types-data (3.2025.0220)
mini_mime (1.1.5)
mini_portile2 (2.8.8)
minitest (5.25.4)
msgpack (1.7.5)
msgpack (1.8.0)
multi_json (1.15.0)
mutex_m (0.3.0)
net-http (0.6.0)
uri
net-imap (0.5.4)
net-imap (0.5.6)
date
net-protocol
net-ldap (0.19.0)
@ -423,10 +426,10 @@ GEM
net-protocol
net-protocol (0.2.2)
timeout
net-smtp (0.5.0)
net-smtp (0.5.1)
net-protocol
nio4r (2.7.4)
nokogiri (1.18.1)
nokogiri (1.18.3)
mini_portile2 (~> 2.8.2)
racc (~> 1.4)
oj (3.16.9)
@ -460,7 +463,7 @@ GEM
validate_email
validate_url
webfinger (~> 1.2)
openssl (3.2.1)
openssl (3.3.0)
openssl-signature_algorithm (1.3.0)
openssl (> 2.0)
opentelemetry-api (1.4.0)
@ -473,80 +476,86 @@ GEM
opentelemetry-common (~> 0.20)
opentelemetry-sdk (~> 1.2)
opentelemetry-semantic_conventions
opentelemetry-helpers-sql-obfuscation (0.2.1)
opentelemetry-helpers-sql-obfuscation (0.3.0)
opentelemetry-common (~> 0.21)
opentelemetry-instrumentation-action_mailer (0.3.0)
opentelemetry-instrumentation-action_mailer (0.4.0)
opentelemetry-api (~> 1.0)
opentelemetry-instrumentation-active_support (~> 0.7)
opentelemetry-instrumentation-base (~> 0.22.1)
opentelemetry-instrumentation-action_pack (0.10.0)
opentelemetry-instrumentation-base (~> 0.23.0)
opentelemetry-instrumentation-action_pack (0.12.0)
opentelemetry-api (~> 1.0)
opentelemetry-instrumentation-base (~> 0.22.1)
opentelemetry-instrumentation-base (~> 0.23.0)
opentelemetry-instrumentation-rack (~> 0.21)
opentelemetry-instrumentation-action_view (0.8.0)
opentelemetry-instrumentation-action_view (0.9.0)
opentelemetry-api (~> 1.0)
opentelemetry-instrumentation-active_support (~> 0.7)
opentelemetry-instrumentation-base (~> 0.22.1)
opentelemetry-instrumentation-active_job (0.7.8)
opentelemetry-instrumentation-base (~> 0.23.0)
opentelemetry-instrumentation-active_job (0.8.0)
opentelemetry-api (~> 1.0)
opentelemetry-instrumentation-base (~> 0.22.1)
opentelemetry-instrumentation-active_model_serializers (0.21.1)
opentelemetry-instrumentation-base (~> 0.23.0)
opentelemetry-instrumentation-active_model_serializers (0.22.0)
opentelemetry-api (~> 1.0)
opentelemetry-instrumentation-active_support (>= 0.7.0)
opentelemetry-instrumentation-base (~> 0.22.1)
opentelemetry-instrumentation-active_record (0.8.1)
opentelemetry-instrumentation-base (~> 0.23.0)
opentelemetry-instrumentation-active_record (0.9.0)
opentelemetry-api (~> 1.0)
opentelemetry-instrumentation-base (~> 0.22.1)
opentelemetry-instrumentation-active_support (0.7.0)
opentelemetry-instrumentation-base (~> 0.23.0)
opentelemetry-instrumentation-active_storage (0.1.0)
opentelemetry-api (~> 1.4.0)
opentelemetry-instrumentation-active_support (~> 0.7)
opentelemetry-instrumentation-base (~> 0.23.0)
opentelemetry-instrumentation-active_support (0.8.0)
opentelemetry-api (~> 1.0)
opentelemetry-instrumentation-base (~> 0.22.1)
opentelemetry-instrumentation-base (0.22.6)
opentelemetry-instrumentation-base (~> 0.23.0)
opentelemetry-instrumentation-base (0.23.0)
opentelemetry-api (~> 1.0)
opentelemetry-common (~> 0.21)
opentelemetry-registry (~> 0.1)
opentelemetry-instrumentation-concurrent_ruby (0.21.4)
opentelemetry-instrumentation-concurrent_ruby (0.22.0)
opentelemetry-api (~> 1.0)
opentelemetry-instrumentation-base (~> 0.22.1)
opentelemetry-instrumentation-excon (0.22.5)
opentelemetry-instrumentation-base (~> 0.23.0)
opentelemetry-instrumentation-excon (0.23.0)
opentelemetry-api (~> 1.0)
opentelemetry-instrumentation-base (~> 0.22.1)
opentelemetry-instrumentation-faraday (0.25.0)
opentelemetry-instrumentation-base (~> 0.23.0)
opentelemetry-instrumentation-faraday (0.26.0)
opentelemetry-api (~> 1.0)
opentelemetry-instrumentation-base (~> 0.22.1)
opentelemetry-instrumentation-http (0.23.5)
opentelemetry-instrumentation-base (~> 0.23.0)
opentelemetry-instrumentation-http (0.24.0)
opentelemetry-api (~> 1.0)
opentelemetry-instrumentation-base (~> 0.22.1)
opentelemetry-instrumentation-http_client (0.22.8)
opentelemetry-instrumentation-base (~> 0.23.0)
opentelemetry-instrumentation-http_client (0.23.0)
opentelemetry-api (~> 1.0)
opentelemetry-instrumentation-base (~> 0.22.1)
opentelemetry-instrumentation-net_http (0.22.8)
opentelemetry-instrumentation-base (~> 0.23.0)
opentelemetry-instrumentation-net_http (0.23.0)
opentelemetry-api (~> 1.0)
opentelemetry-instrumentation-base (~> 0.22.1)
opentelemetry-instrumentation-pg (0.29.2)
opentelemetry-instrumentation-base (~> 0.23.0)
opentelemetry-instrumentation-pg (0.30.0)
opentelemetry-api (~> 1.0)
opentelemetry-helpers-sql-obfuscation
opentelemetry-instrumentation-base (~> 0.22.1)
opentelemetry-instrumentation-rack (0.25.0)
opentelemetry-instrumentation-base (~> 0.23.0)
opentelemetry-instrumentation-rack (0.26.0)
opentelemetry-api (~> 1.0)
opentelemetry-instrumentation-base (~> 0.22.1)
opentelemetry-instrumentation-rails (0.34.0)
opentelemetry-instrumentation-base (~> 0.23.0)
opentelemetry-instrumentation-rails (0.36.0)
opentelemetry-api (~> 1.0)
opentelemetry-instrumentation-action_mailer (~> 0.3.0)
opentelemetry-instrumentation-action_pack (~> 0.10.0)
opentelemetry-instrumentation-action_view (~> 0.8.0)
opentelemetry-instrumentation-active_job (~> 0.7.0)
opentelemetry-instrumentation-active_record (~> 0.8.0)
opentelemetry-instrumentation-active_support (~> 0.7.0)
opentelemetry-instrumentation-base (~> 0.22.1)
opentelemetry-instrumentation-redis (0.25.7)
opentelemetry-instrumentation-action_mailer (~> 0.4.0)
opentelemetry-instrumentation-action_pack (~> 0.12.0)
opentelemetry-instrumentation-action_view (~> 0.9.0)
opentelemetry-instrumentation-active_job (~> 0.8.0)
opentelemetry-instrumentation-active_record (~> 0.9.0)
opentelemetry-instrumentation-active_storage (~> 0.1.0)
opentelemetry-instrumentation-active_support (~> 0.8.0)
opentelemetry-instrumentation-base (~> 0.23.0)
opentelemetry-instrumentation-concurrent_ruby (~> 0.22.0)
opentelemetry-instrumentation-redis (0.26.1)
opentelemetry-api (~> 1.0)
opentelemetry-instrumentation-base (~> 0.22.1)
opentelemetry-instrumentation-sidekiq (0.25.7)
opentelemetry-instrumentation-base (~> 0.23.0)
opentelemetry-instrumentation-sidekiq (0.26.0)
opentelemetry-api (~> 1.0)
opentelemetry-instrumentation-base (~> 0.22.1)
opentelemetry-instrumentation-base (~> 0.23.0)
opentelemetry-registry (0.3.1)
opentelemetry-api (~> 1.1)
opentelemetry-sdk (1.6.0)
opentelemetry-sdk (1.7.0)
opentelemetry-api (~> 1.1)
opentelemetry-common (~> 0.20)
opentelemetry-registry (~> 0.2)
@ -555,10 +564,10 @@ GEM
opentelemetry-api (~> 1.0)
orm_adapter (0.5.0)
ostruct (0.6.1)
ox (2.14.19)
ox (2.14.22)
bigdecimal (>= 3.0)
parallel (1.26.3)
parser (3.3.6.0)
parser (3.3.7.1)
ast (~> 2.4.1)
racc
parslet (2.0.0)
@ -567,6 +576,8 @@ GEM
pg (1.5.9)
pghero (3.6.1)
activerecord (>= 6.1)
pp (0.6.2)
prettyprint
premailer (1.27.0)
addressable
css_parser (>= 1.19.0)
@ -575,22 +586,25 @@ GEM
actionmailer (>= 3)
net-smtp
premailer (~> 1.7, >= 1.7.9)
prettyprint (0.2.0)
prometheus_exporter (2.2.0)
webrick
propshaft (1.1.0)
actionpack (>= 7.0.0)
activesupport (>= 7.0.0)
rack
railties (>= 7.0.0)
psych (5.2.2)
psych (5.2.3)
date
stringio
public_suffix (6.0.1)
puma (6.5.0)
puma (6.6.0)
nio4r (~> 2.0)
pundit (2.4.0)
activesupport (>= 3.0.0)
raabro (1.4.0)
racc (1.8.1)
rack (2.2.10)
rack (2.2.11)
rack-attack (6.7.0)
rack (>= 1.0, < 4)
rack-cors (2.0.2)
@ -627,10 +641,6 @@ GEM
activesupport (= 8.0.1)
bundler (>= 1.15.0)
railties (= 8.0.1)
rails-controller-testing (1.0.5)
actionpack (>= 5.0.1.rc1)
actionview (>= 5.0.1.rc1)
activesupport (>= 5.0.1.rc1)
rails-dom-testing (2.2.0)
activesupport (>= 5.0.0)
minitest
@ -657,7 +667,7 @@ GEM
link_header (~> 0.0, >= 0.0.8)
rdf-normalize (0.7.0)
rdf (~> 3.3)
rdoc (6.10.0)
rdoc (6.12.0)
psych (>= 4.0.0)
redcarpet (3.6.0)
redis (4.8.1)
@ -673,7 +683,7 @@ GEM
responders (3.1.1)
actionpack (>= 5.2)
railties (>= 5.2)
rexml (3.4.0)
rexml (3.4.1)
rotp (6.3.0)
rouge (4.5.1)
rpam2 (4.0.2)
@ -685,17 +695,17 @@ GEM
rspec-core (~> 3.13.0)
rspec-expectations (~> 3.13.0)
rspec-mocks (~> 3.13.0)
rspec-core (3.13.2)
rspec-core (3.13.3)
rspec-support (~> 3.13.0)
rspec-expectations (3.13.3)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.13.0)
rspec-github (2.4.0)
rspec-github (3.0.0)
rspec-core (~> 3.0)
rspec-mocks (3.13.2)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.13.0)
rspec-rails (7.1.0)
rspec-rails (7.1.1)
actionpack (>= 7.0)
activesupport (>= 7.0)
railties (>= 7.0)
@ -709,30 +719,34 @@ GEM
rspec-mocks (~> 3.0)
sidekiq (>= 5, < 8)
rspec-support (3.13.2)
rubocop (1.69.2)
rubocop (1.72.2)
json (~> 2.3)
language_server-protocol (>= 3.17.0)
language_server-protocol (~> 3.17.0.2)
lint_roller (~> 1.1.0)
parallel (~> 1.10)
parser (>= 3.3.0.2)
rainbow (>= 2.2.2, < 4.0)
regexp_parser (>= 2.9.3, < 3.0)
rubocop-ast (>= 1.36.2, < 2.0)
rubocop-ast (>= 1.38.0, < 2.0)
ruby-progressbar (~> 1.7)
unicode-display_width (>= 2.4.0, < 4.0)
rubocop-ast (1.37.0)
rubocop-ast (1.38.0)
parser (>= 3.3.1.0)
rubocop-capybara (2.21.0)
rubocop (~> 1.41)
rubocop-performance (1.23.1)
rubocop (>= 1.48.1, < 2.0)
rubocop-ast (>= 1.31.1, < 2.0)
rubocop-rails (2.28.0)
rubocop-performance (1.24.0)
lint_roller (~> 1.1)
rubocop (>= 1.72.1, < 2.0)
rubocop-ast (>= 1.38.0, < 2.0)
rubocop-rails (2.30.1)
activesupport (>= 4.2.0)
lint_roller (~> 1.1)
rack (>= 1.1)
rubocop (>= 1.52.0, < 2.0)
rubocop-ast (>= 1.31.1, < 2.0)
rubocop-rspec (3.3.0)
rubocop (~> 1.61)
rubocop (>= 1.72.1, < 2.0)
rubocop-ast (>= 1.38.0, < 2.0)
rubocop-rspec (3.5.0)
lint_roller (~> 1.1)
rubocop (~> 1.72, >= 1.72.1)
rubocop-rspec_rails (2.30.0)
rubocop (~> 1.61)
rubocop-rspec (~> 3, >= 3.0.1)
@ -741,7 +755,7 @@ GEM
ruby-saml (1.17.0)
nokogiri (>= 1.13.10)
rexml
ruby-vips (2.2.2)
ruby-vips (2.2.3)
ffi (~> 1.12)
logger
rubyzip (2.4.1)
@ -756,7 +770,7 @@ GEM
activerecord (>= 4.0.0)
railties (>= 4.0.0)
securerandom (0.4.1)
selenium-webdriver (4.27.0)
selenium-webdriver (4.29.1)
base64 (~> 0.2)
logger (~> 1.4)
rexml (~> 3.2, >= 3.2.5)
@ -793,27 +807,27 @@ GEM
simplecov-html (0.13.1)
simplecov-lcov (0.8.0)
simplecov_json_formatter (0.1.4)
stackprof (0.2.26)
stoplight (4.1.0)
stackprof (0.2.27)
stoplight (4.1.1)
redlock (~> 1.0)
stringio (3.1.2)
strong_migrations (2.1.0)
activerecord (>= 6.1)
stringio (3.1.4)
strong_migrations (2.2.0)
activerecord (>= 7)
swd (1.3.0)
activesupport (>= 3)
attr_required (>= 0.0.5)
httpclient (>= 2.4)
sysexits (1.2.0)
temple (0.10.3)
terminal-table (3.0.2)
unicode-display_width (>= 1.1.1, < 3)
terminal-table (4.0.0)
unicode-display_width (>= 1.1.1, < 4)
terrapin (1.0.1)
climate_control
test-prof (1.4.4)
thor (1.3.2)
tilt (2.5.0)
tilt (2.6.0)
timeout (0.4.3)
tpm-key_attestation (0.12.1)
tpm-key_attestation (0.14.0)
bindata (~> 2.4)
openssl (> 2.0)
openssl-signature_algorithm (~> 1.0)
@ -832,12 +846,14 @@ GEM
unf (~> 0.1.0)
tzinfo (2.0.6)
concurrent-ruby (~> 1.0)
tzinfo-data (1.2024.2)
tzinfo-data (1.2025.1)
tzinfo (>= 1.0.0)
unf (0.1.4)
unf_ext
unf_ext (0.0.9.1)
unicode-display_width (2.6.0)
unicode-display_width (3.1.4)
unicode-emoji (~> 4.0, >= 4.0.4)
unicode-emoji (4.0.4)
uri (1.0.2)
useragent (0.16.11)
validate_email (0.1.6)
@ -848,18 +864,18 @@ GEM
public_suffix
warden (1.2.9)
rack (>= 2.0.9)
webauthn (3.2.2)
webauthn (3.4.0)
android_key_attestation (~> 0.3.0)
bindata (~> 2.4)
cbor (~> 0.5.9)
cose (~> 1.1)
openssl (>= 2.2)
safety_net_attestation (~> 0.4.0)
tpm-key_attestation (~> 0.12.0)
tpm-key_attestation (~> 0.14.0)
webfinger (1.2.0)
activesupport
httpclient (>= 2.4)
webmock (3.24.0)
webmock (3.25.0)
addressable (>= 2.8.0)
crack (>= 0.3.2)
hashdiff (>= 0.4.0, < 2.0.0)
@ -870,14 +886,15 @@ GEM
semantic_range (>= 2.3.0)
webrick (1.9.1)
websocket (1.2.11)
websocket-driver (0.7.6)
websocket-driver (0.7.7)
base64
websocket-extensions (>= 0.1.0)
websocket-extensions (0.1.5)
wisper (2.0.1)
xorcist (1.1.3)
xpath (3.2.0)
nokogiri (~> 1.8)
zeitwerk (2.7.1)
zeitwerk (2.7.2)
PLATFORMS
ruby
@ -959,25 +976,26 @@ DEPENDENCIES
omniauth_openid_connect (~> 0.6.1)
opentelemetry-api (~> 1.4.0)
opentelemetry-exporter-otlp (~> 0.29.0)
opentelemetry-instrumentation-active_job (~> 0.7.1)
opentelemetry-instrumentation-active_model_serializers (~> 0.21.0)
opentelemetry-instrumentation-concurrent_ruby (~> 0.21.2)
opentelemetry-instrumentation-excon (~> 0.22.0)
opentelemetry-instrumentation-faraday (~> 0.25.0)
opentelemetry-instrumentation-http (~> 0.23.2)
opentelemetry-instrumentation-http_client (~> 0.22.3)
opentelemetry-instrumentation-net_http (~> 0.22.4)
opentelemetry-instrumentation-pg (~> 0.29.0)
opentelemetry-instrumentation-rack (~> 0.25.0)
opentelemetry-instrumentation-rails (~> 0.34.0)
opentelemetry-instrumentation-redis (~> 0.25.3)
opentelemetry-instrumentation-sidekiq (~> 0.25.2)
opentelemetry-instrumentation-active_job (~> 0.8.0)
opentelemetry-instrumentation-active_model_serializers (~> 0.22.0)
opentelemetry-instrumentation-concurrent_ruby (~> 0.22.0)
opentelemetry-instrumentation-excon (~> 0.23.0)
opentelemetry-instrumentation-faraday (~> 0.26.0)
opentelemetry-instrumentation-http (~> 0.24.0)
opentelemetry-instrumentation-http_client (~> 0.23.0)
opentelemetry-instrumentation-net_http (~> 0.23.0)
opentelemetry-instrumentation-pg (~> 0.30.0)
opentelemetry-instrumentation-rack (~> 0.26.0)
opentelemetry-instrumentation-rails (~> 0.36.0)
opentelemetry-instrumentation-redis (~> 0.26.0)
opentelemetry-instrumentation-sidekiq (~> 0.26.0)
opentelemetry-sdk (~> 1.4)
ox (~> 2.14)
parslet
pg (~> 1.5)
pghero
premailer-rails
prometheus_exporter (~> 2.2)
propshaft
public_suffix (~> 6.0)
puma (~> 6.3)
@ -987,14 +1005,13 @@ DEPENDENCIES
rack-cors (~> 2.0)
rack-test (~> 2.1)
rails (~> 8.0)
rails-controller-testing (~> 1.0)
rails-i18n (~> 8.0)
rdf-normalize (~> 0.5)
redcarpet (~> 3.6)
redis (~> 4.5)
redis-namespace (~> 1.10)
rqrcode (~> 2.2)
rspec-github (~> 2.4)
rspec-github (~> 3.0)
rspec-rails (~> 7.0)
rspec-sidekiq (~> 5.0)
rubocop
@ -1037,4 +1054,4 @@ RUBY VERSION
ruby 3.4.1p0
BUNDLED WITH
2.6.2
2.6.5

View file

@ -49,7 +49,7 @@ class ActivityPub::CollectionsController < ActivityPub::BaseController
def collection_presenter
ActivityPub::CollectionPresenter.new(
id: account_collection_url(@account, params[:id]),
id: ActivityPub::TagManager.instance.collection_uri_for(@account, params[:id]),
type: @type,
size: @size,
items: @items

View file

@ -41,12 +41,8 @@ class ActivityPub::OutboxesController < ActivityPub::BaseController
end
end
def outbox_url(**)
if params[:account_username].present?
account_outbox_url(@account, **)
else
instance_actor_outbox_url(**)
end
def outbox_url(...)
ActivityPub::TagManager.instance.outbox_uri_for(@account, ...)
end
def next_page

View file

@ -34,7 +34,8 @@ module Admin
end
def resource_params
params.require(:admin_account_action).permit(:type, :report_id, :warning_preset_id, :text, :send_email_notification, :include_statuses)
params
.expect(admin_account_action: [:type, :report_id, :warning_preset_id, :text, :send_email_notification, :include_statuses])
end
end
end

View file

@ -29,10 +29,8 @@ module Admin
private
def resource_params
params.require(:account_moderation_note).permit(
:content,
:target_account_id
)
params
.expect(account_moderation_note: [:content, :target_account_id])
end
def set_account_moderation_note

View file

@ -158,7 +158,8 @@ module Admin
end
def form_account_batch_params
params.require(:form_account_batch).permit(:action, account_ids: [])
params
.expect(form_account_batch: [:action, account_ids: []])
end
def action_from_button

View file

@ -84,6 +84,7 @@ class Admin::AnnouncementsController < Admin::BaseController
end
def resource_params
params.require(:announcement).permit(:text, :scheduled_at, :starts_at, :ends_at, :all_day)
params
.expect(announcement: [:text, :scheduled_at, :starts_at, :ends_at, :all_day])
end
end

View file

@ -7,17 +7,12 @@ module Admin
layout 'admin'
before_action :set_cache_headers
before_action :set_referrer_policy_header
after_action :verify_authorized
private
def set_cache_headers
response.cache_control.replace(private: true, no_store: true)
end
def set_referrer_policy_header
response.headers['Referrer-Policy'] = 'same-origin'
end

View file

@ -41,9 +41,8 @@ module Admin
end
def resource_params
params.require(:user).permit(
:unconfirmed_email
)
params
.expect(user: [:unconfirmed_email])
end
end
end

View file

@ -44,7 +44,8 @@ module Admin
private
def resource_params
params.require(:custom_emoji).permit(:shortcode, :image, :visible_in_picker)
params
.expect(custom_emoji: [:shortcode, :image, :visible_in_picker])
end
def filtered_custom_emojis
@ -74,7 +75,8 @@ module Admin
end
def form_custom_emoji_batch_params
params.require(:form_custom_emoji_batch).permit(:action, :category_id, :category_name, custom_emoji_ids: [])
params
.expect(form_custom_emoji_batch: [:action, :category_id, :category_name, custom_emoji_ids: []])
end
end
end

View file

@ -37,6 +37,7 @@ class Admin::DomainAllowsController < Admin::BaseController
end
def resource_params
params.require(:domain_allow).permit(:domain)
params
.expect(domain_allow: [:domain])
end
end

View file

@ -25,7 +25,9 @@ module Admin
rescue Mastodon::NotPermittedError
flash[:alert] = I18n.t('admin.domain_blocks.not_permitted')
else
redirect_to admin_instances_path(limited: '1'), notice: I18n.t('admin.domain_blocks.created_msg')
flash[:notice] = I18n.t('admin.domain_blocks.created_msg')
ensure
redirect_to admin_instances_path(limited: '1')
end
def new
@ -114,7 +116,12 @@ module Admin
end
def form_domain_block_batch_params
params.require(:form_domain_block_batch).permit(domain_blocks_attributes: [:enabled, :domain, :severity, :reject_media, :reject_reports, :private_comment, :public_comment, :obfuscate])
params
.expect(
form_domain_block_batch: [
domain_blocks_attributes: [[:enabled, :domain, :severity, :reject_media, :reject_reports, :private_comment, :public_comment, :obfuscate]],
]
)
end
def action_from_button

View file

@ -62,11 +62,13 @@ module Admin
end
def resource_params
params.require(:email_domain_block).permit(:domain, :allow_with_approval, other_domains: [])
params
.expect(email_domain_block: [:domain, :allow_with_approval, other_domains: []])
end
def form_email_domain_block_batch_params
params.require(:form_email_domain_block_batch).permit(email_domain_block_ids: [])
params
.expect(form_email_domain_block_batch: [email_domain_block_ids: []])
end
def action_from_button

View file

@ -37,7 +37,8 @@ module Admin
end
def form_account_batch_params
params.require(:form_account_batch).permit(:action, account_ids: [])
params
.expect(form_account_batch: [:action, account_ids: []])
end
def filter_params

View file

@ -39,7 +39,8 @@ module Admin
private
def resource_params
params.require(:invite).permit(:max_uses, :expires_in)
params
.expect(invite: [:max_uses, :expires_in])
end
def filtered_invites

View file

@ -44,7 +44,8 @@ module Admin
private
def resource_params
params.require(:ip_block).permit(:ip, :severity, :comment, :expires_in)
params
.expect(ip_block: [:ip, :severity, :comment, :expires_in])
end
def action_from_button
@ -52,7 +53,8 @@ module Admin
end
def form_ip_block_batch_params
params.require(:form_ip_block_batch).permit(ip_block_ids: [])
params
.expect(form_ip_block_batch: [ip_block_ids: []])
end
end
end

View file

@ -57,7 +57,8 @@ module Admin
end
def resource_params
params.require(:relay).permit(:inbox_url)
params
.expect(relay: [:inbox_url])
end
def warn_signatures_not_enabled!

View file

@ -47,10 +47,8 @@ module Admin
end
def resource_params
params.require(:report_note).permit(
:content,
:report_id
)
params
.expect(report_note: [:content, :report_id])
end
def set_report_note

View file

@ -61,7 +61,8 @@ module Admin
end
def resource_params
params.require(:user_role).permit(:name, :color, :highlighted, :position, permissions_as_keys: [])
params
.expect(user_role: [:name, :color, :highlighted, :position, permissions_as_keys: []])
end
end
end

View file

@ -53,7 +53,8 @@ module Admin
end
def resource_params
params.require(:rule).permit(:text, :hint, :priority)
params
.expect(rule: [:text, :hint, :priority])
end
end
end

View file

@ -28,7 +28,8 @@ module Admin
end
def settings_params
params.require(:form_admin_settings).permit(*Form::AdminSettings::KEYS)
params
.expect(form_admin_settings: [*Form::AdminSettings::KEYS])
end
end
end

View file

@ -6,7 +6,7 @@ module Admin
def index
authorize :software_update, :index?
@software_updates = SoftwareUpdate.by_version
@software_updates = SoftwareUpdate.by_version.filter(&:pending?)
end
private

View file

@ -39,7 +39,8 @@ module Admin
helper_method :batched_ordered_status_edits
def admin_status_batch_action_params
params.require(:admin_status_batch_action).permit(status_ids: [])
params
.expect(admin_status_batch_action: [status_ids: []])
end
def after_create_redirect_path

View file

@ -37,7 +37,8 @@ module Admin
end
def tag_params
params.require(:tag).permit(:name, :display_name, :trendable, :usable, :listable)
params
.expect(tag: [:name, :display_name, :trendable, :usable, :listable])
end
def filtered_tags

View file

@ -31,6 +31,7 @@ class Admin::TermsOfService::DraftsController < Admin::BaseController
end
def resource_params
params.require(:terms_of_service).permit(:text, :changelog)
params
.expect(terms_of_service: [:text, :changelog])
end
end

View file

@ -32,6 +32,7 @@ class Admin::TermsOfService::GeneratesController < Admin::BaseController
end
def resource_params
params.require(:terms_of_service_generator).permit(*TermsOfService::Generator::VARIABLES)
params
.expect(terms_of_service_generator: [*TermsOfService::Generator::VARIABLES])
end
end

View file

@ -31,7 +31,8 @@ class Admin::Trends::Links::PreviewCardProvidersController < Admin::BaseControll
end
def trends_preview_card_provider_batch_params
params.require(:trends_preview_card_provider_batch).permit(:action, preview_card_provider_ids: [])
params
.expect(trends_preview_card_provider_batch: [:action, preview_card_provider_ids: []])
end
def action_from_button

View file

@ -31,7 +31,8 @@ class Admin::Trends::LinksController < Admin::BaseController
end
def trends_preview_card_batch_params
params.require(:trends_preview_card_batch).permit(:action, preview_card_ids: [])
params
.expect(trends_preview_card_batch: [:action, preview_card_ids: []])
end
def action_from_button

View file

@ -31,7 +31,8 @@ class Admin::Trends::StatusesController < Admin::BaseController
end
def trends_status_batch_params
params.require(:trends_status_batch).permit(:action, status_ids: [])
params
.expect(trends_status_batch: [:action, status_ids: []])
end
def action_from_button

View file

@ -31,7 +31,8 @@ class Admin::Trends::TagsController < Admin::BaseController
end
def trends_tag_batch_params
params.require(:trends_tag_batch).permit(:action, tag_ids: [])
params
.expect(trends_tag_batch: [:action, tag_ids: []])
end
def action_from_button

View file

@ -28,7 +28,8 @@ module Admin
end
def resource_params
params.require(:user).permit(:role_id)
params
.expect(user: [:role_id])
end
end
end

View file

@ -52,7 +52,8 @@ module Admin
end
def warning_preset_params
params.require(:account_warning_preset).permit(:title, :text)
params
.expect(account_warning_preset: [:title, :text])
end
end
end

View file

@ -74,7 +74,8 @@ module Admin
end
def resource_params
params.require(:webhook).permit(:url, :template, events: [])
params
.expect(webhook: [:url, :template, events: []])
end
end
end

View file

@ -33,6 +33,7 @@ class Api::V1::Accounts::CredentialsController < Api::BaseController
:discoverable,
:hide_collections,
:indexable,
attribution_domains: [],
fields_attributes: [:name, :value]
)
end

View file

@ -21,6 +21,7 @@ class Api::V1::Push::SubscriptionsController < Api::BaseController
endpoint: subscription_params[:endpoint],
key_p256dh: subscription_params[:keys][:p256dh],
key_auth: subscription_params[:keys][:auth],
standard: subscription_params[:standard] || false,
data: data_params,
user_id: current_user.id,
access_token_id: doorkeeper_token.id
@ -55,12 +56,12 @@ class Api::V1::Push::SubscriptionsController < Api::BaseController
end
def subscription_params
params.require(:subscription).permit(:endpoint, keys: [:auth, :p256dh])
params.expect(subscription: [:endpoint, :standard, keys: [:auth, :p256dh]])
end
def data_params
return {} if params[:data].blank?
params.require(:data).permit(:policy, alerts: Notification::TYPES)
params.expect(data: [:policy, alerts: Notification::TYPES])
end
end

View file

@ -66,7 +66,7 @@ class Api::Web::PushSubscriptionsController < Api::Web::BaseController
end
def subscription_params
@subscription_params ||= params.require(:subscription).permit(:endpoint, keys: [:auth, :p256dh])
@subscription_params ||= params.expect(subscription: [:standard, :endpoint, keys: [:auth, :p256dh]])
end
def web_push_subscription_params
@ -76,11 +76,12 @@ class Api::Web::PushSubscriptionsController < Api::Web::BaseController
endpoint: subscription_params[:endpoint],
key_auth: subscription_params[:keys][:auth],
key_p256dh: subscription_params[:keys][:p256dh],
standard: subscription_params[:standard] || false,
user_id: active_session.user_id,
}
end
def data_params
@data_params ||= params.require(:data).permit(:policy, alerts: Notification::TYPES)
@data_params ||= params.expect(data: [:policy, alerts: Notification::TYPES])
end
end

View file

@ -12,7 +12,6 @@ class Auth::RegistrationsController < Devise::RegistrationsController
before_action :set_sessions, only: [:edit, :update]
before_action :set_strikes, only: [:edit, :update]
before_action :require_not_suspended!, only: [:update]
before_action :set_cache_headers, only: [:edit, :update]
before_action :set_rules, only: :new
before_action :require_rules_acceptance!, only: :new
before_action :set_registration_form_time, only: :new
@ -139,10 +138,6 @@ class Auth::RegistrationsController < Devise::RegistrationsController
set_locale { render :rules }
end
def set_cache_headers
response.cache_control.replace(private: true, no_store: true)
end
def is_flashing_format? # rubocop:disable Naming/PredicateName
if params[:action] == 'create'
false # Disable flash messages for sign-up

View file

@ -73,7 +73,7 @@ class Auth::SessionsController < Devise::SessionsController
end
def user_params
params.require(:user).permit(:email, :password, :otp_attempt, credential: {})
params.expect(user: [:email, :password, :otp_attempt, credential: {}])
end
def after_sign_in_path_for(resource)

View file

@ -18,7 +18,7 @@ class Auth::SetupController < ApplicationController
if @user.update(user_params)
@user.resend_confirmation_instructions unless @user.confirmed?
redirect_to auth_setup_path, notice: I18n.t('auth.setup.new_confirmation_instructions_sent')
redirect_to auth_setup_path, notice: t('auth.setup.new_confirmation_instructions_sent')
else
render :show
end
@ -35,6 +35,6 @@ class Auth::SetupController < ApplicationController
end
def user_params
params.require(:user).permit(:email)
params.expect(user: [:email])
end
end

View file

@ -24,6 +24,6 @@ module Admin::ExportControllerConcern
end
def import_params
params.require(:admin_import).permit(:data)
params.expect(admin_import: [:data])
end
end

View file

@ -58,6 +58,6 @@ module ChallengableConcern
end
def challenge_params
params.require(:form_challenge).permit(:current_password, :return_to)
params.expect(form_challenge: [:current_password, :return_to])
end
end

View file

@ -117,7 +117,7 @@ module SignatureVerification
def verify_signature_strength!
raise SignatureVerificationError, 'Mastodon requires the Date header or (created) pseudo-header to be signed' unless signed_headers.include?('date') || signed_headers.include?('(created)')
raise SignatureVerificationError, 'Mastodon requires the Digest header or (request-target) pseudo-header to be signed' unless signed_headers.include?(Request::REQUEST_TARGET) || signed_headers.include?('digest')
raise SignatureVerificationError, 'Mastodon requires the Digest header or (request-target) pseudo-header to be signed' unless signed_headers.include?(HttpSignatureDraft::REQUEST_TARGET) || signed_headers.include?('digest')
raise SignatureVerificationError, 'Mastodon requires the Host header to be signed when doing a GET request' if request.get? && !signed_headers.include?('host')
raise SignatureVerificationError, 'Mastodon requires the Digest header to be signed when doing a POST request' if request.post? && !signed_headers.include?('digest')
end
@ -155,14 +155,14 @@ module SignatureVerification
def build_signed_string(include_query_string: true)
signed_headers.map do |signed_header|
case signed_header
when Request::REQUEST_TARGET
when HttpSignatureDraft::REQUEST_TARGET
if include_query_string
"#{Request::REQUEST_TARGET}: #{request.method.downcase} #{request.original_fullpath}"
"#{HttpSignatureDraft::REQUEST_TARGET}: #{request.method.downcase} #{request.original_fullpath}"
else
# Current versions of Mastodon incorrectly omit the query string from the (request-target) pseudo-header.
# Therefore, temporarily support such incorrect signatures for compatibility.
# TODO: remove eventually some time after release of the fixed version
"#{Request::REQUEST_TARGET}: #{request.method.downcase} #{request.path}"
"#{HttpSignatureDraft::REQUEST_TARGET}: #{request.method.downcase} #{request.path}"
end
when '(created)'
raise SignatureVerificationError, 'Invalid pseudo-header (created) for rsa-sha256' unless signature_algorithm == 'hs2019'

View file

@ -46,6 +46,6 @@ module WebAppControllerConcern
protected
def set_referer_header
response.set_header('Referrer-Policy', Setting.allow_referrer_origin ? 'origin' : 'same-origin')
response.set_header('Referrer-Policy', Setting.allow_referrer_origin ? 'strict-origin-when-cross-origin' : 'same-origin')
end
end

View file

@ -21,6 +21,6 @@ class Disputes::AppealsController < Disputes::BaseController
end
def appeal_params
params.require(:appeal).permit(:text)
params.expect(appeal: [:text])
end
end

View file

@ -8,11 +8,4 @@ class Disputes::BaseController < ApplicationController
skip_before_action :require_functional!
before_action :authenticate_user!
before_action :set_cache_headers
private
def set_cache_headers
response.cache_control.replace(private: true, no_store: true)
end
end

View file

@ -6,7 +6,6 @@ class Filters::StatusesController < ApplicationController
before_action :authenticate_user!
before_action :set_filter
before_action :set_status_filters
before_action :set_cache_headers
PER_PAGE = 20
@ -34,14 +33,10 @@ class Filters::StatusesController < ApplicationController
end
def status_filter_batch_action_params
params.require(:form_status_filter_batch_action).permit(status_filter_ids: [])
params.expect(form_status_filter_batch_action: [status_filter_ids: []])
end
def action_from_button
'remove' if params[:remove]
end
def set_cache_headers
response.cache_control.replace(private: true, no_store: true)
end
end

View file

@ -5,7 +5,6 @@ class FiltersController < ApplicationController
before_action :authenticate_user!
before_action :set_filter, only: [:edit, :update, :destroy]
before_action :set_cache_headers
def index
@filters = current_account.custom_filters.includes(:keywords, :statuses).order(:phrase)
@ -48,10 +47,6 @@ class FiltersController < ApplicationController
end
def resource_params
params.require(:custom_filter).permit(:title, :expires_in, :filter_action, context: [], keywords_attributes: [:id, :keyword, :whole_word, :_destroy])
end
def set_cache_headers
response.cache_control.replace(private: true, no_store: true)
params.expect(custom_filter: [:title, :expires_in, :filter_action, context: [], keywords_attributes: [[:id, :keyword, :whole_word, :_destroy]]])
end
end

View file

@ -46,7 +46,7 @@ class FollowerAccountsController < ApplicationController
end
def page_url(page)
account_followers_url(@account, page: page) unless page.nil?
ActivityPub::TagManager.instance.followers_uri_for(@account, page: page) unless page.nil?
end
def next_page_url

View file

@ -6,7 +6,6 @@ class InvitesController < ApplicationController
layout 'admin'
before_action :authenticate_user!
before_action :set_cache_headers
def index
authorize :invite, :create?
@ -43,10 +42,6 @@ class InvitesController < ApplicationController
end
def resource_params
params.require(:invite).permit(:max_uses, :expires_in, :autofollow, :comment)
end
def set_cache_headers
response.cache_control.replace(private: true, no_store: true)
params.expect(invite: [:max_uses, :expires_in, :autofollow, :comment])
end
end

View file

@ -5,7 +5,6 @@ class Oauth::AuthorizationsController < Doorkeeper::AuthorizationsController
before_action :store_current_location
before_action :authenticate_resource_owner!
before_action :set_cache_headers
content_security_policy do |p|
p.form_action(false)
@ -32,8 +31,4 @@ class Oauth::AuthorizationsController < Doorkeeper::AuthorizationsController
def truthy_param?(key)
ActiveModel::Type::Boolean.new.cast(params[key])
end
def set_cache_headers
response.cache_control.replace(private: true, no_store: true)
end
end

View file

@ -6,7 +6,6 @@ class Oauth::AuthorizedApplicationsController < Doorkeeper::AuthorizedApplicatio
before_action :store_current_location
before_action :authenticate_resource_owner!
before_action :require_not_suspended!, only: :destroy
before_action :set_cache_headers
before_action :set_last_used_at_by_app, only: :index, unless: -> { request.format == :json }
@ -30,10 +29,6 @@ class Oauth::AuthorizedApplicationsController < Doorkeeper::AuthorizedApplicatio
forbidden if current_account.unavailable?
end
def set_cache_headers
response.cache_control.replace(private: true, no_store: true)
end
def set_last_used_at_by_app
@last_used_at_by_app = current_resource_owner.applications_last_used
end

View file

@ -6,7 +6,6 @@ class RelationshipsController < ApplicationController
before_action :authenticate_user!
before_action :set_accounts, only: :show
before_action :set_relationships, only: :show
before_action :set_cache_headers
helper_method :following_relationship?, :followed_by_relationship?, :mutual_relationship?
@ -36,7 +35,7 @@ class RelationshipsController < ApplicationController
end
def form_account_batch_params
params.require(:form_account_batch).permit(:action, account_ids: [])
params.expect(form_account_batch: [:action, account_ids: []])
end
def following_relationship?
@ -66,8 +65,4 @@ class RelationshipsController < ApplicationController
'remove_domains_from_followers'
end
end
def set_cache_headers
response.cache_control.replace(private: true, no_store: true)
end
end

View file

@ -30,7 +30,7 @@ class Settings::AliasesController < Settings::BaseController
private
def resource_params
params.require(:account_alias).permit(:acct)
params.expect(account_alias: [:acct])
end
def set_alias

View file

@ -2,7 +2,6 @@
class Settings::ApplicationsController < Settings::BaseController
before_action :set_application, only: [:show, :update, :destroy, :regenerate]
before_action :prepare_scopes, only: [:create, :update]
def index
@applications = current_user.applications.order(id: :desc).page(params[:page])
@ -60,16 +59,6 @@ class Settings::ApplicationsController < Settings::BaseController
end
def application_params
params.require(:doorkeeper_application).permit(
:name,
:redirect_uri,
:scopes,
:website
)
end
def prepare_scopes
scopes = params.fetch(:doorkeeper_application, {}).fetch(:scopes, nil)
params[:doorkeeper_application][:scopes] = scopes.join(' ') if scopes.is_a? Array
params.expect(doorkeeper_application: [:name, :redirect_uri, :website, scopes: []])
end
end

View file

@ -4,14 +4,9 @@ class Settings::BaseController < ApplicationController
layout 'admin'
before_action :authenticate_user!
before_action :set_cache_headers
private
def set_cache_headers
response.cache_control.replace(private: true, no_store: true)
end
def require_not_suspended!
forbidden if current_account.unavailable?
end

View file

@ -21,7 +21,7 @@ class Settings::DeletesController < Settings::BaseController
private
def resource_params
params.require(:form_delete_confirmation).permit(:password, :username)
params.expect(form_delete_confirmation: [:password, :username])
end
def require_not_suspended!

View file

@ -44,6 +44,6 @@ class Settings::FeaturedTagsController < Settings::BaseController
end
def featured_tag_params
params.require(:featured_tag).permit(:name)
params.expect(featured_tag: [:name])
end
end

View file

@ -90,7 +90,7 @@ class Settings::ImportsController < Settings::BaseController
private
def import_params
params.require(:form_import).permit(:data, :type, :mode)
params.expect(form_import: [:data, :type, :mode])
end
def set_bulk_import

View file

@ -33,6 +33,6 @@ class Settings::Migration::RedirectsController < Settings::BaseController
private
def resource_params
params.require(:form_redirect).permit(:acct, :current_password, :current_username)
params.expect(form_redirect: [:acct, :current_password, :current_username])
end
end

View file

@ -27,7 +27,7 @@ class Settings::MigrationsController < Settings::BaseController
private
def resource_params
params.require(:account_migration).permit(:acct, :current_password, :current_username)
params.expect(account_migration: [:acct, :current_password, :current_username])
end
def set_migrations

View file

@ -19,6 +19,6 @@ class Settings::Preferences::BaseController < Settings::BaseController
end
def user_params
params.require(:user).permit(:locale, :time_zone, chosen_languages: [], settings_attributes: UserSettings.keys)
params.expect(user: [:locale, :time_zone, chosen_languages: [], settings_attributes: UserSettings.keys])
end
end

View file

@ -18,7 +18,7 @@ class Settings::PrivacyController < Settings::BaseController
private
def account_params
params.require(:account).permit(:discoverable, :unlocked, :indexable, :show_collections, settings: UserSettings.keys)
params.expect(account: [:discoverable, :unlocked, :indexable, :show_collections, settings: UserSettings.keys])
end
def set_account

View file

@ -20,7 +20,7 @@ class Settings::ProfilesController < Settings::BaseController
private
def account_params
params.require(:account).permit(:display_name, :note, :avatar, :header, :bot, fields_attributes: [:name, :value])
params.expect(account: [:display_name, :note, :avatar, :header, :bot, fields_attributes: [[:name, :value]]])
end
def set_account

View file

@ -38,7 +38,7 @@ module Settings
private
def confirmation_params
params.require(:form_two_factor_confirmation).permit(:otp_attempt)
params.expect(form_two_factor_confirmation: [:otp_attempt])
end
def prepare_two_factor_form

View file

@ -18,7 +18,9 @@ class Settings::VerificationsController < Settings::BaseController
private
def account_params
params.require(:account).permit(:attribution_domains_as_text)
params.expect(account: [:attribution_domains]).tap do |params|
params[:attribution_domains] = params[:attribution_domains].split if params[:attribution_domains]
end
end
def set_account

View file

@ -4,7 +4,6 @@ class SeveredRelationshipsController < ApplicationController
layout 'admin'
before_action :authenticate_user!
before_action :set_cache_headers
before_action :set_event, only: [:following, :followers]
@ -49,8 +48,4 @@ class SeveredRelationshipsController < ApplicationController
def acct(account)
account.local? ? account.local_username_and_domain : account.acct
end
def set_cache_headers
response.cache_control.replace(private: true, no_store: true)
end
end

View file

@ -5,7 +5,6 @@ class StatusesCleanupController < ApplicationController
before_action :authenticate_user!
before_action :set_policy
before_action :set_cache_headers
def show; end
@ -15,8 +14,6 @@ class StatusesCleanupController < ApplicationController
else
render :show
end
rescue ActionController::ParameterMissing
# Do nothing
end
def require_functional!
@ -30,10 +27,6 @@ class StatusesCleanupController < ApplicationController
end
def resource_params
params.require(:account_statuses_cleanup_policy).permit(:enabled, :min_status_age, :keep_direct, :keep_pinned, :keep_polls, :keep_media, :keep_self_fav, :keep_self_bookmark, :min_favs, :min_reblogs)
end
def set_cache_headers
response.cache_control.replace(private: true, no_store: true)
params.expect(account_statuses_cleanup_policy: [:enabled, :min_status_age, :keep_direct, :keep_pinned, :keep_polls, :keep_media, :keep_self_fav, :keep_self_bookmark, :min_favs, :min_reblogs])
end
end

View file

@ -45,7 +45,9 @@ module ThemeHelper
end
def cached_custom_css_digest
Rails.cache.read(:setting_digest_custom_css)
Rails.cache.fetch(:setting_digest_custom_css) do
Setting.custom_css&.then { |content| Digest::SHA256.hexdigest(content) }
end
end
def theme_color_for(theme)

View file

@ -0,0 +1,55 @@
import { useRef, useCallback } from 'react';
type Position = [number, number];
export const useSelectableClick = (
onClick: React.MouseEventHandler,
maxDelta = 5,
) => {
const clickPositionRef = useRef<Position | null>(null);
const handleMouseDown = useCallback((e: React.MouseEvent) => {
clickPositionRef.current = [e.clientX, e.clientY];
}, []);
const handleMouseUp = useCallback(
(e: React.MouseEvent) => {
if (!clickPositionRef.current) {
return;
}
const [startX, startY] = clickPositionRef.current;
const [deltaX, deltaY] = [
Math.abs(e.clientX - startX),
Math.abs(e.clientY - startY),
];
let element: EventTarget | null = e.target;
while (element && element instanceof HTMLElement) {
if (
element.localName === 'button' ||
element.localName === 'a' ||
element.localName === 'label'
) {
return;
}
element = element.parentNode;
}
if (
deltaX + deltaY < maxDelta &&
(e.button === 0 || e.button === 1) &&
e.detail >= 1
) {
onClick(e);
}
clickPositionRef.current = null;
},
[maxDelta, onClick],
);
return [handleMouseDown, handleMouseUp] as const;
};

Binary file not shown.

Before

Width:  |  Height:  |  Size: 620 KiB

After

Width:  |  Height:  |  Size: 554 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1 MiB

After

Width:  |  Height:  |  Size: 858 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 MiB

After

Width:  |  Height:  |  Size: 985 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 710 KiB

After

Width:  |  Height:  |  Size: 636 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 786 KiB

After

Width:  |  Height:  |  Size: 653 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

View file

@ -414,7 +414,7 @@ export function initMediaEditModal(id) {
dispatch(openModal({
modalType: 'FOCAL_POINT',
modalProps: { id },
modalProps: { mediaId: id },
}));
};
}

View file

@ -0,0 +1,70 @@
import type { List as ImmutableList, Map as ImmutableMap } from 'immutable';
import { apiUpdateMedia } from 'mastodon/api/compose';
import type { ApiMediaAttachmentJSON } from 'mastodon/api_types/media_attachments';
import type { MediaAttachment } from 'mastodon/models/media_attachment';
import { createDataLoadingThunk } from 'mastodon/store/typed_functions';
type SimulatedMediaAttachmentJSON = ApiMediaAttachmentJSON & {
unattached?: boolean;
};
const simulateModifiedApiResponse = (
media: MediaAttachment,
params: { description?: string; focus?: string },
): SimulatedMediaAttachmentJSON => {
const [x, y] = (params.focus ?? '').split(',');
const data = {
...media.toJS(),
...params,
meta: {
focus: {
x: parseFloat(x ?? '0'),
y: parseFloat(y ?? '0'),
},
},
} as unknown as SimulatedMediaAttachmentJSON;
return data;
};
export const changeUploadCompose = createDataLoadingThunk(
'compose/changeUpload',
async (
{
id,
...params
}: {
id: string;
description: string;
focus: string;
},
{ getState },
) => {
const media = (
(getState().compose as ImmutableMap<string, unknown>).get(
'media_attachments',
) as ImmutableList<MediaAttachment>
).find((item) => item.get('id') === id);
// Editing already-attached media is deferred to editing the post itself.
// For simplicity's sake, fake an API reply.
if (media && !media.get('unattached')) {
return new Promise<SimulatedMediaAttachmentJSON>((resolve) => {
resolve(simulateModifiedApiResponse(media, params));
});
}
return apiUpdateMedia(id, params);
},
(media: SimulatedMediaAttachmentJSON) => {
return {
media,
attached: typeof media.unattached !== 'undefined' && !media.unattached,
};
},
{
useLoadingBar: false,
},
);

View file

@ -9,6 +9,7 @@ export type ModalType = keyof typeof MODAL_COMPONENTS;
interface OpenModalPayload {
modalType: ModalType;
modalProps: ModalProps;
previousModalProps?: ModalProps;
}
export const openModal = createAction<OpenModalPayload>('MODAL_OPEN');

View file

@ -33,7 +33,7 @@ const unsubscribe = ({ registration, subscription }) =>
subscription ? subscription.unsubscribe().then(() => registration) : registration;
const sendSubscriptionToBackend = (subscription) => {
const params = { subscription };
const params = { subscription: { ...subscription.toJSON(), standard: true } };
if (me) {
const data = pushNotificationsSetting.get(me);

Some files were not shown because too many files have changed in this diff Show more