Compare commits

..

564 Commits

Author SHA1 Message Date
Claire
e272cf5983 Fix download of stable translation files in glitch-soc 2024-10-08 13:42:57 +02:00
Claire
4382de310c Merge pull request #2873 from ClearlyClaire/glitch-soc/backports-4.3
Merge upstream changes (stable-4.3)
2024-10-08 13:36:30 +02:00
Claire
94c69bba25 Merge branch 'stable-4.3' into glitch-soc/backports-4.3 2024-10-08 13:19:29 +02:00
github-actions[bot]
ab36c152f9 New Crowdin Translations for stable-4.3 (automated) (#32297)
Co-authored-by: GitHub Actions <noreply@github.com>
2024-10-08 13:18:49 +02:00
Matt Jankowski
fc5b558b32 Reduce factory usage across spec/services area (#32098) 2024-10-08 10:44:32 +02:00
Claire
77ff94d3d2 Fix source strings being uploaded to crowdin in merge groups (#32298) 2024-10-08 10:10:50 +02:00
Claire
959841ae95 Merge pull request #2871 from ClearlyClaire/glitch-soc/backports-4.3
Merge upstream changes (stable-4.3)
2024-10-07 21:25:03 +02:00
Eugen Rochko
f669493d96 [Glitch] Fix missing avatar fallback interfering with transparency in web UI
Port cae93e79a4 to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
2024-10-07 20:13:58 +02:00
Eugen Rochko
83b3c50778 [Glitch] Fix wrong width on logo in detailed link card in web UI
Port 889edc560a to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
2024-10-07 20:06:49 +02:00
Claire
dc7a42551f [Glitch] Fix media gallery items having incorrect borders when hidden
Port 3b4312476f to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
2024-10-07 20:06:14 +02:00
Claire
4a859140ec Merge commit 'edcf3d9234b03d6b1c4b29d1d15339f7f64040fb' into glitch-soc/backports-4.3 2024-10-07 20:03:53 +02:00
Claire
edcf3d9234 Bump version to v4.3.0 (#32283) 2024-10-07 17:37:05 +02:00
Eugen Rochko
cae93e79a4 Fix missing avatar fallback interfering with transparency in web UI (#32270) 2024-10-07 16:22:11 +02:00
Claire
83a98cb81a Add missing on_delete: :cascade on notification_permissions (#32281) 2024-10-07 16:22:11 +02:00
Eugen Rochko
889edc560a Fix wrong width on logo in detailed link card in web UI (#32271) 2024-10-07 16:22:11 +02:00
github-actions[bot]
2e0d918d7d New Crowdin Translations for stable-4.3 (automated) (#32253)
Co-authored-by: GitHub Actions <noreply@github.com>
2024-10-07 11:21:49 +02:00
Claire
3b4312476f Fix media gallery items having incorrect borders when hidden (#32257) 2024-10-07 10:54:23 +02:00
Claire
4fba4f8c82 Fix notification push notifications not including the author's username (#32254) 2024-10-07 10:54:23 +02:00
Matt Jankowski
25de2f57ee Add coverage for missing status scenario in NotificationMailer (#32256) 2024-10-07 10:54:23 +02:00
Claire
026643ab24 Fix video player's height in detailed status view 2024-10-06 19:19:14 +02:00
Claire
61e3e81e28 Merge pull request #2865 from ClearlyClaire/glitch-soc/backports-4.3
Merge upstream changes (stable-4.3)
2024-10-06 15:56:56 +02:00
Claire
354f54907d [Glitch] Fix unsupported grouped notifications from streaming causing duplicate IDs
Port 6d5aa58f88 to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
2024-10-05 21:05:55 +02:00
Claire
4d611e94ee [Glitch] Hide badges in media gallery when media are hidden
Port 55b5364534 to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
2024-10-05 21:05:15 +02:00
Claire
a09a26da49 [Glitch] Fix editing description of media uploads with custom thumbnails
Port 404f467fcf to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
2024-10-05 21:04:52 +02:00
Claire
59a8066045 [Glitch] Fix media uploads in composer appearing over search results in advanced interface
Port 4a2d3929c5 to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
2024-10-05 21:04:31 +02:00
Claire
3cad5095c9 [Glitch] Fix incorrect 'navigator' check
Port 931553844d to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
2024-10-05 21:04:09 +02:00
Matt Jankowski
e58d99a771 [Glitch] Adjust spacing on setting sub-nav items when below mobile size
Port 09cf617d7f to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
2024-10-05 21:03:45 +02:00
Matt Jankowski
69c76fd94a [Glitch] Improve alignment of icons on admin roles list
Port c828e7731c to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
2024-10-05 21:03:22 +02:00
Renaud Chaput
1b6bd585ab [Glitch] Fix follow notifications from streaming being grouped
Port 8ac00533ff to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
2024-10-05 21:00:39 +02:00
Claire
dfe851b476 Merge branch 'stable-4.3' into glitch-soc/backports-4.3
Conflicts:
- `app/helpers/application_helper.rb`:
  Upstream added a helper where glitch-soc had its own, not really
  a conflict.
  Added upstream's helper.
2024-10-05 20:45:05 +02:00
Claire
6d5aa58f88 Fix unsupported grouped notifications from streaming causing duplicate IDs (#32243) 2024-10-04 17:48:03 +02:00
Claire
81cd489208 Fix Content-Security-Policy when using sso-redirect (#32241) 2024-10-04 17:48:03 +02:00
Claire
55b5364534 Hide badges in media gallery when media are hidden (#32224) 2024-10-04 17:48:03 +02:00
Matt Jankowski
2e8b752c55 Move admin action log type list generation to helper (#32178) 2024-10-04 17:48:03 +02:00
Matt Jankowski
d82ffdccbb Add copyable_input helper method to wrap shared options (#32119) 2024-10-04 17:48:03 +02:00
Matt Jankowski
5c72b46a4e Clean up labels on development application form (#32116) 2024-10-04 17:48:03 +02:00
Matt Jankowski
aa46348c03 Enable hostname config for all system specs (#32109) 2024-10-04 17:48:03 +02:00
Claire
404f467fcf Fix editing description of media uploads with custom thumbnails (#32221) 2024-10-04 17:48:03 +02:00
Claire
4a2d3929c5 Fix media uploads in composer appearing over search results in advanced interface (#32217) 2024-10-04 17:48:03 +02:00
Matt Jankowski
ceba0f082e Provide use_path to qr generator for svg data size reduction (#32127) 2024-10-04 17:48:03 +02:00
Matt Jankowski
7de8d5ffca Add relevant_params to ReportFilter (matches account filter) (#32136) 2024-10-04 17:48:03 +02:00
Matt Jankowski
74291dfb77 Remove unneeded reorder(nil) conditions (#32200) 2024-10-04 17:48:03 +02:00
Matt Jankowski
f07707a9bb Extract WebPushRequest from push notification worker and subscription (#32208) 2024-10-04 17:48:03 +02:00
Claire
931553844d Fix incorrect 'navigator' check (#32219) 2024-10-04 17:48:03 +02:00
Matt Jankowski
243a85ec8d Expand coverage for Export utility class (#32212) 2024-10-04 17:48:03 +02:00
Christian Schmidt
cbf1349370 Support /.well-known/host-meta.json (#32206) 2024-10-04 17:48:03 +02:00
Jeong Arm
b8fdffe824 Ignore error if mentioned account was not processable (#29215)
Co-authored-by: Claire <claire.github-309c@sitedethib.com>
2024-10-04 17:48:03 +02:00
Matt Jankowski
c91e06bcad Fix Rails/CreateTableWithTimestamps cop (#30836) 2024-10-04 17:48:03 +02:00
Jeong Arm
b2ce9bb4c7 Show timestamp when the user deletes their account on admin dashboard (#25640)
Co-authored-by: Claire <claire.github-309c@sitedethib.com>
2024-10-04 17:48:03 +02:00
Matt Jankowski
19d1392b33 Avoid repeated icon stack in settings sidebar (#32201) 2024-10-04 17:48:03 +02:00
Matt Jankowski
09cf617d7f Adjust spacing on setting sub-nav items when below mobile size (#32137) 2024-10-04 17:48:03 +02:00
Matt Jankowski
784d1bfb29 Fix broken border on applications list (#32147) 2024-10-04 17:48:03 +02:00
Claire
754b03d8cb Fix unneeded requests to blocked domains when receiving relayed signed activities from them (#31161) 2024-10-04 17:48:03 +02:00
Emelia Smith
f397550311 Add detection and download of material_symbol icons in config/navigation.rb (#31366) 2024-10-04 17:48:03 +02:00
Matt Jankowski
97db4bd4dd Wrap datetime in time element with attrs (#32177) 2024-10-04 17:48:03 +02:00
Matt Jankowski
1e19242134 Extract constants for header and avatar geometry (#32151) 2024-10-04 17:48:03 +02:00
Matt Jankowski
4e6f13a0fb Only show email domain blocks MX table when some found (#32155) 2024-10-04 17:48:03 +02:00
Matt Jankowski
f517f0dbef Fix nav item active highlight for some paths (#32159) 2024-10-04 17:48:03 +02:00
Matt Jankowski
53624b1b54 Remove explicit put action in settings forms (#32176) 2024-10-04 17:48:03 +02:00
renovate[bot]
a473988969 Update dependency postcss-preset-env to v10.0.5 (#32019)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-04 17:48:03 +02:00
Matt Jankowski
4ad1e955eb Use module: :users in routes/admin section (#30767) 2024-10-04 17:48:03 +02:00
Matt Jankowski
66ef4b9984 Remove WebfingerHelper module & move usage inline (#31203) 2024-10-04 17:48:03 +02:00
David Roetzel
ce2481a81b Move OTP secret length to configuration (#32125) 2024-10-04 17:48:03 +02:00
renovate[bot]
efa74a6c44 Update RuboCop (non-major) to v1.22.1 (#31573)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-04 17:48:03 +02:00
Matt Jankowski
bdceb1dacf Add date_range view helper (#32187) 2024-10-04 17:48:03 +02:00
renovate[bot]
e13453aec4 Update dependency webmock to v3.24.0 (#32190)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-04 17:48:03 +02:00
renovate[bot]
25e8a6eaeb Update dependency propshaft to v1.1.0 (#32192)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-04 17:48:03 +02:00
Matt Jankowski
c828e7731c Improve alignment of icons on admin roles list (#32153) 2024-10-04 17:48:03 +02:00
Matt Jankowski
6734b6550f Extract dashboard partial for admin instance page (#32189) 2024-10-04 17:48:03 +02:00
renovate[bot]
6398d7b784 Update peter-evans/create-pull-request action to v7.0.5 (#32164)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-04 17:48:03 +02:00
Matt Jankowski
1283c3544c Avoid id duplication conflict with main navigation from settings profile link (#32181) 2024-10-04 17:48:03 +02:00
Renaud Chaput
8ac00533ff Fix follow notifications from streaming being grouped (#32179) 2024-10-04 17:48:03 +02:00
Matt Jankowski
1b3472bec8 Use account display name for pretend blog example in attribution area (#32188) 2024-10-04 17:48:03 +02:00
Claire
c8df7f4995 Change github action repo to glitch-soc 2024-09-30 20:50:32 +02:00
Claire
94743fea2c Merge remote-tracking branch 'upstream/stable-4.3' into glitch-soc/stable-4.3 2024-09-30 20:49:42 +02:00
Claire
deee164acf Support translation branches in Crowdin (#32174) 2024-09-30 19:45:40 +02:00
Claire
88756ab75f Merge pull request #2861 from ClearlyClaire/glitch-soc/merge-upstream
Merge upstream changes up to 03210085b7
2024-09-30 13:30:14 +02:00
Claire
9af9ef6fb3 Merge commit '03210085b7481568cc507f088144aaf1dae73c88' into glitch-soc/merge-upstream 2024-09-30 13:04:19 +02:00
Claire
03210085b7 Bump version to 4.3.0-rc.1 (#32124) 2024-09-30 10:42:59 +00:00
Claire
0c872beed4 Merge commit from fork
This should not change the set of words matched by `USERNAME_RE` but does
change the one matched by `MENTION_RE`. Indeed, the previous regexp allowed
a domain part to start with `.` or `-`, which the new regexp does not allow.
2024-09-30 12:25:54 +02:00
Claire
e22eff8900 Remove regexp timeout feature (#32169) 2024-09-30 09:41:06 +00:00
renovate[bot]
431b382563 Update dependency sass to v1.79.4 (#32139)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-30 08:55:18 +00:00
renovate[bot]
bf7cfba48e Update DefinitelyTyped types (non-major) (#32163)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-30 08:53:52 +00:00
github-actions[bot]
f477dc399e New Crowdin Translations (automated) (#32140)
Co-authored-by: GitHub Actions <noreply@github.com>
2024-09-30 08:53:29 +00:00
renovate[bot]
6037714f76 Update dependency propshaft to v1.0.1 (#32158)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-30 08:47:57 +00:00
Eugen Rochko
c352ce6f45 Fix missing permission on new embeds making them unclickable (#32135) 2024-09-30 08:20:20 +00:00
Claire
9bf624b44d Merge pull request #2860 from ClearlyClaire/glitch-soc/merge-upstream
Merge upstream changes up to 9d664f87a0
2024-09-29 20:36:32 +02:00
Eugen Rochko
e80971e660 [Glitch] Change media reordering design in the compose form in web UI
Port 11a12e56b3 to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
2024-09-29 14:03:19 +02:00
Eugen Rochko
9e10fd59b7 [Glitch] Add ability to view alt text by clicking the ALT badge in web UI
Port a04433f995 to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
2024-09-29 13:35:35 +02:00
Eugen Rochko
9b5f073cb3 [Glitch] Change design of media tab on profiles in web UI
Port 89df27a06c to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
2024-09-29 12:57:58 +02:00
Eugen Rochko
157ecf255b [Glitch] Change responsive break points on navigation panel in web UI
Port 28c4eca0af to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
2024-09-29 11:53:49 +02:00
Matt Jankowski
b8c23f94b0 [Glitch] Add no-toolbar state for "nothing here" batch table views
Port 24d3ce7bab to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
2024-09-29 11:29:18 +02:00
Matt Jankowski
3fa34bd73a [Glitch] Use 1 column layout for form ul on narrow widths
Port 106b22bd2d to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
2024-09-29 11:25:24 +02:00
Claire
77d2f7eef6 [Glitch] Fix scrollbar width
Port 89c39e7826 to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
2024-09-29 11:24:54 +02:00
Claire
8439084587 [Glitch] Add fallback to domain block confirmation modal
Port 7a62d57427 to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
2024-09-29 11:21:56 +02:00
Eugen Rochko
7b290cee47 [Glitch] Add preview of followers removed in domain block modal in web UI
Port 3426ea2912 to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
2024-09-29 11:21:05 +02:00
Claire
7ef25ae53b Merge commit '9d664f87a04b6a5157ddbe60ee33b5b7a960198e' into glitch-soc/merge-upstream 2024-09-29 11:06:09 +02:00
Christian Schmidt
9d664f87a0 Mailer layout fixes (#32132) 2024-09-27 19:41:41 +00:00
Matt Jankowski
24d3ce7bab Add no-toolbar state for "nothing here" batch table views (#32128) 2024-09-27 19:38:44 +00:00
Eugen Rochko
11a12e56b3 Change media reordering design in the compose form in web UI (#32093) 2024-09-27 15:09:39 +00:00
Matt Jankowski
cdd7526531 Remove completed TODO note in tags request spec (#32108) 2024-09-27 08:22:40 +00:00
Matt Jankowski
e02e88bff4 Use previously extracted model constants in form maxlength attributes (#32113) 2024-09-27 08:21:27 +00:00
Matt Jankowski
04dd3a9eb6 Wrap webhook event label with samp tag (#32115) 2024-09-27 08:20:21 +00:00
Matt Jankowski
675ec1a0ad Only show recently used tags hint when they are present (#32120) 2024-09-27 08:18:42 +00:00
github-actions[bot]
c9b0699964 New Crowdin Translations (automated) (#32121)
Co-authored-by: GitHub Actions <noreply@github.com>
2024-09-27 07:34:46 +00:00
Claire
513f187daf Add “A Mastodon update is available.” message on admin dashboard for non-bugfix updates (#32106) 2024-09-26 19:27:57 +00:00
renovate[bot]
ee2d966080 Update dependency blurhash to v0.1.8 (#32114)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-26 19:27:13 +00:00
Matt Jankowski
106b22bd2d Use 1 column layout for form ul on narrow widths (#32112) 2024-09-26 19:26:40 +00:00
Claire
89c39e7826 Fix scrollbar width (#32091) 2024-09-26 14:26:04 +00:00
Eugen Rochko
a04433f995 Add ability to view alt text by clicking the ALT badge in web UI (#32058) 2024-09-26 13:26:49 +00:00
Claire
7a62d57427 Add fallback to domain block confirmation modal (#32105) 2024-09-26 12:47:56 +00:00
Eugen Rochko
89df27a06c Change design of media tab on profiles in web UI (#31967) 2024-09-26 12:31:32 +00:00
Christian Schmidt
00aaf77e04 Use same styling for statuses in email as on web (#32073) 2024-09-26 11:48:01 +00:00
Claire
437cecc965 Fix awkward status action bar layout changes (#2859) 2024-09-26 12:02:40 +02:00
Matt Jankowski
db57fe80c8 Remove page_json var from ap/replies spec (#32000) 2024-09-26 08:54:01 +00:00
github-actions[bot]
278a075b22 New Crowdin Translations (automated) (#32103)
Co-authored-by: GitHub Actions <noreply@github.com>
2024-09-26 08:47:38 +00:00
Claire
886baa5e35 Fix typo causing incorrect error being raised in blurhash processing failure (#32104) 2024-09-26 07:40:59 +00:00
Christian Schmidt
db332553c9 Rename "Data export" menu item (#32099) 2024-09-25 19:54:28 +00:00
Claire
f610fdd6e7 Merge pull request #2858 from ClearlyClaire/glitch-soc/merge-upstream
Merge upstream changes up to 28966fa0a6
2024-09-25 21:15:51 +02:00
Eugen Rochko
3426ea2912 Add preview of followers removed in domain block modal in web UI (#32032) 2024-09-25 18:13:36 +00:00
Eugen Rochko
28c4eca0af Change responsive break points on navigation panel in web UI (#32034) 2024-09-25 16:36:19 +00:00
Renaud Chaput
0b1310feb3 [Glitch] Keep the status action buttons at their position regardless of the counter size
Port 739ad0eed2 to glitch-soc

Co-authored-by: Claire <claire.github-309c@sitedethib.com>
Signed-off-by: Claire <claire.github-309c@sitedethib.com>
2024-09-25 18:12:24 +02:00
Renaud Chaput
5716ebf390 [Glitch] Add notification grouping for follow notifications
Port d6f5ee75ab to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
2024-09-25 18:09:19 +02:00
Renaud Chaput
36ce5813cb [Glitch] Fix search params being dropped when redirected to non-deck path
Port 3dc4ddc663 to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
2024-09-25 18:08:55 +02:00
Matt Jankowski
d9d84822bb [Glitch] Use not-allowed for cursor on disabled buttons
Port 69aa5699ce to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
2024-09-25 18:08:12 +02:00
Claire
633165ba9c Merge commit '28966fa0a6d7b98ee94696acdc79e45449ce8349' into glitch-soc/merge-upstream 2024-09-25 17:41:37 +02:00
Renaud Chaput
28966fa0a6 Remove deprecated v2_alpha endpoint for grouped notifications (#32089) 2024-09-25 15:21:11 +00:00
Renaud Chaput
739ad0eed2 Keep the status action buttons at their position regardless of the counter size (#32084)
Co-authored-by: Claire <claire.github-309c@sitedethib.com>
2024-09-25 14:33:58 +00:00
Matt Jankowski
51777fe3e2 Prefer structure checks over multi-line size/parts checks in parsed_body (#32063) 2024-09-25 13:54:22 +00:00
Renaud Chaput
d6f5ee75ab Add notification grouping for follow notifications (#32085) 2024-09-25 13:36:19 +00:00
Renaud Chaput
3dc4ddc663 Fix search params being dropped when redirected to non-deck path (#31984) 2024-09-25 13:35:37 +00:00
Matt Jankowski
83574f641a Add coverage and use mailer callback to check functional user in notification mailer (#32055) 2024-09-25 08:07:48 +00:00
Matt Jankowski
c2ef83ea4c Consolidate shared a scope example parts into one attributes check (#32046) 2024-09-25 07:56:42 +00:00
Matt Jankowski
c3b6a7a297 Reduce factory creation (36 -> 12) in spec/controllers/oauth/* area (#32045) 2024-09-25 07:56:08 +00:00
Matt Jankowski
06ecf9008b Remove single-use shared examples in controller specs (#32044) 2024-09-25 07:50:15 +00:00
Matt Jankowski
69aa5699ce Use not-allowed for cursor on disabled buttons (#32076) 2024-09-25 07:43:12 +00:00
github-actions[bot]
4e6fc3a62f New Crowdin Translations (automated) (#32083)
Co-authored-by: GitHub Actions <noreply@github.com>
2024-09-25 07:40:14 +00:00
renovate[bot]
a773c239c3 Update dependency aws-sdk-s3 to v1.166.0 (#32079)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-25 07:33:37 +00:00
Claire
440b695b79 Fix polls not being displayed in detailed status (#2857) 2024-09-24 20:54:24 +02:00
Claire
5df7e36244 Merge pull request #2856 from ClearlyClaire/glitch-soc/merge-upstream
Merge upstream changes up to 70988519df
2024-09-24 20:51:46 +02:00
Eugen Rochko
ba7b1f06c1 [Glitch] Fix too many requests caused by relationship look-ups in web UI
Port 70988519df to glitch-soc

Co-authored-by: Claire <claire.github-309c@sitedethib.com>
Signed-off-by: Claire <claire.github-309c@sitedethib.com>
2024-09-24 19:42:30 +02:00
Renaud Chaput
6142adc7d6 [Glitch] Fix wrapping in dashboard quick access buttons
Port f1b6a611aa to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
2024-09-24 19:41:37 +02:00
Claire
131696277c [Glitch] Fix multiple bugs in notification requests and notification policies
Port 0a6b75b71e to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
2024-09-24 19:41:04 +02:00
Eugen Rochko
aac6296183 [Glitch] Change hide media button to be in top right corner in web UI
Port d54ce67dc9 to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
2024-09-24 19:40:34 +02:00
Claire
c6039f99ce Merge commit '70988519df66f0b8edeb6ca95140f1d3e436fea8' into glitch-soc/merge-upstream 2024-09-24 19:34:30 +02:00
Eugen Rochko
70988519df Fix too many requests caused by relationship look-ups in web UI (#32042)
Co-authored-by: Claire <claire.github-309c@sitedethib.com>
2024-09-24 17:02:36 +00:00
Renaud Chaput
f1b6a611aa Fix wrapping in dashboard quick access buttons (#32043) 2024-09-24 16:47:45 +00:00
André Menrath
556837f156 Fix the summary of converted object types to be treated as HTML (#28629) 2024-09-24 15:57:53 +00:00
Claire
c36a76b9eb Fix error when accepting appeal for sensitive posts deleted in the meantime (#32037)
Co-authored-by: David Roetzel <david@roetzel.de>
2024-09-24 15:19:55 +00:00
Claire
0a6b75b71e Fix multiple bugs in notification requests and notification policies (#32062) 2024-09-24 15:03:38 +00:00
David Roetzel
cfb8fc6222 Increase regexp timeout and allow override (#32056) 2024-09-24 13:16:58 +00:00
Matt Jankowski
19dedd7cfd Set important mailer headers with after_action callback (#32057) 2024-09-24 13:16:31 +00:00
Matt Jankowski
780e2e9d66 Convert notification mailer spec shared examples to matchers (#32047) 2024-09-24 12:07:16 +00:00
renovate[bot]
7c61533111 Update dependency aws-sdk-s3 to v1.165.0 (#32050)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-24 09:54:25 +00:00
github-actions[bot]
11ac5c8929 New Crowdin Translations (automated) (#32052)
Co-authored-by: GitHub Actions <noreply@github.com>
2024-09-24 09:42:14 +00:00
Claire
c808055fc3 Update dependency webrick (#32054) 2024-09-24 08:16:22 +00:00
Eugen Rochko
d54ce67dc9 Change hide media button to be in top right corner in web UI (#32048) 2024-09-24 08:00:20 +00:00
Claire
6551129aff Merge pull request #2853 from ClearlyClaire/glitch-soc/merge-upstream
Merge upstream changes up to 5dfdec6453
2024-09-24 09:44:10 +02:00
Claire
38744a4e51 [Glitch] Change mobile breakpoint back to old version and allow main column to shrink
Port b5bdc69f7b to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
2024-09-23 20:26:05 +02:00
Claire
c2c3a66478 Merge commit '5dfdec645313e556413147597138a8008bc35996' into glitch-soc/merge-upstream 2024-09-23 20:24:18 +02:00
Matt Jankowski
5dfdec6453 Convert settings/applications controller spec to system/request specs (#32006) 2024-09-23 13:37:32 +00:00
Eugen Rochko
aaab6b7adc Add reblogs and favourites counts to statuses in ActivityPub (#32007) 2024-09-23 13:14:15 +00:00
Claire
b5bdc69f7b Change mobile breakpoint back to old version and allow main column to shrink (#32033) 2024-09-23 12:53:35 +00:00
Matt Jankowski
bbf7752256 Combine assertions in Notification model spec (#32015) 2024-09-23 10:45:34 +00:00
Matt Jankowski
2b4bda8004 Add response_avatar_link helper to webfinger request spec (#31999) 2024-09-23 10:44:52 +00:00
Matt Jankowski
447d0a3e88 Remove double no-records cases in api/v1/admin req specs (#32014) 2024-09-23 09:27:53 +00:00
Matt Jankowski
66ed7ea4b5 Move status creation to "with rss" context in accounts request spec (#32020) 2024-09-23 09:20:43 +00:00
Matt Jankowski
cd7b670cd8 Reduce factory creation in User#reset_password! spec (#32021) 2024-09-23 09:18:04 +00:00
Claire
5d6a3f2cb0 Update dependency google-protobuf (#32029) 2024-09-23 09:13:51 +00:00
renovate[bot]
770ec9240a Update Yarn to v4.5.0 (#31914)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-23 09:02:16 +00:00
Tim Campbell
11eae691ba Feature more otel customization (#31998) 2024-09-23 08:55:35 +00:00
github-actions[bot]
ed90d9342e New Crowdin Translations (automated) (#32011)
Co-authored-by: GitHub Actions <noreply@github.com>
2024-09-23 08:50:19 +00:00
Matt Jankowski
0ba3ad4a35 Remove body_json_ids from api/v2/admin/accounts spec (#32003) 2024-09-23 08:45:05 +00:00
Matt Jankowski
e0b45b35c9 Combine repeated parsed_body assertions into single (#32002) 2024-09-23 08:42:52 +00:00
Eugen Rochko
5fae1d55e5 Fix OAuth authorization prompt referring to third-party apps (#32005) 2024-09-23 08:42:03 +00:00
renovate[bot]
10d2f83025 Update dependency selenium-webdriver to v4.25.0 (#32008)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-23 08:41:26 +00:00
renovate[bot]
958f01e722 Update dependency sass to v1.79.3 (#32009)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-23 08:41:05 +00:00
renovate[bot]
f4632d941a Update dependency aws-sdk-s3 to v1.164.0 (#32010)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-23 08:40:46 +00:00
renovate[bot]
c37f9c0d44 Update dependency jsdom to v25.0.1 (#32017)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-23 08:36:57 +00:00
renovate[bot]
84d04386dd Update DefinitelyTyped types (non-major) (#32026)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-23 08:35:37 +00:00
renovate[bot]
f294c4a594 Update libretranslate/libretranslate Docker tag to v1.6.1 (#32027)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-23 08:35:23 +00:00
renovate[bot]
efc0d4d526 Update dependency react-intl to v6.7.0 (#32028)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-23 08:35:11 +00:00
Claire
6ac6d86525 Merge pull request #2852 from ClearlyClaire/glitch-soc/features/grouped-notifications-cw
Add content warning support to grouped notifications
2024-09-22 21:57:55 +02:00
Claire
7c148ed1cb Use new CW class in more places 2024-09-22 21:17:15 +02:00
Claire
4d754935a9 Replace new-style upstream CWs with old-style CWs for now 2024-09-22 20:55:06 +02:00
Eugen Rochko
0d26c9fb0b [Glitch] Fix wrong width on content warnings and filters in web UI
Port b265a654d7 to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
2024-09-22 19:31:22 +02:00
Eugen Rochko
7d97e3d82f [Glitch] Change how content warnings and filters are displayed in web UI
Partially apply 500f4925a5 to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
2024-09-22 19:31:22 +02:00
Claire
5aebdc9bcb Merge pull request #2850 from ClearlyClaire/glitch-soc/merge-upstream
Merge upstream changes up to 7ed9c590b9
2024-09-21 20:27:48 +02:00
Eugen Rochko
a969c6a6a6 [Glitch] Change zoom icon in web UI
Port e7fd0985c9 to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
2024-09-21 15:36:17 +02:00
Renaud Chaput
03829d8e1d [Glitch] Update directory page options to use URL params
Port ae03e4ffc6 to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
2024-09-21 15:17:56 +02:00
Claire
86b9d3b4e5 [Glitch] Fix custom history.push and history.replace building bogus location if path is omitted
Port 57a38f071b to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
2024-09-21 15:16:54 +02:00
Eugen Rochko
9bd5838646 [Glitch] Fix browser glitch caused by two overlapping scroll animations in web UI
Port ef4d6ab988 to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
2024-09-21 15:16:28 +02:00
Eugen Rochko
80cb285819 [Glitch] Fix sass deprecation warning
Port 29656cb9e0 to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
2024-09-21 15:14:54 +02:00
Renaud Chaput
d77348f830 [Glitch] Fix the appearance of avatars when they do not load
Port 8b70834035 to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
2024-09-21 15:13:57 +02:00
Christian Schmidt
0820cbcb35 [Glitch] Mute XHR abort errors
Port 7740f1a6bb to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
2024-09-21 15:13:23 +02:00
Claire
221bba1897 Merge commit '7ed9c590b98610f8d68deab9ef8df260eec6d8f0' into glitch-soc/merge-upstream 2024-09-21 15:06:06 +02:00
github-actions[bot]
b0f6d3e112 New Crowdin Translations (automated) (#2773)
* New Crowdin translations

* Fix bogus `no.yml`

* Fix bogus `simple_form.no.yml`

---------

Co-authored-by: GitHub Actions <noreply@github.com>
Co-authored-by: Claire <claire.github-309c@sitedethib.com>
2024-09-21 14:57:30 +02:00
Claire
7ed9c590b9 Fix issue when encountering reblog of deleted post in feed rebuild (#32001) 2024-09-20 14:58:06 +00:00
Claire
ed8b0e4b1e Fix links for reblogs in moderation interface (#31979) 2024-09-20 13:33:26 +00:00
Matt Jankowski
d55f4fbda1 Add content type checks to api/v2 request specs (#31983) 2024-09-20 13:19:53 +00:00
Matt Jankowski
171394e914 Add coverage for CSV responses for severed relationships (#31962) 2024-09-20 13:13:47 +00:00
Matt Jankowski
66326065b0 Add response.content_type checks for JSON to api/v1 request specs (#31981) 2024-09-20 13:13:04 +00:00
Matt Jankowski
a7dbf6f5a5 Use heredoc/squish for inline css styles in oembed serializer (#31991) 2024-09-20 12:50:51 +00:00
Matt Jankowski
bdf83c353f Move default embed size knowledge into OEmbedSerializer (#31990)
Co-authored-by: Claire <claire.github-309c@sitedethib.com>
2024-09-20 12:39:48 +00:00
Claire
8afa3bb2fa Change Mastodon to issue correctly-signed queries by default (#31994) 2024-09-20 10:10:09 +00:00
Eugen Rochko
e7fd0985c9 Change zoom icon in web UI (#29683) 2024-09-20 09:42:02 +00:00
Matt Jankowski
04a939d640 Add reviewed and unreviewed scopes to Reviewable model concern (#31988) 2024-09-20 08:51:37 +00:00
Matt Jankowski
c922af2737 Add LIMIT constant for api/v1/peers/search endpoint (#31989) 2024-09-20 08:31:58 +00:00
github-actions[bot]
162f9a3c90 New Crowdin Translations (automated) (#31993)
Co-authored-by: GitHub Actions <noreply@github.com>
2024-09-20 08:31:28 +00:00
renovate[bot]
840fd69730 Update dependency sass to v1.79.2 (#31992)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-20 08:20:27 +00:00
Matt Jankowski
9a03902ab6 Capture actual behavior in v2/notifications "someone else" dismiss scenario (#31985) 2024-09-20 08:16:19 +00:00
renovate[bot]
09459ed000 Update dependency react-select to v5.8.1 (#31982)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-20 08:15:14 +00:00
Renaud Chaput
ae03e4ffc6 Update directory page options to use URL params (#31977) 2024-09-19 15:34:08 +00:00
Claire
57a38f071b Fix custom history.push and history.replace building bogus location if path is omitted (#31980) 2024-09-19 14:58:33 +00:00
Matt Jankowski
5a8f2fe31d Convert settings/exports controller spec to system/request specs (#31965) 2024-09-19 13:43:40 +00:00
Matt Jankowski
2946a9286b Use headers shorthand in mailers (#31956) 2024-09-19 13:38:32 +00:00
renovate[bot]
6801afa12f Update dependency devise-two-factor to v6 [SECURITY] (#31957)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: David Roetzel <david@roetzel.de>
2024-09-19 10:56:09 +00:00
Eugen Rochko
ef4d6ab988 Fix browser glitch caused by two overlapping scroll animations in web UI (#31960) 2024-09-19 10:52:46 +00:00
github-actions[bot]
efdc17513d New Crowdin Translations (automated) (#31974)
Co-authored-by: GitHub Actions <noreply@github.com>
2024-09-19 10:34:19 +00:00
Matt Jankowski
5d573c976e Remove unused E2EE-related methods (#31964) 2024-09-19 10:23:58 +00:00
Matt Jankowski
b071e618e7 Combine API request spec assertions (#31970) 2024-09-19 10:15:21 +00:00
renovate[bot]
1fce55cf5d Update dependency aws-sdk-s3 to v1.163.0 (#31972)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-19 09:51:14 +00:00
renovate[bot]
90db524a90 Update dependency puma to v6.4.3 (#31975)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-19 09:50:58 +00:00
Claire
62a39d60ce Fix rolling updates by moving DropEndToEndMessageTables to post-deployment migrations (#31963) 2024-09-19 09:50:06 +00:00
Eugen Rochko
29656cb9e0 Fix sass deprecation warning (#31961) 2024-09-18 17:39:32 +00:00
Renaud Chaput
8b70834035 Fix the appearance of avatars when they do not load (#31966) 2024-09-18 17:39:15 +00:00
Matt Jankowski
e3baa1cdda Add coverage for AccountDeletionRequest class (#31937) 2024-09-18 13:29:57 +00:00
renovate[bot]
42f9f507b6 Update dependency pg to v8.13.0 (#31949)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-18 13:29:21 +00:00
Matt Jankowski
bf8eaaa9a5 Convert controller spec for security_key_options endpoint to request spec (#31938) 2024-09-18 09:42:36 +00:00
Matt Jankowski
6f836c45aa Remove crypto values from doorkeeper application/token scopes (#31945) 2024-09-18 09:27:50 +00:00
Matt Jankowski
5405bdd344 Remove unused E2EE messaging code (#31193) 2024-09-18 09:27:43 +00:00
renovate[bot]
2d399f5d4a Update dependency pg-connection-string to v2.7.0 (#31950)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-18 09:17:57 +00:00
Christian Schmidt
7740f1a6bb Mute XHR abort errors (#31952) 2024-09-18 08:43:24 +00:00
renovate[bot]
a791274824 Update dependency sass to v1.79.1 (#31958)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-18 08:28:42 +00:00
Matt Jankowski
eb16763bff Use have_http_link_header matcher in api/v1/trends/* specs (#31940) 2024-09-18 08:22:07 +00:00
Matt Jankowski
943738671c Remove unneeded to_s on Link header comparison in statuses controller spec (#31941) 2024-09-18 08:21:31 +00:00
renovate[bot]
6f3d7516dc Update dependency dotenv to v3.1.4 (#31953)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-18 08:10:22 +00:00
github-actions[bot]
bd86c692cf New Crowdin Translations (automated) (#31959)
Co-authored-by: GitHub Actions <noreply@github.com>
2024-09-18 08:06:44 +00:00
renovate[bot]
b7548dbf29 Update dependency memory_profiler to v1.1.0 (#31947)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-18 08:05:59 +00:00
Matt Jankowski
a397141d78 Move non-action public method controller callback to private methods (#31933) 2024-09-18 08:05:25 +00:00
renovate[bot]
f3f06dafe3 Update dependency babel-loader to v8.4.1 (#31931)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-18 08:05:06 +00:00
Claire
486e61677c Merge pull request #2848 from ClearlyClaire/glitch-soc/merge-upstream
Merge upstream changes up to 3e91c101b3
2024-09-17 18:34:28 +02:00
Claire
6bd86fede0 [Glitch] Increase no-gap-breakpoint by 32px to fix overflow
Port d2f9075078 to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
2024-09-17 18:13:36 +02:00
Michael Stanclift
a85b2476c2 [Glitch] Fix background of text detection progress
Port 5a33a5658b to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
2024-09-17 18:13:36 +02:00
Claire
93b2c8164e [Glitch] Fix selectSettingsNotificationsExcludedTypes not being memoized properly
Port ca8e892c1a to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
2024-09-17 18:13:36 +02:00
Claire
11de3dbef6 [Glitch] Enable grouped notifications unconditionally
Port c620452fd7 to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
2024-09-17 18:13:36 +02:00
Claire
6de18bb475 Merge commit '3e91c101b3c4b5166dab778837e38bed424b4333' into glitch-soc/merge-upstream 2024-09-17 17:54:00 +02:00
Claire
3e91c101b3 Bump version to 4.3.0-beta.2 (#31948) 2024-09-17 15:42:45 +00:00
David Roetzel
d8f9db547a Merge commit from fork
Co-authored-by: Eugen Rochko <eugen@zeonfederated.com>
2024-09-17 16:59:29 +02:00
github-actions[bot]
6a233cbfcf New Crowdin Translations (automated) (#31946)
Co-authored-by: GitHub Actions <noreply@github.com>
2024-09-17 13:02:53 +00:00
Claire
d2f9075078 Increase no-gap-breakpoint by 32px to fix overflow (#31889) 2024-09-17 03:19:42 +00:00
Michael Stanclift
5a33a5658b Fix background of text detection progress (#31943) 2024-09-17 03:19:04 +00:00
Claire
18209d2011 Merge pull request #2847 from ClearlyClaire/glitch-soc/fixes/click-detailed-status
Fix detailed statuses being clickable and linking to broken pages
2024-09-16 23:51:37 +02:00
Claire
c8ef702ba9 Merge pull request #2846 from ClearlyClaire/glitch-soc/merge-upstream
Merge upstream changes up to e0648a916a
2024-09-16 23:31:03 +02:00
Claire
43f6792e1b Fix detailed statuses being clickable and linking to broken pages 2024-09-16 22:51:19 +02:00
Claire
0740352ce6 [Glitch] Rename /api/v2_alpha/notifications* to /api/v2/notifications*
Port e0648a916a to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
2024-09-16 21:28:05 +02:00
Eugen Rochko
b6398cf2d3 [Glitch] Fix horizontal scrollbar on who to follow carousel in web UI
Port efb0e2c34b to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
2024-09-16 21:28:05 +02:00
Claire
e25634ccef [Glitch] Convert notification requests actions and reducers to Typescript
Port c0eda832f3 to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
2024-09-16 21:28:05 +02:00
Claire
665e9129fe Merge commit 'e0648a916ab81925545504173bf4f43ec64d4f3c' into glitch-soc/merge-upstream
Conflicts:
- `app/models/custom_emoji.rb`:
  An upstream refactor touched lines adjacent to ones modified in glitch-soc.
  Ported upstream's changes.
2024-09-16 21:08:58 +02:00
Claire
ca8e892c1a Fix selectSettingsNotificationsExcludedTypes not being memoized properly (#31881) 2024-09-16 14:51:56 +00:00
Claire
6c76a7a907 Fix cancel follow request button sometimes saying “Follow back” (#31934) 2024-09-16 13:20:44 +00:00
Claire
c620452fd7 Enable grouped notifications unconditionally (#31929) 2024-09-16 13:12:10 +00:00
Claire
e0648a916a Rename /api/v2_alpha/notifications* to /api/v2/notifications* (#31840) 2024-09-16 12:10:02 +00:00
Eugen Rochko
efb0e2c34b Fix horizontal scrollbar on who to follow carousel in web UI (#31912) 2024-09-16 12:08:37 +00:00
Claire
c0eda832f3 Convert notification requests actions and reducers to Typescript (#31866) 2024-09-16 09:54:03 +00:00
Claire
d5cf27e667 Add global Regexp timeout (#31928) 2024-09-16 09:40:18 +00:00
Matt Jankowski
c54cbf7943 Remove follow creation from ListAccount fabricator (#31902) 2024-09-16 08:56:40 +00:00
github-actions[bot]
474abf3c7f New Crowdin Translations (automated) (#31911)
Co-authored-by: GitHub Actions <noreply@github.com>
2024-09-16 08:48:20 +00:00
Claire
1d58f93670 Update dependencies omniauth-saml, ruby-xml and ruby-saml (#31926) 2024-09-16 08:48:13 +00:00
Matt Jankowski
bf8b55ce91 Enable Rails/Output in spec/ dir (#31905) 2024-09-16 08:29:06 +00:00
Matt Jankowski
abd2f5654a Add validation coverage for CustomEmoji shortcode value (#31906) 2024-09-16 07:53:03 +00:00
Matt Jankowski
822e918a56 Add coverage for Bookmark validation and reblog/status check callback (#31907) 2024-09-16 07:52:22 +00:00
renovate[bot]
c24de04f9c Update dependency postcss to v8.4.47 (#31913)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-16 07:51:36 +00:00
renovate[bot]
9ea270526c Update DefinitelyTyped types (non-major) (#31922)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-16 07:51:13 +00:00
renovate[bot]
2afaa3b3d4 Update dependency husky to v9.1.6 (#31923)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-16 07:50:51 +00:00
renovate[bot]
0cc05fbb7c Update dependency i18n to v1.14.6 (#31925)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-16 07:50:43 +00:00
Claire
4b40d13cb3 Increase preview card image size limit from 2MB to 8MB when using libvips (#31904) 2024-09-14 00:16:02 +00:00
Claire
346919178d Merge pull request #2845 from ClearlyClaire/glitch-soc/merge-upstream
Merge upstream changes up to 5ba3405be4
2024-09-13 23:40:06 +02:00
Claire
117ac13d12 Merge commit '5ba3405be4c1f708f198580b481f822698dab392' into glitch-soc/merge-upstream 2024-09-13 21:37:34 +02:00
Claire
065abf2918 Merge pull request #2843 from ClearlyClaire/glitch-soc/merge-upstream
Merge upstream changes up to 0226bbe516
2024-09-13 21:35:17 +02:00
renovate[bot]
5ba3405be4 Update dependency opentelemetry-instrumentation-pg to '~> 0.29.0' (#31897)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-13 12:07:33 +00:00
David Roetzel
c1b2c4fd9a Strip protocol from attribution domains (#31900) 2024-09-13 11:37:15 +00:00
Claire
ba81e4e019 Fix inability to locally suspend remotely-suspended accounts in moderation interface (#31899) 2024-09-13 09:11:10 +00:00
Matt Jankowski
a2c4f5f5c0 Add coverage for ListAccount follow/follow_request set up (#31896) 2024-09-13 08:49:03 +00:00
Matt Jankowski
49cbee3836 Remove unused argument from AccountMigration.within_cooldown (#31892) 2024-09-13 08:43:21 +00:00
github-actions[bot]
353ade767b New Crowdin Translations (automated) (#31898)
Co-authored-by: GitHub Actions <noreply@github.com>
2024-09-13 08:41:46 +00:00
Claire
427ed60274 Fix link handling within detailed status contents 2024-09-12 22:42:07 +02:00
Claire
4050beb6e2 Fix detailed status timestamp link target not being the original URL 2024-09-12 22:30:40 +02:00
Matt Jankowski
202077517c Add "search" group for chewy classes in simplecov config (#31890) 2024-09-12 20:09:55 +00:00
Michael Stanclift
9b1ecf7aee [Glitch] Fix review history and action modal styling
Port a269ff9253 to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
2024-09-12 21:38:15 +02:00
Claire
afd3953cdd [Glitch] Autofocus primary button in modals
Port 5f782f9629 to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
2024-09-12 21:35:03 +02:00
Claire
83b553c7d1 Merge commit '0226bbe5165a53658b29e46ddbef6a10507fdc8c' into glitch-soc/merge-upstream 2024-09-12 21:32:39 +02:00
Eugen Rochko
bd68d2ab21 [Glitch] Change design of embed modal in web UI
Port 24ef8255b3 to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
2024-09-12 20:58:23 +02:00
Eugen Rochko
e705ec13db [Glitch] Change embedded posts to use web UI
Port 3d46f47817 to glitch-soc

Co-authored-by: Claire <claire.github-309c@sitedethib.com>
Signed-off-by: Claire <claire.github-309c@sitedethib.com>
2024-09-12 20:58:02 +02:00
Claire
3465d39494 Merge commit '24ef8255b3f9b44cb54f49bc78fe3382a7070b1a' into glitch-soc/merge-upstream
Conflicts:
- `app/helpers/accounts_helper.rb`:
  Upstream removed a helper, textually adjacent to a glitch-soc-only one.
  Not really a conflict.
  Removed the helper as upstream did.
- `app/views/layouts/embedded.html.haml`:
  Conflicts due to theming system.
  Adapted upstream's change to our theming system.
- `app/views/statuses/_simple_status.html.haml`:
  Removed upstream, but we had local changes.
  Removed as upstream did.
2024-09-12 20:05:08 +02:00
Eugen Rochko
2d31cdbc28 [Glitch] Fix notifications re-rendering spuriously in web UI
Port f2a92c2d22 to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
2024-09-12 17:35:05 +02:00
Claire
caaa412e6e Merge commit 'f2a92c2d22345568ca7f47ee1d1d70de53eb547d' into glitch-soc/merge-upstream 2024-09-12 17:34:16 +02:00
renovate[bot]
17e3a12d3d [Glitch] Update typescript-eslint monorepo to v8 (major)
Port a27f7f4e56 to glitch-soc

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Renaud Chaput <renchap@gmail.com>
Signed-off-by: Claire <claire.github-309c@sitedethib.com>
2024-09-12 17:32:41 +02:00
Eugen Rochko
196b141af5 [Glitch] Change inner borders in media galleries in web UI
Port a3215c0f88 to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
2024-09-12 17:28:44 +02:00
Michael Stanclift
eb28472ded [Glitch] Fix alt text modal styling
Port e09f9f885e to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
2024-09-12 17:23:59 +02:00
Claire
90d7a4bac4 Merge commit 'a27f7f4e561c9d2fe21d984059603d2f500c005b' into glitch-soc/merge-upstream 2024-09-12 17:22:06 +02:00
renovate[bot]
0226bbe516 Update dependency express to v4.21.0 (#31877)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-12 14:21:06 +00:00
renovate[bot]
cc3cf9c465 Update dependency aws-sdk-s3 to v1.162.0 (#31875)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-12 14:20:44 +00:00
Michael Stanclift
a269ff9253 Fix review history and action modal styling (#31864) 2024-09-12 14:18:43 +00:00
Matt Jankowski
207c073bf8 Remove debug output in migration controller spec (#31886) 2024-09-12 14:04:46 +00:00
Taylor Chaparro
1b6a82b799 Fix invalid date searches returning 503 (#31526) 2024-09-12 13:40:20 +00:00
Matt Jankowski
f3c4874522 Remove unused statuses#embed body class assignment (#31787) 2024-09-12 13:38:15 +00:00
Matt Jankowski
4aa600387e Move redirect/base body class to view (#31796) 2024-09-12 13:31:50 +00:00
Christian Schmidt
8cdc148167 Handle invalid visibility (#31571) 2024-09-12 13:29:55 +00:00
Matt Jankowski
17c57c46e7 Add coverage for title/limit validations in List model (#31869) 2024-09-12 13:25:23 +00:00
Claire
a496aeabcb Change form-action Content-Security-Policy directive to be more restrictive (#26897) 2024-09-12 13:24:19 +00:00
Claire
5f782f9629 Autofocus primary button in modals (#31883) 2024-09-12 13:15:05 +00:00
Claire
c35ea59ee6 Fix security context sometimes not being added in LD-Signed activities (#31871) 2024-09-12 12:58:12 +00:00
Eugen Rochko
24ef8255b3 Change design of embed modal in web UI (#31801) 2024-09-12 12:54:16 +00:00
Claire
cb91629353 Merge pull request #2842 from ClearlyClaire/glitch-soc/merge-upstream
Merge upstream changes up to 0c3c06f7cc
2024-09-12 13:55:14 +02:00
David Roetzel
ab763c493f Ignore undefined as canonical url (#31882) 2024-09-12 11:14:42 +00:00
Eugen Rochko
77cbe2332a [Glitch] Add ability to manage which websites can credit you in link previews
Port CSS changes from e0c27a5047 to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
2024-09-12 12:30:31 +02:00
Eugen Rochko
abe1717215 [Glitch] Change design of hide media button in web UI
Port 3929e3c6d2 to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
2024-09-12 12:30:31 +02:00
Claire
10e2b87774 Merge commit '0c3c06f7cc50c9207a44f56e184ce6a41f953171' into glitch-soc/merge-upstream 2024-09-12 12:09:21 +02:00
Eugen Rochko
3d46f47817 Change embedded posts to use web UI (#31766)
Co-authored-by: Claire <claire.github-309c@sitedethib.com>
2024-09-12 09:41:19 +00:00
Eugen Rochko
f2a92c2d22 Fix notifications re-rendering spuriously in web UI (#31879) 2024-09-12 08:16:07 +00:00
github-actions[bot]
7d53ca56d2 New Crowdin Translations (automated) (#31878)
Co-authored-by: GitHub Actions <noreply@github.com>
2024-09-12 07:54:53 +00:00
Claire
7cfa8bb782 Merge pull request #2841 from ClearlyClaire/glitch-soc/merge-upstream
Merge upstream changes up to a021dee642
2024-09-12 08:51:21 +02:00
Eugen Rochko
e2c101ec35 [Glitch] Change labels on thread indicators in web UI
Partial port of a021dee642 to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
2024-09-11 21:27:46 +02:00
Claire
b240bad61a Merge commit '5260233b81c301cf7b0c79b179858748b693460b' into glitch-soc/merge-upstream 2024-09-11 20:58:35 +02:00
renovate[bot]
a27f7f4e56 Update typescript-eslint monorepo to v8 (major) (#31231)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Renaud Chaput <renchap@gmail.com>
2024-09-11 13:59:46 +00:00
github-actions[bot]
2babfafaff New Crowdin Translations (automated) (#31855)
Co-authored-by: GitHub Actions <noreply@github.com>
2024-09-11 08:18:10 +00:00
Matt Jankowski
cdcd834f3c Add coverage for AnnualReport::* source child classes (#31849) 2024-09-11 08:01:32 +00:00
renovate[bot]
9769ffdcc2 Update dependency aws-sdk-s3 to v1.161.0 (#31853)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-11 07:47:37 +00:00
Matt Jankowski
cee71b9892 Remove fa_ prefix from status visibility icon method (#31846) 2024-09-11 07:47:16 +00:00
Eugen Rochko
a3215c0f88 Change inner borders in media galleries in web UI (#31852) 2024-09-11 07:29:18 +00:00
renovate[bot]
9e12fa254e Update dependency propshaft to v1 (#31832)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-10 17:45:32 +00:00
renovate[bot]
e6f5b36a12 Update dependency express to v4.20.0 (#31836)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-10 17:45:16 +00:00
Michael Stanclift
e09f9f885e Fix alt text modal styling (#31844) 2024-09-10 17:33:55 +00:00
Matt Jankowski
0c3c06f7cc Remove vendor prefix from mobile-web-app-capable meta tag (#31845) 2024-09-10 17:32:58 +00:00
Claire
4ffaced8bc Second attempt at disabling Codecov annotations (#31841) 2024-09-10 14:00:23 +00:00
Matt Jankowski
c4b09d684e Extract method for account-referencing in CLI prune task (#31824) 2024-09-10 13:23:55 +00:00
Matt Jankowski
da07adfe6c Add CustomEmoji.enabled scope (#31830) 2024-09-10 13:21:40 +00:00
Eugen Rochko
e0c27a5047 Add ability to manage which websites can credit you in link previews (#31819) 2024-09-10 12:00:40 +00:00
Eugen Rochko
3929e3c6d2 Change design of hide media button in web UI (#31807) 2024-09-10 09:29:17 +00:00
github-actions[bot]
5260233b81 New Crowdin Translations (automated) (#31835)
Co-authored-by: GitHub Actions <noreply@github.com>
2024-09-10 09:22:49 +00:00
Matt Jankowski
5b995143f1 Use with_options for shared Account validation option value (#31827) 2024-09-10 08:03:45 +00:00
renovate[bot]
9ea710e543 Update dependency oj to v3.16.6 (#31831)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-10 07:59:18 +00:00
Claire
592a7af27f Fix translatable source string using “silenced” instead of “limited” (#31822) 2024-09-09 19:57:52 +00:00
Matt Jankowski
d0ab94c4d2 Add FeaturedTag coverage, use pick in model (#31828) 2024-09-09 19:57:19 +00:00
Claire
1436db389e Merge pull request #2839 from ClearlyClaire/glitch-soc/merge-upstream
Merge upstream changes up to 2caa3f365d
2024-09-09 20:02:04 +02:00
Claire
441af2632d Merge commit '2caa3f365ded73be17b623177967110e66f14061' into glitch-soc/merge-upstream 2024-09-09 18:22:41 +02:00
Eugen Rochko
a021dee642 Change labels on thread indicators in web UI (#31806) 2024-09-09 15:28:54 +00:00
github-actions[bot]
2caa3f365d New Crowdin Translations (automated) (#31800)
Co-authored-by: GitHub Actions <noreply@github.com>
2024-09-09 12:38:43 +00:00
renovate[bot]
1d03570080 Update dependency postcss-preset-env to v10.0.3 (#31821)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-09 11:16:09 +00:00
Mike Dalessio
a0ea2fa3b0 Change fetch link card service to parse as HTML5 (#31814) 2024-09-09 10:59:42 +00:00
renovate[bot]
9d9901cc5b Update peter-evans/create-pull-request action to v7 (#31818)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-09 08:43:12 +00:00
Matt Jankowski
e6969cf4e4 Add method for media-referencing status in AccountStatusCleanupPolicy (#31798) 2024-09-09 08:33:51 +00:00
renovate[bot]
1f13b87567 Update dependency pg to v1.5.8 (#31795)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-09 08:31:13 +00:00
Matt Jankowski
c6a0768fe5 Use shared system spec helper methods (#31784) 2024-09-09 08:01:26 +00:00
Mike Dalessio
82161d8ae5 Change Account::Field parsing to use HTML5::DocumentFragment (#31813) 2024-09-08 18:56:18 +00:00
Mike Dalessio
afa2e257e4 Change verify link service to use CSS selectors instead of a complex XPath query (#31815) 2024-09-08 18:50:22 +00:00
Mike Dalessio
10143d053a Change some instances of Nokogiri HTML4 parsing to HTML5 (#31812) 2024-09-08 18:41:37 +00:00
Claire
9dcc6808d6 Merge pull request #2837 from ClearlyClaire/glitch-soc/merge-upstream
Merge upstream changes up to b716248fc5
2024-09-07 10:16:46 +02:00
Claire
5c97ccf939 Merge commit 'b716248fc5bde4dc47b8104d092d092d87c50f1a' into glitch-soc/merge-upstream 2024-09-06 20:10:53 +02:00
Claire
af6ca96a4e Fix tests in glitch-soc 2024-09-06 20:00:19 +02:00
Claire
29124990a2 Merge commit '7335a43b6dac0e82c305ce4dec9db4da114c769e' into glitch-soc/merge-upstream
Conflicts:
- `app/helpers/application_helper.rb`:
  Upstream reworked how CSS classes for the document's body are computed.
  Slight conflict due to glitch-soc's different theming system.
  Updated as upstream did.
2024-09-06 19:25:31 +02:00
Claire
b716248fc5 Add link to /admin/roles in moderation interface when changing someone's role (#31791) 2024-09-06 17:21:49 +00:00
Matt Jankowski
7335a43b6d Use async count in admin dashboard (#30606) 2024-09-06 16:52:35 +00:00
Matt Jankowski
0a433d08fb Move shares/modal body class to layout (#31789) 2024-09-06 16:46:55 +00:00
Matt Jankowski
4f81ad2494 Add coverage for media#player, move body class to view (#31790) 2024-09-06 16:46:25 +00:00
Matt Jankowski
b530fc5267 Update rails to version 7.1.4 (#31563) 2024-09-06 15:22:35 +00:00
Emelia Smith
c88ba523ee Fix sort order of moderation notes on Reports and Accounts (#31528) 2024-09-06 14:58:36 +00:00
Matt Jankowski
a9d0b48b65 Set "admin" body class from admin nested layout (#31269) 2024-09-06 13:58:46 +00:00
Emelia Smith
fd7fc7bdc3 Disable actions on reports that have already been taken (#31773) 2024-09-06 12:50:30 +00:00
Claire
1fed11cfa7 Target firefox all the way back to Firefox 78 (#31782) 2024-09-06 12:33:38 +00:00
Claire
ebf09328d4 Disable codecov github annotations (#31783) 2024-09-06 10:58:53 +00:00
Matt Jankowski
6b6a80b407 Remove body_as_json in favor of built-in response.parsed_body for JSON response specs (#31749) 2024-09-06 09:58:46 +00:00
Matt Jankowski
be77a1098b Extract Account::AUTOMATED_ACTOR_TYPES for "bot" actor_type values (#31772) 2024-09-06 07:49:38 +00:00
github-actions[bot]
cc4865193a New Crowdin Translations (automated) (#31781)
Co-authored-by: GitHub Actions <noreply@github.com>
2024-09-06 07:38:08 +00:00
renovate[bot]
60182db0ca Update dependency tzinfo-data to v1.2024.2 (#31780)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-06 07:30:53 +00:00
Claire
4cd74585ae Merge pull request #2836 from ClearlyClaire/glitch-soc/merge-upstream
Merge upstream changes up to 5acec087ca
2024-09-05 22:56:10 +02:00
Matt Jankowski
7efe0bde9d Add have_http_link_header matcher and set header values as strings (#31010) 2024-09-05 20:05:38 +00:00
Matt Jankowski
09017dd8f0 Add worker spec for annual report worker (#31778) 2024-09-05 19:51:17 +00:00
Michael Stanclift
db6b1fe8fb [Glitch] Fix radio checkbox visibility in Report dialogs
Port b4b639ee4a to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
2024-09-05 20:40:31 +02:00
Eugen Rochko
cb324b5d7c [Glitch] Change design of unread conversations in web UI
Port ec4c49082e to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
2024-09-05 20:40:04 +02:00
Claire
1a0ef0c526 Merge commit '5acec087caed4a2fdf0fd8ed11f891222496f321' into glitch-soc/merge-upstream 2024-09-05 20:36:25 +02:00
Matt Jankowski
5acec087ca Simplify basic presence validations (#29664) 2024-09-05 15:36:05 +00:00
Eugen Rochko
bc435c63bd Change width of columns in advanced web UI (#31762) 2024-09-05 14:57:53 +00:00
Matt Jankowski
850478dc14 Use conflicted configuration for renovate rebase strategy (#31770) 2024-09-05 14:41:14 +00:00
Matt Jankowski
d58faa2018 Remove references to deprecated Import model (#31759) 2024-09-05 14:07:17 +00:00
David Roetzel
f85694acfd Add credentials to redis sentinel configuration (#31768) 2024-09-05 14:06:58 +00:00
Michael Stanclift
b4b639ee4a Fix radio checkbox visibility in Report dialogs (#31752) 2024-09-05 12:34:13 +00:00
Matt Jankowski
e820cc30b8 Convert invites controller spec to system/request specs (#31755) 2024-09-05 11:54:27 +00:00
renovate[bot]
5b1ae15a36 Update docker.io/ruby Docker tag to v3.3.5 (#31758)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-05 11:06:05 +00:00
Matt Jankowski
8fd3e37747 Update parser and rubocop gems (#31760) 2024-09-05 10:20:27 +00:00
renovate[bot]
bd8cd0c6e7 Update dependency cssnano to v7.0.6 (#31757)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-05 09:50:38 +00:00
James May
f9712fad1b Direct link to each authorized_application entry with html anchor (#31677)
Co-authored-by: Matt Jankowski <matt@jankowski.online>
2024-09-05 09:48:42 +00:00
Matt Jankowski
ba9fd1c32e Add coverage for Account#prepare_contents callback (#31748) 2024-09-05 09:48:33 +00:00
Eugen Rochko
b265a654d7 Fix wrong width on content warnings and filters in web UI (#31761) 2024-09-05 09:46:11 +00:00
github-actions[bot]
eb23d9f0f6 New Crowdin Translations (automated) (#31765)
Co-authored-by: GitHub Actions <noreply@github.com>
2024-09-05 09:40:38 +00:00
Eugen Rochko
ec4c49082e Change design of unread conversations in web UI (#31763) 2024-09-05 09:39:59 +00:00
David Roetzel
7d91723f05 Support REDIS_SENTINEL_PORT variables (#31767) 2024-09-05 09:26:49 +00:00
Claire
5a1d7db309 Merge pull request #2835 from ClearlyClaire/glitch-soc/merge-upstream
Merge upstream changes up to fe04291af4
2024-09-04 23:01:53 +02:00
Matt Jankowski
4d5c91e99a Remove before block in spec with TODOs which have been TO-DONE already (#31754) 2024-09-04 19:51:40 +00:00
Matt Jankowski
4678473e54 Add AnnualReport::Source#report_statuses method for subclasses to use (#31753) 2024-09-04 19:50:33 +00:00
Claire
cb1eaa10f2 Fix glitch-soc-only tests 2024-09-04 20:07:23 +02:00
Claire
1fb31ad9b1 [Glitch] Fix display name being displayed instead of domain in remote reports
Port 585e369e0b to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
2024-09-04 19:43:21 +02:00
Claire
1d86377ba9 [Glitch] Fix all notification types being stored without filtering when polling
Port fab29ebbe8 to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
2024-09-04 19:42:45 +02:00
Claire
5a55180b95 Merge commit 'fe04291af46d7cb9d3439fa73739b2ffb2b53d72' into glitch-soc/merge-upstream
Conflicts:
- `spec/lib/sanitize/config_spec.rb`:
  Upstream rewrote top-level `describe` calls to `RSpec.describe`, and
  glitch-soc had differences in the first few tests because of the wider
  subset of HTML it accepts.
  Changed `describe` to `RSpec.describe` as upstream did, keeping
  glitch-soc's tests.
2024-09-04 19:38:52 +02:00
Claire
559958f8c5 Fix email language when recipient has no selected locale (#31747) 2024-09-04 17:35:40 +00:00
Matt Jankowski
e1b5f3fc6f Use response.parsed_body for html response checks (#31750) 2024-09-04 17:29:05 +00:00
Matt Jankowski
fe04291af4 Use more accurate beginning/ending times in annual report source (#31751) 2024-09-04 17:19:53 +00:00
David Roetzel
ef2bc8ea26 Add redis sentinel support to ruby part of code (#31744) 2024-09-04 14:10:45 +00:00
Emelia Smith
9ba81eae3e Streaming: Improve Redis connection options handling (#31623) 2024-09-04 14:10:26 +00:00
Claire
585e369e0b Fix display name being displayed instead of domain in remote reports (#31613) 2024-09-04 13:43:08 +00:00
Claire
fab29ebbe8 Fix all notification types being stored without filtering when polling (#31745) 2024-09-04 13:28:16 +00:00
Claire
1fcffa573c Fix 500 error in GET /api/v2_alpha/notifications when there are no notifications to return (#31746) 2024-09-04 12:54:15 +00:00
Claire
ee55d20fd5 Allow POST /oauth/revoke through CORS (#31743) 2024-09-04 10:46:28 +00:00
renovate[bot]
36710aec8b Update dependency postcss to v8.4.45 (#31742)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-04 09:57:28 +00:00
renovate[bot]
7fb8834dd7 Update dependency pino-http to v10.3.0 (#31721)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-04 09:29:14 +00:00
renovate[bot]
44fd0803ce Update dependency pino to v9.4.0 (#31720)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-04 09:27:12 +00:00
renovate[bot]
d8bd9ef190 Update eslint (non-major) (#31684)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-04 09:25:25 +00:00
renovate[bot]
ffe29ce417 Update dependency shoulda-matchers to v6.4.0 (#31731)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-04 08:58:28 +00:00
Matt Jankowski
58df00f04d Extract method for self-referencing records in AccountStatusCleanupPolicy (#31244) 2024-09-04 08:52:37 +00:00
github-actions[bot]
1c17dca6d9 New Crowdin Translations (automated) (#31741)
Co-authored-by: GitHub Actions <noreply@github.com>
2024-09-04 08:42:36 +00:00
renovate[bot]
393a5504e5 Update dependency ruby to v3.3.5 (#31719)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-04 08:25:37 +00:00
renovate[bot]
2c6131c9a1 Update dependency test-prof to v1.4.2 (#31733)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-04 08:23:15 +00:00
renovate[bot]
3553d6c36f Update dependency aws-sdk-s3 to v1.160.0 (#31735)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-04 08:23:00 +00:00
renovate[bot]
612802b9e5 Update dependency sass to v1.78.0 (#31739)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-04 08:22:44 +00:00
Michael Stanclift
a24049db30 Fix Corepack prompt on Devcontainer (#31729) 2024-09-04 08:20:46 +00:00
Matt Jankowski
14af5b47ac Add coverage for model normalizations (#31734) 2024-09-04 05:12:40 +00:00
Matt Jankowski
9ed1aab9b7 Remove accidental matcher debug code (#31732) 2024-09-04 05:12:35 +00:00
Matt Jankowski
f1003b2560 Enable "zero monkey patching" mode in RSpec (#31614) 2024-09-04 05:12:25 +00:00
Claire
664dfa69b2 Merge pull request #2834 from ClearlyClaire/glitch-soc/merge-upstream
Merge upstream changes up to c9ea91f868
2024-09-03 23:26:20 +02:00
Christian Schmidt
8e3c47aff5 [Glitch] frequentlyUsedLanguages not updated correctly
Port 8adf67f2db to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
2024-09-03 21:55:32 +02:00
Claire
663cebbe3b [Glitch] Fix radio buttons styling in web UI
Port 0437dd9e77 to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
2024-09-03 21:54:41 +02:00
Claire
fef055db96 Merge commit 'c9ea91f8683cd5c0cfac14071a17e3956ac6d3b0' into glitch-soc/merge-upstream
Conflicts:
- `spec/requests/api/v1/timelines/tag_spec.rb`:
  Upstream refactored this file, while we had a change to switch a default setting.
  Updated as upstream did.
- `spec/views/statuses/show.html.haml_spec.rb`:
  Upstream refactored this file, while we stubbed different methods.
  Updated as upstream did, and updated the stubs accordingly.
2024-09-03 21:51:53 +02:00
Matt Jankowski
c9ea91f868 Add coverage for api/v1/annual_reports area (#31730) 2024-09-03 16:10:48 +00:00
zunda
8c928faff3 Refresh Heroku related thingy for heroku-24 stack (#31135) 2024-09-03 16:03:00 +00:00
Christian Schmidt
8adf67f2db frequentlyUsedLanguages not updated correctly (#31386) 2024-09-03 15:55:13 +00:00
Matt Jankowski
19849eb91d Skip paperclip spoof detector unless opted into attachment processing specs (#31454) 2024-09-03 15:39:19 +00:00
Matt Jankowski
69dbc23038 Only enable chewy in search-tagged specs (#30583) 2024-09-03 15:38:38 +00:00
Matt Jankowski
7c26e5e4a1 Add Reviewable model concern (#31152) 2024-09-03 15:37:45 +00:00
Matt Jankowski
2f0d0fc127 Add coverage for CLI::Accounts#fix_duplications task (#30639) 2024-09-03 15:36:59 +00:00
Matt Jankowski
e1fa456c7c Add have_cacheable_headers matcher for responses (#31727) 2024-09-03 15:35:19 +00:00
Matt Jankowski
490bdb7944 Add coverage for StatusesHelper#media_summary method (#31726) 2024-09-03 15:34:09 +00:00
Matt Jankowski
4682804448 Fix Rails/ReversibleMigration cop for remove_index (#30832) 2024-09-03 15:32:22 +00:00
Matt Jankowski
8922786ef4 Fix RSpec/LetSetup cop in api/v1/timelines/tag spec (#30796) 2024-09-03 15:32:12 +00:00
Matt Jankowski
67faaf5557 Simplify account model username presence validation spec (#31013) 2024-09-03 15:30:57 +00:00
Matt Jankowski
fcb83be8b2 Improve coverage specificity for Webhook enable/disable/secret specs (#31194) 2024-09-03 15:30:13 +00:00
Matt Jankowski
928390c2ba Convert admin/settings controller specs to system specs (#31548) 2024-09-03 15:29:32 +00:00
Matt Jankowski
ef4920c6c9 Pull out https/hostname setup for request specs to shared config (#31622) 2024-09-03 15:28:57 +00:00
Matt Jankowski
dc2f67f69b Remove fuubar gem and custom rspec --format setting (#30594) 2024-09-03 15:24:31 +00:00
Matt Jankowski
79b1841805 Disable without_verify_partial_doubles in statuses/show view spec (#29132) 2024-09-03 15:23:57 +00:00
Matt Jankowski
5b595b8a5a Remove usage of assigns in controller specs (#30195) 2024-09-03 15:23:16 +00:00
Claire
ae363f0555 Fix spacing between icons and labels in settings/admin interface (#31728) 2024-09-03 14:43:34 +00:00
renovate[bot]
97bb8df1c1 Update dependency rspec-rails to v7.0.1 (#31695)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-03 14:32:59 +00:00
Claire
ea0d691e19 Add GET /api/v2_alpha/notifications/:group_key/accounts (#31725) 2024-09-03 14:32:26 +00:00
Matt Jankowski
c9641c8070 Remove un-needed edge case sort condition in languages helper (#31724) 2024-09-03 13:19:48 +00:00
Matt Jankowski
219458d7d4 Convert tags controller spec to system and request specs (#31708) 2024-09-03 13:18:53 +00:00
Claire
0437dd9e77 Fix radio buttons styling in web UI (#31723) 2024-09-03 11:37:09 +00:00
Claire
c461a6ab2f Merge pull request #2833 from ClearlyClaire/glitch-soc/merge-upstream
Merge upstream changes up to 611533cd12
2024-09-03 13:05:14 +02:00
Claire
e9adba60af [Glitch] Fix not being able to load more notifications after trimming
Port c1795ee963 to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
2024-09-03 12:13:19 +02:00
Claire
ac4002fe08 Merge commit '611533cd12059d365ca0267342b750e615637bd4' into glitch-soc/merge-upstream 2024-09-03 12:12:23 +02:00
renovate[bot]
611533cd12 Update dependency json-schema to v5 (#31499)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-03 09:53:44 +00:00
Matt Jankowski
4819fc72ee Remove config/secrets.yml file (#31562) 2024-09-03 09:13:54 +00:00
Matt Jankowski
31c00108a4 Add first pass coverage for AnnualReport class (#31704) 2024-09-03 09:05:26 +00:00
Matt Jankowski
2a244e2fdb Remove unused merge_context helper (#31703) 2024-09-03 08:59:37 +00:00
renovate[bot]
3efe98aa95 Update libretranslate/libretranslate Docker tag to v1.6.0 (#31687)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-03 08:55:24 +00:00
Matt Jankowski
b8957241af Add coverage for JsonLdHelper#uri_from_bearcap method (#31700) 2024-09-03 08:41:11 +00:00
Matt Jankowski
25bbb01666 Remove unused helper method in spec (#31699) 2024-09-03 08:04:22 +00:00
Matt Jankowski
48379e62e4 Remove unused User#inactive_message method (#31698) 2024-09-03 08:04:00 +00:00
Matt Jankowski
406b8211f5 Remove unused Mention#active? method (#31697) 2024-09-03 08:03:25 +00:00
Matt Jankowski
24a0b20408 Use body_as_json directly instead of via local var assignment (#31696) 2024-09-03 08:03:08 +00:00
github-actions[bot]
e5155c50fd New Crowdin Translations (automated) (#31716)
Co-authored-by: GitHub Actions <noreply@github.com>
2024-09-03 08:02:08 +00:00
renovate[bot]
754baf00c0 Update dependency inline_svg to v1.10.0 (#31717)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-03 08:01:12 +00:00
renovate[bot]
5f7a395848 Update dependency rspec-rails to v7 (#31710)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-03 08:00:52 +00:00
Christian Schmidt
a5bbe83dfd media_ids is an array of strings (#31709) 2024-09-02 20:18:09 +00:00
Claire
c1795ee963 Fix not being able to load more notifications after trimming (#31652) 2024-09-02 20:14:04 +00:00
Claire
ec3b81fced Merge pull request #2832 from ClearlyClaire/glitch-soc/merge-upstream
Merge upstream changes up to 491033c86c
2024-09-02 21:28:13 +02:00
Claire
402c1e116d Merge commit '491033c86cc9c29302bfe68cc94dabad82ded4cc' into glitch-soc/merge-upstream 2024-09-02 17:43:10 +02:00
Christian Schmidt
491033c86c Reject status creation with invalid media_ids parameter (#31681) 2024-09-02 15:30:48 +00:00
Matt Jankowski
40f993b3a0 Use built-in response.parsed_body for JSON response specs (#31674) 2024-09-02 14:25:21 +00:00
David Roetzel
388d5473e1 Refactor (ruby) redis configuration (#31694) 2024-09-02 14:19:55 +00:00
Claire
a23b3747ac Fix N+1s in grouped notifications (#31638) 2024-09-02 09:56:00 +00:00
renovate[bot]
fc870c7e5a Update dependency postcss to v8.4.44 (#31691)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-02 09:35:43 +00:00
Matt Jankowski
5439af3276 Bump Bundler/Ruby versions in lockfile, misc gem version bumps (#31666) 2024-09-02 08:46:50 +00:00
renovate[bot]
d1cca521e1 Update devDependencies (non-major) (#31686)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-02 08:36:56 +00:00
renovate[bot]
25d5e19b83 Update DefinitelyTyped types (non-major) (#31683)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-02 08:35:51 +00:00
renovate[bot]
478155b015 Update dependency postcss to v8.4.43 (#31676)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-02 08:35:28 +00:00
github-actions[bot]
2f2b98c8cb New Crowdin Translations (automated) (#31671)
Co-authored-by: GitHub Actions <noreply@github.com>
2024-09-02 08:35:09 +00:00
renovate[bot]
1701b1fc80 Update dependency axios to v1.7.7 (#31670)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-02 08:26:43 +00:00
Claire
b06907e4e4 Rewrite favourite modal as a Typescript functional component, use revamped design (#2831) 2024-08-31 18:41:25 +02:00
Claire
a859b0c7e7 Merge pull request #2829 from ClearlyClaire/glitch-soc/merge-upstream
Merge upstream changes up to 02633d6ebb
2024-08-31 18:41:10 +02:00
Claire
5f8f8cc98f Fix crowdin upload workflow not running on glitch-soc (#2830) 2024-08-31 17:33:06 +02:00
Claire
ee2c38fcb8 [Glitch] Change background color of notifications on private messages
Port 3ddeaca863 to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
2024-08-31 16:10:55 +02:00
Claire
4f1da814a8 [Glitch] Fix inconsistencies between code and notification source translation strings
Port 35538fe694 to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
2024-08-31 16:10:26 +02:00
Claire
6f35e93f72 Merge commit '02633d6ebbe944a8769c8f2229fa9e0d6c7d1142' into glitch-soc/merge-upstream 2024-08-31 16:06:04 +02:00
renovate[bot]
02633d6ebb Update dependency jsdom to v25 (#31578)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-30 09:48:54 +00:00
renovate[bot]
3655e3204f Update dependency @babel/runtime to v7.25.6 (#31649)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-30 09:46:53 +00:00
Matt Jankowski
85e8d1f285 Use rails configuration storage for paperclip path (#31651) 2024-08-30 09:46:09 +00:00
Claire
3ddeaca863 Change background color of notifications on private messages (#31657) 2024-08-30 09:42:48 +00:00
Claire
35538fe694 Fix inconsistencies between code and notification source translation strings (#31658) 2024-08-30 09:37:39 +00:00
Matt Jankowski
1ee1c329cc Convert admin/announcements controller spec to system spec (#31655) 2024-08-30 07:15:28 +00:00
github-actions[bot]
92eba9096b New Crowdin Translations (automated) (#31656)
Co-authored-by: GitHub Actions <noreply@github.com>
2024-08-30 07:12:56 +00:00
renovate[bot]
b0a30967d7 Update dependency thor to v1.3.2 (#31654)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-30 07:05:39 +00:00
Claire
ad0a28a8bf Add grouped_types parameter to allow clients to restrict which notifications types get grouped (#31594) 2024-08-29 12:39:07 +00:00
Matt Jankowski
662f87dbe9 Use MediaAttachment.supported_mime_types method where relevant (#31635) 2024-08-29 08:52:29 +00:00
Matt Jankowski
02585d8789 Convert media controller spec to request spec (#31634) 2024-08-29 08:46:00 +00:00
Matt Jankowski
b9269c8d38 Convert admin/reset controller spec to system spec (#31643) 2024-08-29 08:38:17 +00:00
github-actions[bot]
5d725b2c12 New Crowdin Translations (automated) (#31647)
Co-authored-by: GitHub Actions <noreply@github.com>
2024-08-29 08:30:39 +00:00
renovate[bot]
4f4be65452 Update dependency @rails/ujs to v7.1.400 (#31628)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-29 08:30:09 +00:00
renovate[bot]
8bd8238d41 Update dependency selenium-webdriver to v4.24.0 (#31633)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-29 08:20:02 +00:00
renovate[bot]
099657be9a Update dependency flatware-rspec to v2.3.3 (#31636)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-29 08:19:38 +00:00
renovate[bot]
dc7412c15f Update opentelemetry-ruby (non-major) (#31646)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-29 08:18:41 +00:00
Emelia Smith
f6fb9b75db Streaming: Fix BIND IPv6 handling (#31624) 2024-08-28 10:40:37 +00:00
HolgerHuo
3c412578c9 update: max_media_attachments follow server advertised value (#31616) 2024-08-28 09:28:48 +00:00
github-actions[bot]
26d6d291c3 New Crowdin Translations (automated) (#31627)
Co-authored-by: GitHub Actions <noreply@github.com>
2024-08-28 08:59:15 +00:00
Matt Jankowski
0ef636f72d Convert shares controller spec to system spec (#31619) 2024-08-28 07:58:40 +00:00
Matt Jankowski
00586d27cb Convert instance_actor controller spec to request spec (#31621) 2024-08-28 07:56:07 +00:00
Claire
d46bf54925 Merge pull request #2828 from ClearlyClaire/glitch-soc/merge-upstream
Merge upstream changes up to 04f0468016
2024-08-27 22:56:55 +02:00
Claire
435ff8e550 [Glitch] Add ability for admins to force grouped notifications in web UI
Port c73868cd78 to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
2024-08-27 20:33:50 +02:00
Eugen Rochko
e15fad27bc [Glitch] Change design of boost modal in web UI
Port 29b9642b31 to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
2024-08-27 20:33:50 +02:00
Emelia Smith
d3629d191f [Glitch] Add quick links to Administration and Moderation Reports from Web UI
Port d820c0883d to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
2024-08-27 20:16:52 +02:00
Claire
94d8cdc494 Merge commit '04f0468016b450ace8e0ce707b4c21aa18b51262' into glitch-soc/merge-upstream 2024-08-27 20:00:07 +02:00
Claire
51311f97fb Merge pull request #2827 from ClearlyClaire/glitch-soc/fixes/report-old-notifications-target
Fix target account link in old report notifications
2024-08-27 19:09:20 +02:00
Claire
33ad67fcea Fix target account link in old report notifications 2024-08-27 18:11:14 +02:00
Renaud Chaput
04f0468016 Fix streaming image with Docker Compose (#31615) 2024-08-27 16:05:19 +00:00
Matt Jankowski
6eba057e64 Cache rspec persistence file between CI runs (#31065) 2024-08-27 15:23:08 +00:00
Matt Jankowski
3959f36d19 Add checks about response body content to admin/dash spec (#30716) 2024-08-27 14:59:56 +00:00
Claire
c73868cd78 Add ability for admins to force grouped notifications in web UI (#31610) 2024-08-27 14:55:51 +00:00
Renaud Chaput
da42e9d446 Fix typo in Compose file (#31612) 2024-08-27 12:51:34 +00:00
renovate[bot]
c513fdb9c5 Update dependency pundit to v2.4.0 (#31598)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-27 09:51:29 +00:00
Matt Jankowski
48f4e5444d Convert media_proxy controller spec to request spec (#31600) 2024-08-27 09:44:16 +00:00
Emelia Smith
4118688fba Streaming: Refactor move database and redis logic into separate files (#31567) 2024-08-27 08:40:04 +00:00
Matt Jankowski
a7f8417795 Convert "CSV export" settings controller specs to request specs (#31601) 2024-08-27 08:12:39 +00:00
Matt Jankowski
38a3466741 Convert api/oembed controller spec to request spec (#31605) 2024-08-27 07:55:25 +00:00
github-actions[bot]
0e7c88aa6d New Crowdin Translations (automated) (#31609)
Co-authored-by: GitHub Actions <noreply@github.com>
2024-08-27 07:54:58 +00:00
Matt Jankowski
c09d232ee3 Convert api/web/settings controller spec to request spec (#31606) 2024-08-27 07:42:35 +00:00
Matt Jankowski
14d7fe05d0 Use describe instead of context in top-level spec declaration (#31607) 2024-08-27 07:40:18 +00:00
Claire
11014ac414 Merge pull request #2826 from ClearlyClaire/glitch-soc/merge-upstream
Merge upstream changes up to e38ce3beb7
2024-08-26 21:08:23 +02:00
Eugen Rochko
29b9642b31 Change design of boost modal in web UI (#31555) 2024-08-26 17:12:17 +00:00
Claire
8f678a3cf4 Fix tests for glitch-soc 2024-08-26 19:08:42 +02:00
Claire
2379bfe3ea [Glitch] Fix spurious loading bar middleware usage
Port e38ce3beb7 to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
2024-08-26 18:54:27 +02:00
Claire
11b8017b45 Merge commit 'e38ce3beb7b83f43ef6e6f144c19b186c393910c' into glitch-soc/merge-upstream 2024-08-26 18:52:33 +02:00
Emelia Smith
d820c0883d Add quick links to Administration and Moderation Reports from Web UI (#24838) 2024-08-26 16:42:46 +00:00
Claire
e38ce3beb7 Fix spurious loading bar middleware usage (#31592) 2024-08-26 16:38:34 +00:00
Matt Jankowski
4c2534d12e Convert "static page" controller specs to system specs (#31599) 2024-08-26 15:53:48 +00:00
Matt Jankowski
963c1309a4 Cache asset compilation results on CI (#30868) 2024-08-26 15:20:05 +00:00
Matt Jankowski
dbe0ee8a81 Convert emojis controller spec to request spec (#31597)
Co-authored-by: Claire <claire.github-309c@sitedethib.com>
2024-08-26 15:00:05 +00:00
Matt Jankowski
5172d84946 Convert manifest controller spec to request spec (#31596) 2024-08-26 14:37:23 +00:00
Matt Jankowski
36ccdcc9e1 Convert "custom css" controller spec to request spec (#31595) 2024-08-26 14:36:31 +00:00
Matt Jankowski
641ae6a2cf Convert health check endpoint controller spec to request spec (#31565) 2024-08-26 12:17:35 +00:00
renovate[bot]
e3516fa8cf Update Yarn to v4.4.1 (#31575)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-26 11:01:09 +00:00
Claire
a3c33c77ab Fix typo in changelog (#31591) 2024-08-26 11:01:00 +00:00
renovate[bot]
3e1bd9756e Update dependency brakeman to v6.2.1 (#31553)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-26 08:50:40 +00:00
renovate[bot]
ccc0aea767 Update dependency bundler-audit to v0.9.2 (#31558)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-26 08:48:04 +00:00
renovate[bot]
d0822a0e78 Update dependency test-prof to v1.4.1 (#31561)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-26 08:47:21 +00:00
renovate[bot]
0422a5c208 Update dependency axios to v1.7.5 (#31564)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-26 08:44:32 +00:00
Emelia Smith
c245a2044e Streaming: Refactor to use metrics.$name instead of destructuring (#31566) 2024-08-26 08:08:21 +00:00
Renaud Chaput
f9f4006a1b Update omniauth-rails_csrf_protection (#31552) 2024-08-26 07:51:21 +00:00
renovate[bot]
4cc589e533 Update dependency jsdom to v24.1.3 (#31577)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-26 07:35:53 +00:00
Matt Jankowski
a6df125303 Fix Rails/CompactBlank cop (#31581) 2024-08-26 07:35:33 +00:00
Matt Jankowski
bcc4b1078c Fix Rails/RootPathnameMethods cop (#31582) 2024-08-26 07:35:07 +00:00
renovate[bot]
5bcfe8d421 Update dependency @types/react to v18.3.4 (#31586)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-26 07:34:16 +00:00
renovate[bot]
a6906e045b Update devDependencies (non-major) (#31587)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-08-26 07:34:01 +00:00
github-actions[bot]
626d44b6c6 New Crowdin Translations (automated) (#31572)
Co-authored-by: GitHub Actions <noreply@github.com>
2024-08-26 07:25:39 +00:00
Claire
3bfa5ffe29 Update dependency rexml (#31590) 2024-08-26 07:21:39 +00:00
1678 changed files with 23962 additions and 15951 deletions

View File

@@ -1,6 +1,7 @@
[production]
defaults
> 0.2%
firefox >= 78
ios >= 15.6
not dead
not OperaMini all

View File

@@ -11,5 +11,8 @@ RUN apt-get update && \
export DEBIAN_FRONTEND=noninteractive && \
apt-get -y install --no-install-recommends libicu-dev libidn11-dev ffmpeg imagemagick libvips42 libpam-dev
# Disable download prompt for Corepack
ENV COREPACK_ENABLE_DOWNLOAD_PROMPT=0
# Move welcome message to where VS Code expects it
COPY .devcontainer/welcome-message.txt /usr/local/etc/vscode-dev-containers/first-run-notice.txt

View File

@@ -39,7 +39,7 @@
},
"onCreateCommand": "git config --global --add safe.directory ${containerWorkspaceFolder}",
"postCreateCommand": "COREPACK_ENABLE_DOWNLOAD_PROMPT=0 bin/setup",
"postCreateCommand": "bin/setup",
"waitFor": "postCreateCommand",
"customizations": {

View File

@@ -69,7 +69,7 @@ services:
hard: -1
libretranslate:
image: libretranslate/libretranslate:v1.5.7
image: libretranslate/libretranslate:v1.6.1
restart: unless-stopped
volumes:
- lt-data:/home/libretranslate/.local

View File

@@ -333,7 +333,7 @@ module.exports = defineConfig({
],
parserOptions: {
project: true,
projectService: true,
tsconfigRootDir: __dirname,
},

2
.github/codecov.yml vendored
View File

@@ -9,3 +9,5 @@ coverage:
default:
# GitHub status check is not blocking
informational: true
github_checks:
annotations: false

View File

@@ -7,6 +7,7 @@
':prConcurrentLimitNone', // Remove limit for open PRs at any time.
':prHourlyLimit2', // Rate limit PR creation to a maximum of two per hour.
],
rebaseWhen: 'conflicted',
minimumReleaseAge: '3', // Wait 3 days after the package has been published before upgrading it
// packageRules order is important, they are applied from top to bottom and are merged,
// meaning the most important ones must be at the bottom, for example grouping rules

View File

@@ -0,0 +1,70 @@
name: Crowdin / Download translations (stable branches)
on:
workflow_dispatch:
permissions:
contents: write
pull-requests: write
jobs:
download-translations-stable:
runs-on: ubuntu-latest
if: github.repository == 'glitch-soc/mastodon'
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Increase Git http.postBuffer
# This is needed due to a bug in Ubuntu's cURL version?
# See https://github.com/orgs/community/discussions/55820
run: |
git config --global http.version HTTP/1.1
git config --global http.postBuffer 157286400
# Download the translation files from Crowdin
- name: crowdin action
uses: crowdin/github-action@v2
with:
config: crowdin-glitch.yml
upload_sources: false
upload_translations: false
download_translations: true
crowdin_branch_name: ${{ github.base_ref || github.ref_name }}
push_translations: false
create_pull_request: false
env:
CROWDIN_PROJECT_ID: ${{ vars.CROWDIN_PROJECT_ID }}
CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }}
# As the files are extracted from a Docker container, they belong to root:root
# We need to fix this before the next steps
- name: Fix file permissions
run: sudo chown -R runner:docker .
# This is needed to run the normalize step
- name: Set up Ruby environment
uses: ./.github/actions/setup-ruby
- name: Run i18n normalize task
run: bundle exec i18n-tasks normalize
# Create or update the pull request
- name: Create Pull Request
uses: peter-evans/create-pull-request@v7.0.5
with:
commit-message: 'New Crowdin translations'
title: 'New Crowdin Translations for ${{ github.base_ref || github.ref_name }} (automated)'
author: 'GitHub Actions <noreply@github.com>'
body: |
New Crowdin translations, automated with GitHub Actions
See `.github/workflows/crowdin-download.yml`
This PR will be updated every day with new translations.
Due to a limitation in GitHub Actions, checks are not running on this PR without manual action.
If you want to run the checks, then close and re-open it.
branch: i18n/crowdin/translations-${{ github.base_ref || github.ref_name }}
base: ${{ github.base_ref || github.ref_name }}
labels: i18n

View File

@@ -53,7 +53,7 @@ jobs:
# Create or update the pull request
- name: Create Pull Request
uses: peter-evans/create-pull-request@v6.0.5
uses: peter-evans/create-pull-request@v7.0.5
with:
commit-message: 'New Crowdin translations'
title: 'New Crowdin Translations (automated)'

View File

@@ -1,7 +1,6 @@
name: Crowdin / Upload translations
on:
merge_group:
push:
branches:
- 'main'
@@ -19,7 +18,7 @@ on:
jobs:
upload-translations:
runs-on: ubuntu-latest
if: github.repository == 'mastodon/mastodon'
if: github.repository == 'glitch-soc/mastodon'
steps:
- name: Checkout
@@ -32,7 +31,7 @@ jobs:
upload_sources: true
upload_translations: false
download_translations: false
crowdin_branch_name: main
crowdin_branch_name: ${{ github.base_ref || github.ref_name }}
env:
CROWDIN_PROJECT_ID: ${{ vars.CROWDIN_PROJECT_ID }}

View File

@@ -42,11 +42,24 @@ jobs:
with:
onlyProduction: 'true'
- name: Cache assets from compilation
uses: actions/cache@v4
with:
path: |
public/assets
public/packs
public/packs-test
tmp/cache/webpacker
key: ${{ matrix.mode }}-assets-${{ github.head_ref || github.ref_name }}-${{ github.sha }}
restore-keys: |
${{ matrix.mode }}-assets-${{ github.head_ref || github.ref_name }}-${{ github.sha }}
${{ matrix.mode }}-assets-${{ github.head_ref || github.ref_name }}
${{ matrix.mode }}-assets-main
${{ matrix.mode }}-assets
- name: Precompile assets
# Previously had set this, but it's not supported
# export NODE_OPTIONS=--openssl-legacy-provider
run: |-
./bin/rails assets:precompile
bin/rails assets:precompile
- name: Archive asset artifacts
run: |
@@ -137,6 +150,19 @@ jobs:
bin/rails db:setup
bin/flatware fan bin/rails db:test:prepare
- name: Cache RSpec persistence file
uses: actions/cache@v4
with:
path: |
tmp/rspec/examples.txt
key: rspec-persistence-${{ github.head_ref || github.ref_name }}-${{ github.sha }}
restore-keys: |
rspec-persistence-${{ github.head_ref || github.ref_name }}-${{ github.sha }}-${{ matrix.ruby-version }}
rspec-persistence-${{ github.head_ref || github.ref_name }}-${{ github.sha }}
rspec-persistence-${{ github.head_ref || github.ref_name }}
rspec-persistence-main
rspec-persistence
- run: bin/flatware rspec -r ./spec/flatware_helper.rb
- name: Upload coverage reports to Codecov

3
.gitignore vendored
View File

@@ -71,3 +71,6 @@ docker-compose.override.yml
# Ignore dotenv .local files
.env*.local
# Ignore local-only rspec configuration
.rspec-local

View File

@@ -1 +0,0 @@
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/app/.apt/lib/x86_64-linux-gnu:/app/.apt/usr/lib/x86_64-linux-gnu/mesa:/app/.apt/usr/lib/x86_64-linux-gnu/pulseaudio:/app/.apt/usr/lib/x86_64-linux-gnu/openblas-pthread

1
.rspec
View File

@@ -1,3 +1,2 @@
--color
--require spec_helper
--format Fuubar

View File

@@ -7,8 +7,13 @@ RSpec/Focus: # Require full spec run on CI
Exclude: []
Rails/Output: # Remove any `puts` debugging
inherit_mode:
merge:
- Include
Enabled: true
Exclude: []
Include:
- spec/**/*.rb
Rails/FindEach: # Using `each` could impact performance, use `find_each`
Enabled: true

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.65.0.
# using RuboCop version 1.66.1.
# 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
@@ -35,7 +35,6 @@ Rails/OutputSafety:
# Configuration parameters: AllowedVars.
Style/FetchEnvVar:
Exclude:
- 'app/lib/redis_configuration.rb'
- 'app/lib/translation_service.rb'
- 'config/environments/production.rb'
- 'config/initializers/2_limited_federation_mode.rb'
@@ -44,7 +43,6 @@ Style/FetchEnvVar:
- 'config/initializers/devise.rb'
- 'config/initializers/paperclip.rb'
- 'config/initializers/vapid.rb'
- 'lib/mastodon/redis_config.rb'
- 'lib/tasks/repo.rake'
# This cop supports safe autocorrection (--autocorrect).
@@ -93,7 +91,6 @@ Style/OptionalBooleanParameter:
- 'app/services/fetch_resource_service.rb'
- 'app/workers/domain_block_worker.rb'
- 'app/workers/unfollow_follow_worker.rb'
- 'lib/mastodon/redis_config.rb'
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: EnforcedStyle.

View File

@@ -1 +1 @@
3.3.4
3.3.5

10
Aptfile
View File

@@ -1,5 +1,5 @@
ffmpeg
libopenblas0-pthread
libpq-dev
libxdamage1
libxfixes3
libidn12
# for idn-ruby on heroku-24 stack
# use https://github.com/heroku/heroku-buildpack-activestorage-preview
# in place for ffmpeg and its dependent packages to reduce slag size

View File

@@ -2,7 +2,7 @@
All notable changes to this project will be documented in this file.
## [4.3.0] - UNRELEASED
## [4.3.0] - 2024-10-08
The following changelog entries focus on changes visible to users, administrators, client developers or federated software developers, but there has also been a lot of code modernization, refactoring, and tooling work, in particular by @mjankowski.
@@ -10,21 +10,25 @@ The following changelog entries focus on changes visible to users, administrator
- **Add confirmation interstitial instead of silently redirecting logged-out visitors to remote resources** (#27792, #28902, and #30651 by @ClearlyClaire and @Gargron)\
This fixes a longstanding open redirect in Mastodon, at the cost of added friction when local links to remote resources are shared.
- Fix ReDoS vulnerability on some Ruby versions ([GHSA-jpxp-r43f-rhvx](https://github.com/mastodon/mastodon/security/advisories/GHSA-jpxp-r43f-rhvx))
- Change `form-action` Content-Security-Policy directive to be more restrictive (#26897 and #32241 by @ClearlyClaire)
- Update dependencies
### Added
- **Add experimental server-side notification grouping** (#29889, #30576, #30685, #30688, #30707, #30776, #30779, #30781, #30440, #31062, #31098, #31076, #31111, #31123, #31223, #31214, #31224, #31299, #31325, #31347, #31304, #31326, #31384, #31403, #31433, #31509, #31486, and #31513 by @ClearlyClaire, @mgmn, and @renchap)\
- **Add server-side notification grouping** (#29889, #30576, #30685, #30688, #30707, #30776, #30779, #30781, #30440, #31062, #31098, #31076, #31111, #31123, #31223, #31214, #31224, #31299, #31325, #31347, #31304, #31326, #31384, #31403, #31433, #31509, #31486, #31513, #31592, #31594, #31638, #31746, #31652, #31709, #31725, #31745, #31613, #31657, #31840, #31610, #31929, #32089, #32085, #32243, #32179 and #32254 by @ClearlyClaire, @Gargron, @mgmn, and @renchap)\
Group notifications of the same type for the same target, so that your notifications no longer get cluttered by boost and favorite notifications as soon as a couple of your posts get traction.\
This is done server-side so that clients can efficiently get relevant groups without having to go through numerous pages of individual notifications.\
As part of this, the visual design of the entire notifications feature has been revamped.\
This feature is intended to eventually replace the existing notifications column, but for this first beta, users will have to enable it in the “Experimental features” section of the notifications column settings.\
The API is not final yet, but it consists of:
- a new `group_key` attribute to `Notification` entities
- `GET /api/v2_alpha/notifications`: https://docs.joinmastodon.org/methods/notifications_alpha/#get-grouped
- `GET /api/v2_alpha/notifications/:group_key`: https://docs.joinmastodon.org/methods/notifications_alpha/#get-notification-group
- `POST /api/v2_alpha/notifications/:group_key/dimsiss`: https://docs.joinmastodon.org/methods/notifications_alpha/#dismiss-group
- `GET /api/v2_alpha/notifications/:unread_count`: https://docs.joinmastodon.org/methods/notifications_alpha/#unread-group-count
- **Add notification policies, filtered notifications and notification requests** (#29366, #29529, #29433, #29565, #29567, #29572, #29575, #29588, #29646, #29652, #29658, #29666, #29693, #29699, #29737, #29706, #29570, #29752, #29810, #29826, #30114, #30251, #30559, #29868, #31008, #31011, #30996, #31149, #31220, #31222, #31225, #31242, #31262, #31250, #31273, #31310, #31316, #31322, #31329, #31324, #31331, #31343, #31342, #31309, #31358, #31378, #31406, #31256, #31456, #31419, #31457, #31508, #31540, and #31541 by @ClearlyClaire, @Gargron, @TheEssem, @mgmn, @oneiros, and @renchap)\
- `GET /api/v2/notifications`: https://docs.joinmastodon.org/methods/grouped_notifications/#get-grouped
- `GET /api/v2/notifications/:group_key`: https://docs.joinmastodon.org/methods/grouped_notifications/#get-notification-group
- `GET /api/v2/notifications/:group_key/accounts`: https://docs.joinmastodon.org/methods/grouped_notifications/#get-group-accounts
- `POST /api/v2/notifications/:group_key/dimsiss`: https://docs.joinmastodon.org/methods/grouped_notifications/#dismiss-group
- `GET /api/v2/notifications/:unread_count`: https://docs.joinmastodon.org/methods/grouped_notifications/#unread-group-count
- **Add notification policies, filtered notifications and notification requests** (#29366, #29529, #29433, #29565, #29567, #29572, #29575, #29588, #29646, #29652, #29658, #29666, #29693, #29699, #29737, #29706, #29570, #29752, #29810, #29826, #30114, #30251, #30559, #29868, #31008, #31011, #30996, #31149, #31220, #31222, #31225, #31242, #31262, #31250, #31273, #31310, #31316, #31322, #31329, #31324, #31331, #31343, #31342, #31309, #31358, #31378, #31406, #31256, #31456, #31419, #31457, #31508, #31540, #31541, #31723, #32062 and #32281 by @ClearlyClaire, @Gargron, @TheEssem, @mgmn, @oneiros, and @renchap)\
The old “Block notifications from non-followers”, “Block notifications from people you don't follow” and “Block direct messages from people you don't follow” notification settings have been replaced by a new set of settings found directly in the notification column.\
You can now separately filter or drop notifications from people you don't follow, people who don't follow you, accounts created within the past 30 days, as well as unsolicited private mentions, and accounts limited by the moderation.\
Instead of being outright dropped, notifications that you chose to filter are put in a separate “Filtered notifications” box that you can review separately without it clogging your main notifications.\
@@ -57,26 +61,35 @@ The following changelog entries focus on changes visible to users, administrator
- **Add timeline of public posts about a trending link** (#30381 and #30840 by @Gargron)\
You can now see public posts mentioning currently-trending articles from people who have opted into discovery features.\
This adds a new REST API endpoint: https://docs.joinmastodon.org/methods/timelines/#link
- **Add author highlight for news articles whose authors are on the fediverse** (#30398, #30670, #30521, and #30846 by @Gargron)\
- **Add author highlight for news articles whose authors are on the fediverse** (#30398, #30670, #30521, #30846, #31819, #31900 and #32188 by @Gargron, @mjankowski and @oneiros)\
This adds a mechanism to [highlight the author of news articles](https://blog.joinmastodon.org/2024/07/highlighting-journalism-on-mastodon/) shared on Mastodon.\
Articles hosted outside the fediverse can indicate a fediverse author with a meta tag:
```html
<meta name="fediverse:creator" content="username@domain" />
```
On the API side, this is represented by a new `authors` attribute to the `PreviewCard` entity: https://docs.joinmastodon.org/entities/PreviewCard/#authors\
Note that this feature is still work in progress and the tagging format and verification mechanisms may change in future releases.
Users can allow arbitrary domains to use `fediverse:creator` to credit them by visiting `/settings/verification`.\
This is federated as a new `attributionDomains` property in the `http://joinmastodon.org/ns` namespace, containing an array of domain names: https://docs.joinmastodon.org/spec/activitypub/#properties-used-1
- **Add in-app notifications for moderation actions and warnings** (#30065, #30082, and #30081 by @ClearlyClaire)\
In addition to email notifications, also notify users of moderation actions or warnings against them directly within the app, so they are less likely to miss important communication from their moderators.\
This adds the `moderation_warning` notification type to the REST API and streaming, with a new [`moderation_warning` attribute](https://docs.joinmastodon.org/entities/Notification/#moderation_warning).
- **Add domain information to profiles in web UI** (#29602 by @Gargron)\
Clicking the domain of a user in their profile will now open a tooltip with a short explanation about servers and federation.
- Add ability to reorder uploaded media before posting in web UI (#28456 by @Gargron)
- **Add support for Redis sentinel** (#31694, #31623, #31744, #31767, and #31768 by @ThisIsMissEm and @oneiros)\
See https://docs.joinmastodon.org/admin/scaling/#redis-sentinel
- **Add ability to reorder uploaded media before posting in web UI** (#28456 and #32093 by @Gargron)
- Add “A Mastodon update is available.” message on admin dashboard for non-bugfix updates (#32106 by @ClearlyClaire)
- Add ability to view alt text by clicking the ALT badge in web UI (#32058 by @Gargron)
- Add preview of followers removed in domain block modal in web UI (#32032 and #32105 by @ClearlyClaire and @Gargron)
- Add reblogs and favourites counts to statuses in ActivityPub (#32007 by @Gargron)
- Add moderation interface for searching hashtags (#30880 by @ThisIsMissEm)
- Add ability for admins to configure instance favicon and logo (#30040, #30208, #30259, #30375, #30734, #31016, and #30205 by @ClearlyClaire, @FawazFarid, @JasonPunyon, @mgmn, and @renchap)\
This is also exposed through the REST API: https://docs.joinmastodon.org/entities/Instance/#icon
- Add `api_versions` to `/api/v2/instance` (#31354 by @ClearlyClaire)\
Add API version number to make it easier for clients to detect compatible features going forward.\
See API documentation at https://docs.joinmastodon.org/entities/Instance/#api-versions
- Add quick links to Administration and Moderation Reports from Web UI (#24838 by @ThisIsMissEm)
- Add link to `/admin/roles` in moderation interface when changing someone's role (#31791 by @ClearlyClaire)
- Add recent audit log entries in federation moderation interface (#27386 by @ThisIsMissEm)
- Add profile setup to onboarding in web UI (#27829, #27876, and #28453 by @Gargron)
- Add prominent share/copy button on profiles in web UI (#27865 and #27889 by @ClearlyClaire and @Gargron)
@@ -113,17 +126,19 @@ The following changelog entries focus on changes visible to users, administrator
- Add support for multiple `redirect_uris` when creating OAuth 2.0 Applications (#29192 by @ThisIsMissEm)
- Add Interlingue and Interlingua to interface languages (#28630 and #30828 by @Dhghomon and @renchap)
- Add Kashubian, Pennsylvania Dutch, Vai, Jawi Malay, Mohawk and Low German to posting languages (#26024, #26634, #27136, #29098, #27115, and #27434 by @EngineerDali, @HelgeKrueger, and @gunchleoc)
- Add validations to `Web::PushSubscription` (#30540 and #30542 by @ThisIsMissEm)
- Add option to use native Ruby driver for Redis through `REDIS_DRIVER=ruby` (#30717 by @vmstan)
- Add support for libvips in addition to ImageMagick (#30090, #30590, #30597, #30632, #30857, #30869, and #30858 by @ClearlyClaire, @Gargron, and @mjankowski)\
- Add support for libvips in addition to ImageMagick (#30090, #30590, #30597, #30632, #30857, #30869, #30858 and #32104 by @ClearlyClaire, @Gargron, and @mjankowski)\
Server admins can now use libvips as a faster and lighter alternative to ImageMagick for processing user-uploaded images.\
This requires libvips 8.13 or newer, and needs to be enabled with `MASTODON_USE_LIBVIPS=true`.\
This is enabled by default in the official Docker images, and is intended to completely replace ImageMagick in the future.
- Add validations to `Web::PushSubscription` (#30540 and #30542 by @ThisIsMissEm)
- Add anchors to each authorized application in `/oauth/authorized_applications` (#31677 by @fowl2)
- Add active animation to header settings button (#30221, #30307, and #30388 by @daudix)
- Add OpenTelemetry instrumentation (#30130, #30322, #30353, and #30350 by @julianocosta89, @renchap, and @robbkidd)\
- Add OpenTelemetry instrumentation (#30130, #30322, #30353, #30350 and #31998 by @julianocosta89, @renchap, @robbkidd and @timetinytim)\
See https://docs.joinmastodon.org/admin/config/#otel for documentation
- Add API to get multiple accounts and statuses (#27871 and #30465 by @ClearlyClaire)\
This adds `GET /api/v1/accounts` and `GET /api/v1/statuses` to the REST API, see https://docs.joinmastodon.org/methods/accounts/#index and https://docs.joinmastodon.org/methods/statuses/#index
- Add support for CORS to `POST /oauth/revoke` (#31743 by @ClearlyClaire)
- Add redirection back to previous page after site upload deletion (#30141 by @FawazFarid)
- Add RFC8414 OAuth 2.0 server metadata (#29191 by @ThisIsMissEm)
- Add loading indicator and empty result message to advanced interface search (#30085 by @ClearlyClaire)
@@ -135,10 +150,12 @@ The following changelog entries focus on changes visible to users, administrator
- Add groundwork for annual reports for accounts (#28693 by @Gargron)\
This lays the groundwork for a “year-in-review”/“wrapped” style report for local users, but is currently not in use.
- Add notification email on invalid second authenticator (#28822 by @ClearlyClaire)
- Add date of account deletion in list of accounts in the admin interface (#25640 by @tribela)
- Add new emojis from `jdecked/twemoji` 15.0 (#28404 by @TheEssem)
- Add configurable error handling in attachment batch deletion (#28184 by @vmstan)\
This makes the S3 batch size configurable through the `S3_BATCH_DELETE_LIMIT` environment variable (defaults to 1000), and adds some retry logic, configurable through the `S3_BATCH_DELETE_RETRY` environment variable (defaults to 3).
- Add VAPID public key to instance serializer (#28006 by @ThisIsMissEm)
- Add support for serving JRD `/.well-known/host-meta.json` in addition to XRD host-meta (#32206 by @c960657)
- Add `nodeName` and `nodeDescription` to nodeinfo `metadata` (#28079 by @6543)
- Add Thai diacritics and tone marks in `HASHTAG_INVALID_CHARS_RE` (#26576 by @ppnplus)
- Add variable delay before link verification of remote account links (#27774 by @ClearlyClaire)
@@ -153,37 +170,53 @@ The following changelog entries focus on changes visible to users, administrator
### Changed
- **Change icons throughout the web interface** (#27385, #27539, #27555, #27579, #27700, #27817, #28519, #28709, #28064, #28775, #28780, #27924, #29294, #29395, #29537, #29569, #29610, #29612, #29649, #29844, #27780, #30974, #30963, #30962, #30961, #31362, #31363, #31359, #31371, #31360, #31512, #31511, and #31525 by @ClearlyClaire, @Gargron, @arbolitoloco1, @mjankowski, @nclm, @renchap, @ronilaukkarinen, and @zunda)\
- **Change icons throughout the web interface** (#27385, #27539, #27555, #27579, #27700, #27817, #28519, #28709, #28064, #28775, #28780, #27924, #29294, #29395, #29537, #29569, #29610, #29612, #29649, #29844, #27780, #30974, #30963, #30962, #30961, #31362, #31363, #31359, #31371, #31360, #31512, #31511, #31525, #32153, and #32201 by @ClearlyClaire, @Gargron, @arbolitoloco1, @mjankowski, @nclm, @renchap, @ronilaukkarinen, and @zunda)\
This changes all the interface icons from FontAwesome to Material Symbols for a more modern look, consistent with the official Mastodon Android app.\
In addition, better care is given to pixel alignment, and icon variants are used to better highlight active/inactive state.
- **Change design of compose form in web UI** (#28119, #29059, #29248, #29372, #29384, #29417, #29456, #29406, #29651, and #29659 by @ClearlyClaire, @Gargron, @eai04191, @hinaloe, and @ronilaukkarinen)\
- **Change design of compose form in web UI** (#28119, #29059, #29248, #29372, #29384, #29417, #29456, #29406, #29651, #29659, #31889 and #32033 by @ClearlyClaire, @Gargron, @eai04191, @hinaloe, and @ronilaukkarinen)\
The compose form has been completely redesigned for a more modern and consistent look, as well as spelling out the chosen privacy setting and language name at all times.\
As part of this, the “Unlisted” privacy setting has been renamed to “Quiet public”.
- **Change design of confirmation modals in the web UI** (#29576, #29614, #29640, #29644, #30131, #30884, and #31399 by @ClearlyClaire, @Gargron, and @tribela)\
- **Change design of modals in the web UI** (#29576, #29614, #29640, #29644, #30131, #30884, #31399, #31555, #31752, #31801, #31883, #31844, #31864, and #31943 by @ClearlyClaire, @Gargron, @tribela and @vmstan)\
The mute, block, and domain block confirmation modals have been completely redesigned to be clearer and include more detailed information on the action to be performed.\
They also have a more modern and consistent design, along with other confirmation modals in the application.
- **Change colors throughout the web UI** (#29522, #29584, #29653, #29779, #29803, #29809, #29808, #29828, #31034, #31168, #31266, #31348, #31349, #31361, and #31510 by @ClearlyClaire, @Gargron, @renchap, and @vmstan)
- **Change onboarding prompt to follow suggestions carousel in web UI** (#28878 and #29272 by @Gargron)
- **Change email templates** (#28416, #28755, #28814, #29064, #28883, #29470, #29607, #29761, #29760, and #29879 by @ClearlyClaire, @Gargron, @hteumeuleu, and @mjankowski)\
All emails to end-users have been completely redesigned with a fresh new look, providing more information while making them easier to reand and keeping maximum compatibility across mail clients.
- **Change colors throughout the web UI** (#29522, #29584, #29653, #29779, #29803, #29809, #29808, #29828, #31034, #31168, #31266, #31348, #31349, #31361, #31510 and #32128 by @ClearlyClaire, @Gargron, @mjankowski, @renchap, and @vmstan)
- **Change onboarding prompt to follow suggestions carousel in web UI** (#28878, #29272, and #31912 by @Gargron)
- **Change email templates** (#28416, #28755, #28814, #29064, #28883, #29470, #29607, #29761, #29760, #29879, #32073 and #32132 by @c960657, @ClearlyClaire, @Gargron, @hteumeuleu, and @mjankowski)\
All emails to end-users have been completely redesigned with a fresh new look, providing more information while making them easier to read and keeping maximum compatibility across mail clients.
- **Change follow recommendations algorithm** (#28314, #28433, #29017, #29108, #29306, #29550, #29619, and #31474 by @ClearlyClaire, @Gargron, @kernal053, @mjankowski, and @wheatear-dev)\
This replaces the “past interactions” recommendation algorithm with a “friends of friends” algorithm that suggests accounts followed by people you follow, and a “similar profiles” algorithm that suggests accounts with a profile similar to your most recent follows.\
In addition, the implementation has been significantly reworked, and all follow recommendations are now dismissable.\
This change deprecates the `source` attribute in `Suggestion` entities in the REST API, and replaces it with the new [`sources` attribute](https://docs.joinmastodon.org/entities/Suggestion/#sources).
- Change account search algorithm (#30803 by @Gargron)
- **Change streaming server to use its own dependencies and its own docker image** (#24702, #27967, #26850, #28112, #28115, #28137, #28138, #28497, #28548, and #30795 by @TheEssem, @ThisIsMissEm, @jippi, @timetinytim, and @vmstan)\
- **Change streaming server to use its own dependencies and its own docker image** (#24702, #27967, #26850, #28112, #28115, #28137, #28138, #28497, #28548, #30795, #31612, and #31615 by @TheEssem, @ThisIsMissEm, @jippi, @renchap, @timetinytim, and @vmstan)\
In order to reduce the amount of runtime dependencies, the streaming server has been moved into a separate package and Docker image.\
The `mastodon` image does not contain the streaming server anymore, as it has been moved to its own `mastodon-streaming` image.\
Administrators may need to update their setup accordingly.
- Change how content warnings and filters are displayed in web UI (#31365 by @Gargron)
- Change how content warnings and filters are displayed in web UI (#31365, and #31761 by @Gargron)
- Change preview card processing to ignore `undefined` as canonical url (#31882 by @oneiros)
- Change embedded posts to use web UI (#31766, #32135 and #32271 by @Gargron)
- Change inner borders in media galleries in web UI (#31852 by @Gargron)
- Change design of media attachments and profile media tab in web UI (#31807, #32048, #31967, #32217, #32224 and #32257 by @ClearlyClaire and @Gargron)
- Change labels on thread indicators in web UI (#31806 by @Gargron)
- Change label of "Data export" menu item in settings interface (#32099 by @c960657)
- Change responsive break points on navigation panel in web UI (#32034 by @Gargron)
- Change cursor to `not-allowed` on disabled buttons (#32076 by @mjankowski)
- Change OAuth authorization prompt to not refer to apps as “third-party” (#32005 by @Gargron)
- Change Mastodon to issue correct HTTP signatures by default (#31994 by @ClearlyClaire)
- Change zoom icon in web UI (#29683 by @Gargron)
- Change directory page to use URL query strings for options (#31980, #31977 and #31984 by @ClearlyClaire and @renchap)
- Change report action buttons to be disabled when action has already been taken (#31773, #31822, and #31899 by @ClearlyClaire and @ThisIsMissEm)
- Change width of columns in advanced web UI (#31762 by @Gargron)
- Change design of unread conversations in web UI (#31763 by @Gargron)
- Change Web UI to allow viewing and severing relationships with suspended accounts (#27667 by @ClearlyClaire)\
This also adds a `with_suspended` parameter to `GET /api/v1/accounts/relationships` in the REST API.
- Change preview card image size limit from 2MB to 8MB when using libvips (#31904 by @ClearlyClaire)
- Change avatars border radius (#31390 by @renchap)
- Change counters to be displayed on profile timelines in web UI (#30525 by @Gargron)
- Change disabled buttons color in light mode to make the difference more visible (#30998 by @renchap)
- Change design of people tab on explore in web UI (#30059 by @Gargron)
- Change sidebar text in web UI (#30696 by @Gargron)
- Change "Follow" to "Follow back" and "Mutual" when appropriate in web UI (#28452 and #28465 by @Gargron and @renchap)
- Change "Follow" to "Follow back" and "Mutual" when appropriate in web UI (#28452, #28465, and #31934 by @ClearlyClaire, @Gargron and @renchap)
- Change media to be hidden/blurred by default in report modal (#28522 by @ClearlyClaire)
- Change order of the "muting" and "blocking" list options in “Data Exports” (#26088 by @fixermark)
- Change admin and moderation notes character limit from 500 to 2000 characters (#30288 by @ThisIsMissEm)
@@ -197,6 +230,7 @@ The following changelog entries focus on changes visible to users, administrator
- Change dropdown menu icon to not be replaced by close icon when open in web UI (#29532 by @Gargron)
- Change back button to always appear in advanced web UI (#29551 and #29669 by @Gargron)
- Change border of active compose field search inputs (#29832 and #29839 by @vmstan)
- Change instances of Nokogiri HTML4 parsing to HTML5 (#31812, #31815, #31813, and #31814 by @flavorjones)
- Change link detection to allow `@` at the end of an URL (#31124 by @adamniedzielski)
- Change User-Agent to use Mastodon as the product, and http.rb as platform details (#31192 by @ClearlyClaire)
- Change layout and wording of the Content Retention server settings page (#27733 by @vmstan)
@@ -233,6 +267,7 @@ The following changelog entries focus on changes visible to users, administrator
### Removed
- Remove unused E2EE messaging code and related `crypto` OAuth scope (#31193, #31945, #31963, and #31964 by @ClearlyClaire and @mjankowski)
- Remove StatsD integration (replaced by OpenTelemetry) (#30240 by @mjankowski)
- Remove `CacheBuster` default options (#30718 by @mjankowski)
- Remove home marker updates from the Web UI (#22721 by @davbeck)\
@@ -248,17 +283,41 @@ The following changelog entries focus on changes visible to users, administrator
- Fix log out from user menu not working on Safari (#31402 by @renchap)
- Fix various issues when in link preview card generation (#28748, #30017, #30362, #30173, #30853, #30929, #30933, #30957, #30987, and #31144 by @adamniedzielski, @oneiros, @phocks, @timothyjrogers, and @tribela)
- Fix handling of missing links in Webfinger responses (#31030 by @adamniedzielski)
- Fix error when accepting an appeal for sensitive posts deleted in the meantime (#32037 by @ClearlyClaire)
- Fix error when encountering reblog of deleted post in feed rebuild (#32001 by @ClearlyClaire)
- Fix Safari browser glitch related to horizontal scrolling (#31960 by @Gargron)
- Fix unresolvable mentions sometimes preventing processing incoming posts (#29215 by @tribela and @ClearlyClaire)
- Fix too many requests caused by relationship look-ups in web UI (#32042 by @Gargron)
- Fix links for reblogs in moderation interface (#31979 by @ClearlyClaire)
- Fix the appearance of avatars when they do not load (#31966 and #32270 by @Gargron and @renchap)
- Fix spurious error notifications for aborted requests in web UI (#31952 by @c960657)
- Fix HTTP 500 error in `/api/v1/polls/:id/votes` when required `choices` parameter is missing (#25598 by @danielmbrasil)
- Fix security context sometimes not being added in LD-Signed activities (#31871 by @ClearlyClaire)
- Fix cross-origin loading of `inert.css` polyfill (#30687 by @louis77)
- Fix wrapping in dashboard quick access buttons (#32043 by @renchap)
- Fix recently used tags hint being displayed in profile edition page when there is none (#32120 by @mjankowski)
- Fix checkbox lists on narrow screens in the settings interface (#32112 by @mjankowski)
- Fix the position of status action buttons being affected by interaction counters (#32084 by @renchap)
- Fix the summary of converted ActivityPub object types to be treated as HTML (#28629 by @Menrath)
- Fix cutoff of instance name in sign-up form (#30598 by @oneiros)
- Fix invalid date searches returning 503 errors (#31526 by @notchairmk)
- Fix invalid `visibility` values in `POST /api/v1/statuses` returning 500 errors (#31571 by @c960657)
- Fix some components re-rendering spuriously in web UI (#31879 and #31881 by @ClearlyClaire and @Gargron)
- Fix sort order of moderation notes on Reports and Accounts (#31528 by @ThisIsMissEm)
- Fix email language when recipient has no selected locale (#31747 by @ClearlyClaire)
- Fix frequently-used languages not correctly updating in the web UI (#31386 by @c960657)
- Fix `POST /api/v1/statuses` silently ignoring invalid `media_ids` parameter (#31681 by @c960657)
- Fix handling of the `BIND` environment variable in the streaming server (#31624 by @ThisIsMissEm)
- Fix empty `aria-hidden` attribute value in logo resources area (#30570 by @mjankowski)
- Fix “Redirect URI” field not being marked as required in “New application” form (#30311 by @ThisIsMissEm)
- Fix right-to-left text in preview cards (#30930 by @ClearlyClaire)
- Fix rack attack `match_type` value typo in logging config (#30514 by @mjankowski)
- Fix various cases of duplicate, missing, or inconsistent borders or scrollbar styles (#31068, #31286, #31268, #31275, #31284, #31305, #31346, #31372, #31373, #31389, #31432, #31391, and #31445 by @valtlai and @vmstan)
- Fix various cases of duplicate, missing, or inconsistent borders or scrollbar styles (#31068, #31286, #31268, #31275, #31284, #31305, #31346, #31372, #31373, #31389, #31432, #31391, #31445, #32091, #32147 and #32137 by @ClearlyClaire, @mjankowski, @valtlai and @vmstan)
- Fix editing description of media uploads with custom thumbnails (#32221 by @ClearlyClaire)
- Fix race condition in `POST /api/v1/push/subscription` (#30166 by @ClearlyClaire)
- Fix post deletion not being delayed when those are part of an account warning (#30163 by @ClearlyClaire)
- Fix rendering error on `/start` when not logged in (#30023 by @timothyjrogers)
- Fix unneeded requests to blocked domains when receiving relayed signed activities from them (#31161 by @ClearlyClaire)
- Fix logo pushing header buttons out of view on certain conditions in mobile layout (#29787 by @ClearlyClaire)
- Fix notification-related records not being reattributed when merging accounts (#29694 by @ClearlyClaire)
- Fix results/query in `api/v1/featured_tags/suggestions` (#29597 by @mjankowski)
@@ -268,6 +327,7 @@ The following changelog entries focus on changes visible to users, administrator
- Fix full date display not respecting the locale 12/24h format (#29448 by @renchap)
- Fix filters title and keywords overflow (#29396 by @GeopJr)
- Fix incorrect date format in “Follows and followers” (#29390 by @JasonPunyon)
- Fix navigation item active highlight for some paths (#32159 by @mjankowski)
- Fix “Edit media” modal sizing and layout when space-constrained (#27095 by @ronilaukkarinen)
- Fix modal container bounds (#29185 by @nico3333fr)
- Fix inefficient HTTP signature parsing using regexps and `StringScanner` (#29133 by @ClearlyClaire)

View File

@@ -12,7 +12,7 @@ ARG BUILDPLATFORM=${BUILDPLATFORM}
# Ruby image to use for base image, change with [--build-arg RUBY_VERSION="3.3.x"]
# renovate: datasource=docker depName=docker.io/ruby
ARG RUBY_VERSION="3.3.4"
ARG RUBY_VERSION="3.3.5"
# # 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="20"

16
Gemfile
View File

@@ -47,7 +47,6 @@ gem 'color_diff', '~> 0.1'
gem 'csv', '~> 3.2'
gem 'discard', '~> 1.2'
gem 'doorkeeper', '~> 5.6'
gem 'ed25519', '~> 1.3'
gem 'fast_blank', '~> 1.0'
gem 'fastimage'
gem 'hiredis', '~> 0.6'
@@ -99,10 +98,10 @@ gem 'json-ld'
gem 'json-ld-preloaded', '~> 3.2'
gem 'rdf-normalize', '~> 0.5'
gem 'opentelemetry-api', '~> 1.3.0'
gem 'opentelemetry-api', '~> 1.4.0'
group :opentelemetry do
gem 'opentelemetry-exporter-otlp', '~> 0.28.0', require: false
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.20.1', require: false
gem 'opentelemetry-instrumentation-concurrent_ruby', '~> 0.21.2', require: false
@@ -111,7 +110,7 @@ group :opentelemetry do
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.28.0', require: false
gem 'opentelemetry-instrumentation-pg', '~> 0.29.0', require: false
gem 'opentelemetry-instrumentation-rack', '~> 0.24.1', require: false
gem 'opentelemetry-instrumentation-rails', '~> 0.31.0', require: false
gem 'opentelemetry-instrumentation-redis', '~> 0.25.3', require: false
@@ -126,9 +125,6 @@ group :test do
# Adds RSpec Error/Warning annotations to GitHub PRs on the Files tab
gem 'rspec-github', '~> 2.4', require: false
# RSpec progress bar formatter
gem 'fuubar', '~> 2.5'
# RSpec helpers for email specs
gem 'email_spec'
@@ -149,11 +145,13 @@ group :test do
gem 'rails-controller-testing', '~> 1.0'
# Validate schemas in specs
gem 'json-schema', '~> 4.0'
gem 'json-schema', '~> 5.0'
# Test harness fo rack components
gem 'rack-test', '~> 2.1'
gem 'shoulda-matchers'
# Coverage formatter for RSpec test if DISABLE_SIMPLECOV is false
gem 'simplecov', '~> 0.22', require: false
gem 'simplecov-lcov', '~> 0.8', require: false
@@ -210,7 +208,7 @@ group :development, :test do
gem 'test-prof'
# RSpec runner for rails
gem 'rspec-rails', '~> 6.0'
gem 'rspec-rails', '~> 7.0'
end
group :production do

View File

@@ -10,35 +10,35 @@ GIT
GEM
remote: https://rubygems.org/
specs:
actioncable (7.1.3.4)
actionpack (= 7.1.3.4)
activesupport (= 7.1.3.4)
actioncable (7.1.4)
actionpack (= 7.1.4)
activesupport (= 7.1.4)
nio4r (~> 2.0)
websocket-driver (>= 0.6.1)
zeitwerk (~> 2.6)
actionmailbox (7.1.3.4)
actionpack (= 7.1.3.4)
activejob (= 7.1.3.4)
activerecord (= 7.1.3.4)
activestorage (= 7.1.3.4)
activesupport (= 7.1.3.4)
actionmailbox (7.1.4)
actionpack (= 7.1.4)
activejob (= 7.1.4)
activerecord (= 7.1.4)
activestorage (= 7.1.4)
activesupport (= 7.1.4)
mail (>= 2.7.1)
net-imap
net-pop
net-smtp
actionmailer (7.1.3.4)
actionpack (= 7.1.3.4)
actionview (= 7.1.3.4)
activejob (= 7.1.3.4)
activesupport (= 7.1.3.4)
actionmailer (7.1.4)
actionpack (= 7.1.4)
actionview (= 7.1.4)
activejob (= 7.1.4)
activesupport (= 7.1.4)
mail (~> 2.5, >= 2.5.4)
net-imap
net-pop
net-smtp
rails-dom-testing (~> 2.2)
actionpack (7.1.3.4)
actionview (= 7.1.3.4)
activesupport (= 7.1.3.4)
actionpack (7.1.4)
actionview (= 7.1.4)
activesupport (= 7.1.4)
nokogiri (>= 1.8.5)
racc
rack (>= 2.2.4)
@@ -46,15 +46,15 @@ GEM
rack-test (>= 0.6.3)
rails-dom-testing (~> 2.2)
rails-html-sanitizer (~> 1.6)
actiontext (7.1.3.4)
actionpack (= 7.1.3.4)
activerecord (= 7.1.3.4)
activestorage (= 7.1.3.4)
activesupport (= 7.1.3.4)
actiontext (7.1.4)
actionpack (= 7.1.4)
activerecord (= 7.1.4)
activestorage (= 7.1.4)
activesupport (= 7.1.4)
globalid (>= 0.6.0)
nokogiri (>= 1.8.5)
actionview (7.1.3.4)
activesupport (= 7.1.3.4)
actionview (7.1.4)
activesupport (= 7.1.4)
builder (~> 3.1)
erubi (~> 1.11)
rails-dom-testing (~> 2.2)
@@ -64,22 +64,22 @@ GEM
activemodel (>= 4.1)
case_transform (>= 0.2)
jsonapi-renderer (>= 0.1.1.beta1, < 0.3)
activejob (7.1.3.4)
activesupport (= 7.1.3.4)
activejob (7.1.4)
activesupport (= 7.1.4)
globalid (>= 0.3.6)
activemodel (7.1.3.4)
activesupport (= 7.1.3.4)
activerecord (7.1.3.4)
activemodel (= 7.1.3.4)
activesupport (= 7.1.3.4)
activemodel (7.1.4)
activesupport (= 7.1.4)
activerecord (7.1.4)
activemodel (= 7.1.4)
activesupport (= 7.1.4)
timeout (>= 0.4.0)
activestorage (7.1.3.4)
actionpack (= 7.1.3.4)
activejob (= 7.1.3.4)
activerecord (= 7.1.3.4)
activesupport (= 7.1.3.4)
activestorage (7.1.4)
actionpack (= 7.1.4)
activejob (= 7.1.4)
activerecord (= 7.1.4)
activesupport (= 7.1.4)
marcel (~> 1.0)
activesupport (7.1.3.4)
activesupport (7.1.4)
base64
bigdecimal
concurrent-ruby (~> 1.0, >= 1.0.2)
@@ -100,20 +100,20 @@ GEM
attr_required (1.0.2)
awrence (1.2.1)
aws-eventstream (1.3.0)
aws-partitions (1.966.0)
aws-sdk-core (3.201.5)
aws-partitions (1.978.0)
aws-sdk-core (3.209.0)
aws-eventstream (~> 1, >= 1.3.0)
aws-partitions (~> 1, >= 1.651.0)
aws-sigv4 (~> 1.9)
jmespath (~> 1, >= 1.6.1)
aws-sdk-kms (1.88.0)
aws-sdk-core (~> 3, >= 3.201.0)
aws-sdk-kms (1.94.0)
aws-sdk-core (~> 3, >= 3.207.0)
aws-sigv4 (~> 1.5)
aws-sdk-s3 (1.159.0)
aws-sdk-core (~> 3, >= 3.201.0)
aws-sdk-s3 (1.166.0)
aws-sdk-core (~> 3, >= 3.207.0)
aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.5)
aws-sigv4 (1.9.1)
aws-sigv4 (1.10.0)
aws-eventstream (~> 1, >= 1.0.2)
azure-storage-blob (2.0.3)
azure-storage-common (~> 2.0)
@@ -134,17 +134,17 @@ GEM
bindata (2.5.0)
binding_of_caller (1.0.1)
debug_inspector (>= 1.2.0)
blurhash (0.1.7)
blurhash (0.1.8)
bootsnap (1.18.4)
msgpack (~> 1.2)
brakeman (6.1.2)
brakeman (6.2.1)
racc
browser (5.3.1)
brpoplpush-redis_script (0.1.3)
concurrent-ruby (~> 1.0, >= 1.0.5)
redis (>= 1.0, < 6)
builder (3.3.0)
bundler-audit (0.9.1)
bundler-audit (0.9.2)
bundler (>= 1.2.0, < 3)
thor (~> 1.0)
capybara (3.40.0)
@@ -164,20 +164,22 @@ GEM
activesupport (>= 5.2)
elasticsearch (>= 7.14.0, < 8)
elasticsearch-dsl
childprocess (5.1.0)
logger (~> 1.5)
chunky_png (1.4.0)
climate_control (1.2.0)
cocoon (1.2.15)
color_diff (0.1)
concurrent-ruby (1.3.4)
connection_pool (2.4.1)
cose (1.3.0)
cose (1.3.1)
cbor (~> 0.5.9)
openssl-signature_algorithm (~> 1.0)
crack (1.0.0)
bigdecimal
rexml
crass (1.0.6)
css_parser (1.17.1)
css_parser (1.19.0)
addressable
csv (3.3.0)
database_cleaner-active_record (2.2.0)
@@ -195,7 +197,7 @@ GEM
railties (>= 4.1.0)
responders
warden (~> 1.2.3)
devise-two-factor (5.1.0)
devise-two-factor (6.0.0)
activesupport (~> 7.0)
devise (~> 4.0)
railties (~> 7.0)
@@ -206,20 +208,20 @@ GEM
diff-lcs (1.5.1)
discard (1.3.0)
activerecord (>= 4.2, < 8)
docile (1.4.0)
docile (1.4.1)
domain_name (0.6.20240107)
doorkeeper (5.7.1)
railties (>= 5)
dotenv (3.1.2)
dotenv (3.1.4)
drb (2.2.1)
ed25519 (1.3.0)
elasticsearch (7.17.10)
elasticsearch-api (= 7.17.10)
elasticsearch-transport (= 7.17.10)
elasticsearch-api (7.17.10)
elasticsearch (7.17.11)
elasticsearch-api (= 7.17.11)
elasticsearch-transport (= 7.17.11)
elasticsearch-api (7.17.11)
multi_json
elasticsearch-dsl (0.1.10)
elasticsearch-transport (7.17.10)
elasticsearch-transport (7.17.11)
base64
faraday (>= 1, < 3)
multi_json
email_spec (2.3.0)
@@ -251,7 +253,7 @@ GEM
faraday-httpclient (1.0.1)
faraday-multipart (1.0.4)
multipart-post (~> 2)
faraday-net_http (1.0.1)
faraday-net_http (1.0.2)
faraday-net_http_persistent (1.2.0)
faraday-patron (1.0.0)
faraday-rack (1.0.0)
@@ -264,10 +266,11 @@ GEM
ffi-compiler (1.3.2)
ffi (>= 1.15.5)
rake
flatware (2.3.2)
flatware (2.3.3)
drb
thor (< 2.0)
flatware-rspec (2.3.2)
flatware (= 2.3.2)
flatware-rspec (2.3.3)
flatware (= 2.3.3)
rspec (>= 3.6)
fog-core (2.5.0)
builder
@@ -284,14 +287,11 @@ GEM
fugit (1.11.1)
et-orbi (~> 1, >= 1.2.11)
raabro (~> 1.4)
fuubar (2.5.1)
rspec-core (~> 3.0)
ruby-progressbar (~> 1.4)
globalid (1.2.1)
activesupport (>= 6.1)
google-protobuf (3.25.4)
googleapis-common-protos-types (1.14.0)
google-protobuf (~> 3.18)
google-protobuf (3.25.5)
googleapis-common-protos-types (1.15.0)
google-protobuf (>= 3.18, < 5.a)
haml (6.3.0)
temple (>= 0.8.2)
thor
@@ -307,11 +307,12 @@ GEM
rainbow
rubocop (>= 1.0)
sysexits (~> 1.1)
hashdiff (1.1.0)
hashdiff (1.1.1)
hashie (5.0.0)
hcaptcha (7.1.0)
json
highline (3.0.1)
highline (3.1.1)
reline
hiredis (0.6.3)
hkdf (0.3.0)
htmlentities (4.3.4)
@@ -329,7 +330,7 @@ GEM
httplog (1.7.0)
rack (>= 2.0)
rainbow (>= 2.0.0)
i18n (1.14.5)
i18n (1.14.6)
concurrent-ruby (~> 1.0)
i18n-tasks (1.0.14)
activesupport (>= 4.0.2)
@@ -342,11 +343,11 @@ GEM
rainbow (>= 2.2.2, < 4.0)
terminal-table (>= 1.5.1)
idn-ruby (0.1.5)
inline_svg (1.9.0)
inline_svg (1.10.0)
activesupport (>= 3.0)
nokogiri (>= 1.6)
io-console (0.7.2)
irb (1.14.0)
irb (1.14.1)
rdoc (>= 4.0.0)
reline (>= 0.4.2)
jmespath (1.6.2)
@@ -368,8 +369,8 @@ GEM
json-ld-preloaded (3.3.0)
json-ld (~> 3.3)
rdf (~> 3.3)
json-schema (4.3.1)
addressable (>= 2.8)
json-schema (5.0.0)
addressable (~> 2.8)
jsonapi-renderer (0.2.2)
jwt (2.7.1)
kaminari (1.2.2)
@@ -391,8 +392,9 @@ GEM
mime-types
terrapin (>= 0.6.0, < 2.0)
language_server-protocol (3.17.0.3)
launchy (2.5.2)
launchy (3.0.1)
addressable (~> 2.8)
childprocess (~> 5.0)
letter_opener (1.10.0)
launchy (>= 2.2, < 4)
letter_opener_web (3.0.0)
@@ -404,7 +406,7 @@ GEM
llhttp-ffi (0.5.0)
ffi-compiler (~> 1.0)
rake (~> 13.0)
logger (1.6.0)
logger (1.6.1)
lograge (0.14.0)
actionpack (>= 4)
activesupport (>= 4)
@@ -426,22 +428,22 @@ GEM
addressable (~> 2.5)
azure-storage-blob (~> 2.0.1)
hashie (~> 5.0)
memory_profiler (1.0.2)
memory_profiler (1.1.0)
mime-types (3.5.2)
mime-types-data (~> 3.2015)
mime-types-data (3.2024.0702)
mime-types-data (3.2024.0820)
mini_mime (1.1.5)
mini_portile2 (2.8.7)
minitest (5.24.1)
minitest (5.25.1)
msgpack (1.7.2)
multi_json (1.15.0)
multipart-post (2.4.0)
multipart-post (2.4.1)
mutex_m (0.2.0)
net-http (0.4.1)
uri
net-http-persistent (4.0.2)
connection_pool (~> 2.2)
net-imap (0.4.14)
net-imap (0.4.15)
date
net-protocol
net-ldap (0.19.0)
@@ -455,7 +457,7 @@ GEM
nokogiri (1.16.7)
mini_portile2 (~> 2.8.2)
racc (~> 1.4)
oj (3.16.5)
oj (3.16.6)
bigdecimal (>= 3.0)
ostruct (>= 0.2)
omniauth (2.1.2)
@@ -466,12 +468,12 @@ GEM
addressable (~> 2.8)
nokogiri (~> 1.12)
omniauth (~> 2.1)
omniauth-rails_csrf_protection (1.0.1)
omniauth-rails_csrf_protection (1.0.2)
actionpack (>= 4.2)
omniauth (~> 2.0)
omniauth-saml (2.1.0)
omniauth (~> 2.0)
ruby-saml (~> 1.12)
omniauth-saml (2.2.1)
omniauth (~> 2.1)
ruby-saml (~> 1.17)
omniauth_openid_connect (0.6.1)
omniauth (>= 1.9, < 3)
openid_connect (~> 1.1)
@@ -489,18 +491,18 @@ GEM
openssl (3.2.0)
openssl-signature_algorithm (1.3.0)
openssl (> 2.0)
opentelemetry-api (1.3.0)
opentelemetry-common (0.20.1)
opentelemetry-api (1.4.0)
opentelemetry-common (0.21.0)
opentelemetry-api (~> 1.0)
opentelemetry-exporter-otlp (0.28.1)
opentelemetry-exporter-otlp (0.29.0)
google-protobuf (>= 3.18)
googleapis-common-protos-types (~> 1.3)
opentelemetry-api (~> 1.1)
opentelemetry-common (~> 0.20)
opentelemetry-sdk (~> 1.2)
opentelemetry-semantic_conventions
opentelemetry-helpers-sql-obfuscation (0.1.0)
opentelemetry-common (~> 0.20)
opentelemetry-helpers-sql-obfuscation (0.2.0)
opentelemetry-common (~> 0.21)
opentelemetry-instrumentation-action_mailer (0.1.0)
opentelemetry-api (~> 1.0)
opentelemetry-instrumentation-active_support (~> 0.1)
@@ -525,8 +527,9 @@ GEM
opentelemetry-instrumentation-active_support (0.6.0)
opentelemetry-api (~> 1.0)
opentelemetry-instrumentation-base (~> 0.22.1)
opentelemetry-instrumentation-base (0.22.3)
opentelemetry-instrumentation-base (0.22.6)
opentelemetry-api (~> 1.0)
opentelemetry-common (~> 0.21)
opentelemetry-registry (~> 0.1)
opentelemetry-instrumentation-concurrent_ruby (0.21.4)
opentelemetry-api (~> 1.0)
@@ -546,7 +549,7 @@ GEM
opentelemetry-instrumentation-net_http (0.22.7)
opentelemetry-api (~> 1.0)
opentelemetry-instrumentation-base (~> 0.22.1)
opentelemetry-instrumentation-pg (0.28.0)
opentelemetry-instrumentation-pg (0.29.0)
opentelemetry-api (~> 1.0)
opentelemetry-helpers-sql-obfuscation
opentelemetry-instrumentation-base (~> 0.22.1)
@@ -580,25 +583,25 @@ GEM
orm_adapter (0.5.0)
ostruct (0.6.0)
ox (2.14.18)
parallel (1.25.1)
parser (3.3.4.0)
parallel (1.26.3)
parser (3.3.5.0)
ast (~> 2.4.1)
racc
parslet (2.0.0)
pastel (0.8.0)
tty-color (~> 0.5)
pg (1.5.7)
pg (1.5.8)
pghero (3.6.0)
activerecord (>= 6.1)
premailer (1.23.0)
premailer (1.27.0)
addressable
css_parser (>= 1.12.0)
css_parser (>= 1.19.0)
htmlentities (>= 4.0.0)
premailer-rails (1.12.0)
actionmailer (>= 3)
net-smtp
premailer (~> 1.7, >= 1.7.9)
propshaft (0.9.1)
propshaft (1.1.0)
actionpack (>= 7.0.0)
activesupport (>= 7.0.0)
rack
@@ -606,9 +609,9 @@ GEM
psych (5.1.2)
stringio
public_suffix (6.0.1)
puma (6.4.2)
puma (6.4.3)
nio4r (~> 2.0)
pundit (2.3.2)
pundit (2.4.0)
activesupport (>= 3.0.0)
raabro (1.4.0)
racc (1.8.1)
@@ -635,20 +638,20 @@ GEM
rackup (1.0.0)
rack (< 3)
webrick
rails (7.1.3.4)
actioncable (= 7.1.3.4)
actionmailbox (= 7.1.3.4)
actionmailer (= 7.1.3.4)
actionpack (= 7.1.3.4)
actiontext (= 7.1.3.4)
actionview (= 7.1.3.4)
activejob (= 7.1.3.4)
activemodel (= 7.1.3.4)
activerecord (= 7.1.3.4)
activestorage (= 7.1.3.4)
activesupport (= 7.1.3.4)
rails (7.1.4)
actioncable (= 7.1.4)
actionmailbox (= 7.1.4)
actionmailer (= 7.1.4)
actionpack (= 7.1.4)
actiontext (= 7.1.4)
actionview (= 7.1.4)
activejob (= 7.1.4)
activemodel (= 7.1.4)
activerecord (= 7.1.4)
activestorage (= 7.1.4)
activesupport (= 7.1.4)
bundler (>= 1.15.0)
railties (= 7.1.3.4)
railties (= 7.1.4)
rails-controller-testing (1.0.5)
actionpack (>= 5.0.1.rc1)
actionview (>= 5.0.1.rc1)
@@ -663,9 +666,9 @@ GEM
rails-i18n (7.0.9)
i18n (>= 0.7, < 2)
railties (>= 6.0.0, < 8)
railties (7.1.3.4)
actionpack (= 7.1.3.4)
activesupport (= 7.1.3.4)
railties (7.1.4)
actionpack (= 7.1.4)
activesupport (= 7.1.4)
irb
rackup (>= 1.0.0)
rake (>= 12.2)
@@ -688,17 +691,16 @@ GEM
redlock (1.3.2)
redis (>= 3.0.0, < 6.0)
regexp_parser (2.9.2)
reline (0.5.9)
reline (0.5.10)
io-console (~> 0.5)
request_store (1.6.0)
rack (>= 1.4)
responders (3.1.1)
actionpack (>= 5.2)
railties (>= 5.2)
rexml (3.3.4)
strscan
rexml (3.3.8)
rotp (6.3.0)
rouge (4.2.1)
rouge (4.3.0)
rpam2 (4.0.2)
rqrcode (2.2.0)
chunky_png (~> 1.0)
@@ -708,9 +710,9 @@ GEM
rspec-core (~> 3.13.0)
rspec-expectations (~> 3.13.0)
rspec-mocks (~> 3.13.0)
rspec-core (3.13.0)
rspec-core (3.13.1)
rspec-support (~> 3.13.0)
rspec-expectations (3.13.1)
rspec-expectations (3.13.2)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.13.0)
rspec-github (2.4.0)
@@ -718,10 +720,10 @@ GEM
rspec-mocks (3.13.1)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.13.0)
rspec-rails (6.1.4)
actionpack (>= 6.1)
activesupport (>= 6.1)
railties (>= 6.1)
rspec-rails (7.0.1)
actionpack (>= 7.0)
activesupport (>= 7.0)
railties (>= 7.0)
rspec-core (~> 3.13)
rspec-expectations (~> 3.13)
rspec-mocks (~> 3.13)
@@ -732,37 +734,36 @@ GEM
rspec-mocks (~> 3.0)
sidekiq (>= 5, < 8)
rspec-support (3.13.1)
rubocop (1.65.1)
rubocop (1.66.1)
json (~> 2.3)
language_server-protocol (>= 3.17.0)
parallel (~> 1.10)
parser (>= 3.3.0.2)
rainbow (>= 2.2.2, < 4.0)
regexp_parser (>= 2.4, < 3.0)
rexml (>= 3.2.5, < 4.0)
rubocop-ast (>= 1.31.1, < 2.0)
rubocop-ast (>= 1.32.2, < 2.0)
ruby-progressbar (~> 1.7)
unicode-display_width (>= 2.4.0, < 3.0)
rubocop-ast (1.31.3)
rubocop-ast (1.32.3)
parser (>= 3.3.1.0)
rubocop-capybara (2.21.0)
rubocop (~> 1.41)
rubocop-performance (1.21.1)
rubocop-performance (1.22.1)
rubocop (>= 1.48.1, < 2.0)
rubocop-ast (>= 1.31.1, < 2.0)
rubocop-rails (2.25.1)
rubocop-rails (2.26.2)
activesupport (>= 4.2.0)
rack (>= 1.1)
rubocop (>= 1.33.0, < 2.0)
rubocop (>= 1.52.0, < 2.0)
rubocop-ast (>= 1.31.1, < 2.0)
rubocop-rspec (3.0.4)
rubocop-rspec (3.0.5)
rubocop (~> 1.61)
rubocop-rspec_rails (2.30.0)
rubocop (~> 1.61)
rubocop-rspec (~> 3, >= 3.0.1)
ruby-prof (1.7.0)
ruby-progressbar (1.13.0)
ruby-saml (1.16.0)
ruby-saml (1.17.0)
nokogiri (>= 1.13.10)
rexml
ruby-vips (2.2.2)
@@ -780,13 +781,15 @@ GEM
scenic (1.8.0)
activerecord (>= 4.0.0)
railties (>= 4.0.0)
selenium-webdriver (4.23.0)
selenium-webdriver (4.25.0)
base64 (~> 0.2)
logger (~> 1.4)
rexml (~> 3.2, >= 3.2.5)
rubyzip (>= 1.2.2, < 3.0)
websocket (~> 1.0)
semantic_range (3.0.0)
shoulda-matchers (6.4.0)
activesupport (>= 5.2.0)
sidekiq (6.5.12)
connection_pool (>= 2.2.5, < 3)
rack (~> 2.0)
@@ -821,7 +824,6 @@ GEM
stringio (3.1.1)
strong_migrations (2.0.0)
activerecord (>= 6.1)
strscan (3.1.0)
swd (1.3.0)
activesupport (>= 3)
attr_required (>= 0.0.5)
@@ -832,11 +834,11 @@ GEM
unicode-display_width (>= 1.1.1, < 3)
terrapin (1.0.1)
climate_control
test-prof (1.4.0)
thor (1.3.1)
tilt (2.3.0)
test-prof (1.4.2)
thor (1.3.2)
tilt (2.4.0)
timeout (0.4.1)
tpm-key_attestation (0.12.0)
tpm-key_attestation (0.12.1)
bindata (~> 2.4)
openssl (> 2.0)
openssl-signature_algorithm (~> 1.0)
@@ -855,13 +857,13 @@ GEM
unf (~> 0.1.0)
tzinfo (2.0.6)
concurrent-ruby (~> 1.0)
tzinfo-data (1.2024.1)
tzinfo-data (1.2024.2)
tzinfo (>= 1.0.0)
unf (0.1.4)
unf_ext
unf_ext (0.0.9.1)
unicode-display_width (2.5.0)
uri (0.13.0)
uri (0.13.1)
validate_email (0.1.6)
activemodel (>= 3.0)
mail (>= 2.2.5)
@@ -882,7 +884,7 @@ GEM
webfinger (1.2.0)
activesupport
httpclient (>= 2.4)
webmock (3.23.1)
webmock (3.24.0)
addressable (>= 2.8.0)
crack (>= 0.3.2)
hashdiff (>= 0.4.0, < 2.0.0)
@@ -891,7 +893,7 @@ GEM
rack-proxy (>= 0.6.1)
railties (>= 5.2)
semantic_range (>= 2.3.0)
webrick (1.8.1)
webrick (1.8.2)
websocket (1.2.11)
websocket-driver (0.7.6)
websocket-extensions (>= 0.1.0)
@@ -900,7 +902,7 @@ GEM
xorcist (1.1.3)
xpath (3.2.0)
nokogiri (~> 1.8)
zeitwerk (2.6.17)
zeitwerk (2.6.18)
PLATFORMS
ruby
@@ -934,7 +936,6 @@ DEPENDENCIES
discard (~> 1.2)
doorkeeper (~> 5.6)
dotenv
ed25519 (~> 1.3)
email_spec
fabrication (~> 2.30)
faker (~> 3.2)
@@ -943,7 +944,6 @@ DEPENDENCIES
flatware-rspec
fog-core (<= 2.5.0)
fog-openstack (~> 1.0)
fuubar (~> 2.5)
haml-rails (~> 2.0)
haml_lint
hcaptcha (~> 7.1)
@@ -959,7 +959,7 @@ DEPENDENCIES
irb (~> 1.8)
json-ld
json-ld-preloaded (~> 3.2)
json-schema (~> 4.0)
json-schema (~> 5.0)
kaminari (~> 1.2)
kt-paperclip (~> 7.2)
letter_opener (~> 1.8)
@@ -980,8 +980,8 @@ DEPENDENCIES
omniauth-rails_csrf_protection (~> 1.0)
omniauth-saml (~> 2.0)
omniauth_openid_connect (~> 0.6.1)
opentelemetry-api (~> 1.3.0)
opentelemetry-exporter-otlp (~> 0.28.0)
opentelemetry-api (~> 1.4.0)
opentelemetry-exporter-otlp (~> 0.29.0)
opentelemetry-instrumentation-active_job (~> 0.7.1)
opentelemetry-instrumentation-active_model_serializers (~> 0.20.1)
opentelemetry-instrumentation-concurrent_ruby (~> 0.21.2)
@@ -990,7 +990,7 @@ DEPENDENCIES
opentelemetry-instrumentation-http (~> 0.23.2)
opentelemetry-instrumentation-http_client (~> 0.22.3)
opentelemetry-instrumentation-net_http (~> 0.22.4)
opentelemetry-instrumentation-pg (~> 0.28.0)
opentelemetry-instrumentation-pg (~> 0.29.0)
opentelemetry-instrumentation-rack (~> 0.24.1)
opentelemetry-instrumentation-rails (~> 0.31.0)
opentelemetry-instrumentation-redis (~> 0.25.3)
@@ -1018,7 +1018,7 @@ DEPENDENCIES
redis-namespace (~> 1.10)
rqrcode (~> 2.2)
rspec-github (~> 2.4)
rspec-rails (~> 6.0)
rspec-rails (~> 7.0)
rspec-sidekiq (~> 5.0)
rubocop
rubocop-capybara
@@ -1033,6 +1033,7 @@ DEPENDENCIES
sanitize (~> 6.0)
scenic (~> 1.7)
selenium-webdriver
shoulda-matchers
sidekiq (~> 6.5)
sidekiq-bulk (~> 0.2.0)
sidekiq-scheduler (~> 5.0)
@@ -1056,7 +1057,7 @@ DEPENDENCIES
xorcist (~> 1.1)
RUBY VERSION
ruby 3.3.2p78
ruby 3.3.4p94
BUNDLED WITH
2.5.11
2.5.18

View File

@@ -11,4 +11,4 @@ worker: bundle exec sidekiq
#
# and let the main app use the separate app:
#
# heroku config:set STREAMING_API_BASE_URL=wss://<streaming-app>.herokuapp.com -a <main-app>
# heroku config:set STREAMING_API_BASE_URL=wss://<streaming-app-random>.herokuapp.com -a <main-app>

View File

@@ -13,8 +13,9 @@ A "vulnerability in Mastodon" is a vulnerability in the code distributed through
## Supported Versions
| Version | Supported |
| ------- | --------- |
| 4.2.x | Yes |
| 4.1.x | Yes |
| < 4.1 | No |
| Version | Supported |
| ------- | ---------------- |
| 4.3.x | Yes |
| 4.2.x | Yes |
| 4.1.x | Until 2025-04-08 |
| < 4.1 | No |

View File

@@ -90,9 +90,15 @@
}
},
"buildpacks": [
{
"url": "https://github.com/heroku/heroku-buildpack-activestorage-preview"
},
{
"url": "https://github.com/heroku/heroku-buildpack-apt"
},
{
"url": "heroku/nodejs"
},
{
"url": "heroku/ruby"
}
@@ -100,5 +106,6 @@
"scripts": {
"postdeploy": "bundle exec rails db:migrate && bundle exec rails db:seed"
},
"addons": ["heroku-postgresql", "heroku-redis"]
"addons": ["heroku-postgresql", "heroku-redis"],
"stack": "heroku-24"
}

View File

@@ -1,18 +0,0 @@
# frozen_string_literal: true
class ActivityPub::ClaimsController < ActivityPub::BaseController
skip_before_action :authenticate_user!
before_action :require_account_signature!
before_action :set_claim_result
def create
render json: @claim_result, serializer: ActivityPub::OneTimeKeySerializer
end
private
def set_claim_result
@claim_result = ::Keys::ClaimService.new.call(@account.id, params[:id])
end
end

View File

@@ -22,8 +22,6 @@ class ActivityPub::CollectionsController < ActivityPub::BaseController
@items = @items.map { |item| item.distributable? ? item : ActivityPub::TagManager.instance.uri_for(item) }
when 'tags'
@items = for_signed_account { @account.featured_tags }
when 'devices'
@items = @account.devices
else
not_found
end
@@ -31,7 +29,7 @@ class ActivityPub::CollectionsController < ActivityPub::BaseController
def set_size
case params[:id]
when 'featured', 'devices', 'tags'
when 'featured', 'tags'
@size = @items.size
else
not_found
@@ -42,7 +40,7 @@ class ActivityPub::CollectionsController < ActivityPub::BaseController
case params[:id]
when 'featured'
@type = :ordered
when 'devices', 'tags'
when 'tags'
@type = :unordered
else
not_found

View File

@@ -0,0 +1,36 @@
# frozen_string_literal: true
class ActivityPub::LikesController < ActivityPub::BaseController
include Authorization
vary_by -> { 'Signature' if authorized_fetch_mode? }
before_action :require_account_signature!, if: :authorized_fetch_mode?
before_action :set_status
def index
expires_in 0, public: @status.distributable? && public_fetch_mode?
render json: likes_collection_presenter, serializer: ActivityPub::CollectionSerializer, adapter: ActivityPub::Adapter, content_type: 'application/activity+json'
end
private
def pundit_user
signed_request_account
end
def set_status
@status = @account.statuses.find(params[:status_id])
authorize @status, :show?
rescue Mastodon::NotPermittedError
not_found
end
def likes_collection_presenter
ActivityPub::CollectionPresenter.new(
id: account_status_likes_url(@account, @status),
type: :unordered,
size: @status.favourites_count
)
end
end

View File

@@ -12,7 +12,7 @@ class ActivityPub::RepliesController < ActivityPub::BaseController
before_action :set_replies
def index
expires_in 0, public: public_fetch_mode?
expires_in 0, public: @status.distributable? && public_fetch_mode?
render json: replies_collection_presenter, serializer: ActivityPub::CollectionSerializer, adapter: ActivityPub::Adapter, content_type: 'application/activity+json', skip_activities: true
end

View File

@@ -0,0 +1,36 @@
# frozen_string_literal: true
class ActivityPub::SharesController < ActivityPub::BaseController
include Authorization
vary_by -> { 'Signature' if authorized_fetch_mode? }
before_action :require_account_signature!, if: :authorized_fetch_mode?
before_action :set_status
def index
expires_in 0, public: @status.distributable? && public_fetch_mode?
render json: shares_collection_presenter, serializer: ActivityPub::CollectionSerializer, adapter: ActivityPub::Adapter, content_type: 'application/activity+json'
end
private
def pundit_user
signed_request_account
end
def set_status
@status = @account.statuses.find(params[:status_id])
authorize @status, :show?
rescue Mastodon::NotPermittedError
not_found
end
def shares_collection_presenter
ActivityPub::CollectionPresenter.new(
id: account_status_shares_url(@account, @status),
type: :unordered,
size: @status.reblogs_count
)
end
end

View File

@@ -13,7 +13,7 @@ module Admin
redirect_to admin_account_path(@account_moderation_note.target_account_id), notice: I18n.t('admin.account_moderation_notes.created_msg')
else
@account = @account_moderation_note.target_account
@moderation_notes = @account.targeted_moderation_notes.latest
@moderation_notes = @account.targeted_moderation_notes.chronological.includes(:account)
@warnings = @account.strikes.custom.latest
render 'admin/accounts/show'

View File

@@ -33,7 +33,7 @@ module Admin
@deletion_request = @account.deletion_request
@account_moderation_note = current_account.account_moderation_notes.new(target_account: @account)
@moderation_notes = @account.targeted_moderation_notes.latest
@moderation_notes = @account.targeted_moderation_notes.chronological.includes(:account)
@warnings = @account.strikes.includes(:target_account, :account, :appeal).latest
@domain_block = DomainBlock.rule_for(@account.domain)
end

View File

@@ -7,17 +7,12 @@ module Admin
layout 'admin'
before_action :set_body_classes
before_action :set_cache_headers
after_action :verify_authorized
private
def set_body_classes
@body_classes = 'admin'
end
def set_cache_headers
response.cache_control.replace(private: true, no_store: true)
end

View File

@@ -7,12 +7,12 @@ module Admin
def index
authorize :dashboard, :index?
@pending_appeals_count = Appeal.pending.async_count
@pending_reports_count = Report.unresolved.async_count
@pending_tags_count = Tag.pending_review.async_count
@pending_users_count = User.pending.async_count
@system_checks = Admin::SystemCheck.perform(current_user)
@time_period = (29.days.ago.to_date...Time.now.utc.to_date)
@pending_users_count = User.pending.count
@pending_reports_count = Report.unresolved.count
@pending_tags_count = Tag.pending_review.count
@pending_appeals_count = Appeal.pending.count
end
end
end

View File

@@ -21,7 +21,7 @@ module Admin
redirect_to after_create_redirect_path, notice: I18n.t('admin.report_notes.created_msg')
else
@report_notes = @report.notes.includes(:account).order(id: :desc)
@report_notes = @report.notes.chronological.includes(:account)
@action_logs = @report.history.includes(:target)
@form = Admin::StatusBatchAction.new
@statuses = @report.statuses.with_includes

View File

@@ -13,7 +13,7 @@ module Admin
authorize @report, :show?
@report_note = @report.notes.new
@report_notes = @report.notes.includes(:account).order(id: :desc)
@report_notes = @report.notes.chronological.includes(:account)
@action_logs = @report.history.includes(:target)
@form = Admin::StatusBatchAction.new
@statuses = @report.statuses.with_includes

View File

@@ -7,7 +7,7 @@ class Api::OEmbedController < Api::BaseController
before_action :require_public_status!
def show
render json: @status, serializer: OEmbedSerializer, width: maxwidth_or_default, height: maxheight_or_default
render json: @status, serializer: OEmbedSerializer, width: params[:maxwidth], height: params[:maxheight]
end
private
@@ -23,12 +23,4 @@ class Api::OEmbedController < Api::BaseController
def status_finder
StatusFinder.new(params[:url])
end
def maxwidth_or_default
(params[:maxwidth].presence || 400).to_i
end
def maxheight_or_default
params[:maxheight].present? ? params[:maxheight].to_i : nil
end
end

View File

@@ -1,30 +0,0 @@
# frozen_string_literal: true
class Api::V1::Crypto::DeliveriesController < Api::BaseController
before_action -> { doorkeeper_authorize! :crypto }
before_action :require_user!
before_action :set_current_device
def create
devices.each do |device_params|
DeliverToDeviceService.new.call(current_account, @current_device, device_params)
end
render_empty
end
private
def set_current_device
@current_device = Device.find_by!(access_token: doorkeeper_token)
end
def resource_params
params.require(:device)
params.permit(device: [:account_id, :device_id, :type, :body, :hmac])
end
def devices
Array(resource_params[:device])
end
end

View File

@@ -1,47 +0,0 @@
# frozen_string_literal: true
class Api::V1::Crypto::EncryptedMessagesController < Api::BaseController
LIMIT = 80
before_action -> { doorkeeper_authorize! :crypto }
before_action :require_user!
before_action :set_current_device
before_action :set_encrypted_messages, only: :index
after_action :insert_pagination_headers, only: :index
def index
render json: @encrypted_messages, each_serializer: REST::EncryptedMessageSerializer
end
def clear
@current_device.encrypted_messages.up_to(params[:up_to_id]).delete_all
render_empty
end
private
def set_current_device
@current_device = Device.find_by!(access_token: doorkeeper_token)
end
def set_encrypted_messages
@encrypted_messages = @current_device.encrypted_messages.to_a_paginated_by_id(limit_param(LIMIT), params_slice(:max_id, :since_id, :min_id))
end
def next_path
api_v1_crypto_encrypted_messages_url pagination_params(max_id: pagination_max_id) if records_continue?
end
def prev_path
api_v1_crypto_encrypted_messages_url pagination_params(min_id: pagination_since_id) unless @encrypted_messages.empty?
end
def pagination_collection
@encrypted_messages
end
def records_continue?
@encrypted_messages.size == limit_param(LIMIT)
end
end

View File

@@ -1,25 +0,0 @@
# frozen_string_literal: true
class Api::V1::Crypto::Keys::ClaimsController < Api::BaseController
before_action -> { doorkeeper_authorize! :crypto }
before_action :require_user!
before_action :set_claim_results
def create
render json: @claim_results, each_serializer: REST::Keys::ClaimResultSerializer
end
private
def set_claim_results
@claim_results = devices.filter_map { |device_params| ::Keys::ClaimService.new.call(current_account, device_params[:account_id], device_params[:device_id]) }
end
def resource_params
params.permit(device: [:account_id, :device_id])
end
def devices
Array(resource_params[:device])
end
end

View File

@@ -1,17 +0,0 @@
# frozen_string_literal: true
class Api::V1::Crypto::Keys::CountsController < Api::BaseController
before_action -> { doorkeeper_authorize! :crypto }
before_action :require_user!
before_action :set_current_device
def show
render json: { one_time_keys: @current_device.one_time_keys.count }
end
private
def set_current_device
@current_device = Device.find_by!(access_token: doorkeeper_token)
end
end

View File

@@ -1,26 +0,0 @@
# frozen_string_literal: true
class Api::V1::Crypto::Keys::QueriesController < Api::BaseController
before_action -> { doorkeeper_authorize! :crypto }
before_action :require_user!
before_action :set_accounts
before_action :set_query_results
def create
render json: @query_results, each_serializer: REST::Keys::QueryResultSerializer
end
private
def set_accounts
@accounts = Account.where(id: account_ids).includes(:devices)
end
def set_query_results
@query_results = @accounts.filter_map { |account| ::Keys::QueryService.new.call(account) }
end
def account_ids
Array(params[:id]).map(&:to_i)
end
end

View File

@@ -1,29 +0,0 @@
# frozen_string_literal: true
class Api::V1::Crypto::Keys::UploadsController < Api::BaseController
before_action -> { doorkeeper_authorize! :crypto }
before_action :require_user!
def create
device = Device.find_or_initialize_by(access_token: doorkeeper_token)
device.transaction do
device.account = current_account
device.update!(resource_params[:device])
if resource_params[:one_time_keys].present? && resource_params[:one_time_keys].is_a?(Enumerable)
resource_params[:one_time_keys].each do |one_time_key_params|
device.one_time_keys.create!(one_time_key_params)
end
end
end
render json: device, serializer: REST::Keys::DeviceSerializer
end
private
def resource_params
params.permit(device: [:device_id, :name, :fingerprint_key, :identity_key], one_time_keys: [:key_id, :key, :signature])
end
end

View File

@@ -0,0 +1,27 @@
# frozen_string_literal: true
class Api::V1::DomainBlocks::PreviewsController < Api::BaseController
before_action -> { doorkeeper_authorize! :follow, :write, :'write:blocks' }
before_action :require_user!
before_action :set_domain
before_action :set_domain_block_preview
def show
render json: @domain_block_preview, serializer: REST::DomainBlockPreviewSerializer
end
private
def set_domain
@domain = TagManager.instance.normalize_domain(params[:domain])
end
def set_domain_block_preview
@domain_block_preview = with_read_replica do
DomainBlockPreviewPresenter.new(
following_count: current_account.following.where(domain: @domain).count,
followers_count: current_account.followers.where(domain: @domain).count
)
end
end
end

View File

@@ -7,6 +7,8 @@ class Api::V1::Peers::SearchController < Api::BaseController
skip_before_action :require_authenticated_user!, unless: :limited_federation_mode?
skip_around_action :set_locale
LIMIT = 10
vary_by ''
def index
@@ -35,10 +37,10 @@ class Api::V1::Peers::SearchController < Api::BaseController
field: 'accounts_count',
modifier: 'log2p',
},
}).limit(10).pluck(:domain)
}).limit(LIMIT).pluck(:domain)
else
domain = normalized_domain
@domains = Instance.searchable.domain_starts_with(domain).limit(10).pluck(:domain)
@domains = Instance.searchable.domain_starts_with(domain).limit(LIMIT).pluck(:domain)
end
rescue Addressable::URI::InvalidURIError
@domains = []

View File

@@ -0,0 +1,50 @@
# frozen_string_literal: true
class Api::V2::Notifications::AccountsController < Api::BaseController
before_action -> { doorkeeper_authorize! :read, :'read:notifications' }
before_action :require_user!
before_action :set_notifications!
after_action :insert_pagination_headers, only: :index
def index
@accounts = load_accounts
render json: @accounts, each_serializer: REST::AccountSerializer
end
private
def load_accounts
@paginated_notifications.map(&:from_account)
end
def set_notifications!
@paginated_notifications = begin
current_account
.notifications
.without_suspended
.where(group_key: params[:notification_group_key])
.includes(from_account: [:account_stat, :user])
.paginate_by_max_id(
limit_param(DEFAULT_ACCOUNTS_LIMIT),
params[:max_id],
params[:since_id]
)
end
end
def next_path
api_v2_notification_accounts_url pagination_params(max_id: pagination_max_id) if records_continue?
end
def prev_path
api_v2_notification_accounts_url pagination_params(min_id: pagination_since_id) unless @paginated_notifications.empty?
end
def pagination_collection
@paginated_notifications
end
def records_continue?
@paginated_notifications.size == limit_param(DEFAULT_ACCOUNTS_LIMIT)
end
end

View File

@@ -1,6 +1,6 @@
# frozen_string_literal: true
class Api::V2Alpha::NotificationsController < Api::BaseController
class Api::V2::NotificationsController < Api::BaseController
before_action -> { doorkeeper_authorize! :read, :'read:notifications' }, except: [:clear, :dismiss]
before_action -> { doorkeeper_authorize! :write, :'write:notifications' }, only: [:clear, :dismiss]
before_action :require_user!
@@ -13,7 +13,6 @@ class Api::V2Alpha::NotificationsController < Api::BaseController
def index
with_read_replica do
@notifications = load_notifications
@group_metadata = load_group_metadata
@grouped_notifications = load_grouped_notifications
@relationships = StatusRelationshipsPresenter.new(target_statuses_from_notifications, current_user&.account_id)
@presenter = GroupedNotificationsPresenter.new(@grouped_notifications, expand_accounts: expand_accounts_param)
@@ -22,7 +21,7 @@ class Api::V2Alpha::NotificationsController < Api::BaseController
ActiveRecord::Associations::Preloader.new(records: @presenter.accounts, associations: [:account_stat, { user: :role }]).call
end
MastodonOTELTracer.in_span('Api::V2Alpha::NotificationsController#index rendering') do |span|
MastodonOTELTracer.in_span('Api::V2::NotificationsController#index rendering') do |span|
statuses = @grouped_notifications.filter_map { |group| group.target_status&.id }
span.add_attributes(
@@ -34,7 +33,7 @@ class Api::V2Alpha::NotificationsController < Api::BaseController
'app.notification_grouping.expand_accounts_param' => expand_accounts_param
)
render json: @presenter, serializer: REST::DedupNotificationGroupSerializer, relationships: @relationships, group_metadata: @group_metadata, expand_accounts: expand_accounts_param
render json: @presenter, serializer: REST::DedupNotificationGroupSerializer, relationships: @relationships, expand_accounts: expand_accounts_param
end
end
@@ -42,13 +41,13 @@ class Api::V2Alpha::NotificationsController < Api::BaseController
limit = limit_param(DEFAULT_NOTIFICATIONS_COUNT_LIMIT, MAX_NOTIFICATIONS_COUNT_LIMIT)
with_read_replica do
render json: { count: browserable_account_notifications.paginate_groups_by_min_id(limit, min_id: notification_marker&.last_read_id).count }
render json: { count: browserable_account_notifications.paginate_groups_by_min_id(limit, min_id: notification_marker&.last_read_id, grouped_types: params[:grouped_types]).count }
end
end
def show
@notification = current_account.notifications.without_suspended.find_by!(group_key: params[:id])
presenter = GroupedNotificationsPresenter.new([NotificationGroup.from_notification(@notification)])
@notification = current_account.notifications.without_suspended.find_by!(group_key: params[:group_key])
presenter = GroupedNotificationsPresenter.new(NotificationGroup.from_notifications([@notification]))
render json: presenter, serializer: REST::DedupNotificationGroupSerializer
end
@@ -58,17 +57,17 @@ class Api::V2Alpha::NotificationsController < Api::BaseController
end
def dismiss
current_account.notifications.where(group_key: params[:id]).destroy_all
current_account.notifications.where(group_key: params[:group_key]).destroy_all
render_empty
end
private
def load_notifications
MastodonOTELTracer.in_span('Api::V2Alpha::NotificationsController#load_notifications') do
MastodonOTELTracer.in_span('Api::V2::NotificationsController#load_notifications') do
notifications = browserable_account_notifications.includes(from_account: [:account_stat, :user]).to_a_grouped_paginated_by_id(
limit_param(DEFAULT_NOTIFICATIONS_LIMIT),
params_slice(:max_id, :since_id, :min_id)
params.slice(:max_id, :since_id, :min_id, :grouped_types).permit(:max_id, :since_id, :min_id, grouped_types: [])
)
Notification.preload_cache_collection_target_statuses(notifications) do |target_statuses|
@@ -77,22 +76,11 @@ class Api::V2Alpha::NotificationsController < Api::BaseController
end
end
def load_group_metadata
return {} if @notifications.empty?
MastodonOTELTracer.in_span('Api::V2Alpha::NotificationsController#load_group_metadata') do
browserable_account_notifications
.where(group_key: @notifications.filter_map(&:group_key))
.where(id: (@notifications.last.id)..(@notifications.first.id))
.group(:group_key)
.pluck(:group_key, 'min(notifications.id) as min_id', 'max(notifications.id) as max_id', 'max(notifications.created_at) as latest_notification_at')
.to_h { |group_key, min_id, max_id, latest_notification_at| [group_key, { min_id: min_id, max_id: max_id, latest_notification_at: latest_notification_at }] }
end
end
def load_grouped_notifications
MastodonOTELTracer.in_span('Api::V2Alpha::NotificationsController#load_grouped_notifications') do
@notifications.map { |notification| NotificationGroup.from_notification(notification, max_id: @group_metadata.dig(notification.group_key, :max_id)) }
return [] if @notifications.empty?
MastodonOTELTracer.in_span('Api::V2::NotificationsController#load_grouped_notifications') do
NotificationGroup.from_notifications(@notifications, pagination_range: (@notifications.last.id)..(@notifications.first.id), grouped_types: params[:grouped_types])
end
end
@@ -113,11 +101,11 @@ class Api::V2Alpha::NotificationsController < Api::BaseController
end
def next_path
api_v2_alpha_notifications_url pagination_params(max_id: pagination_max_id) unless @notifications.empty?
api_v2_notifications_url pagination_params(max_id: pagination_max_id) unless @notifications.empty?
end
def prev_path
api_v2_alpha_notifications_url pagination_params(min_id: pagination_since_id) unless @notifications.empty?
api_v2_notifications_url pagination_params(min_id: pagination_since_id) unless @notifications.empty?
end
def pagination_collection
@@ -125,11 +113,11 @@ class Api::V2Alpha::NotificationsController < Api::BaseController
end
def browserable_params
params.permit(:include_filtered, types: [], exclude_types: [])
params.slice(:include_filtered, :types, :exclude_types, :grouped_types).permit(:include_filtered, types: [], exclude_types: [], grouped_types: [])
end
def pagination_params(core_params)
params.slice(:limit, :types, :exclude_types, :include_filtered).permit(:limit, :include_filtered, types: [], exclude_types: []).merge(core_params)
params.slice(:limit, :include_filtered, :types, :exclude_types, :grouped_types).permit(:limit, :include_filtered, types: [], exclude_types: [], grouped_types: []).merge(core_params)
end
def expand_accounts_param

View File

@@ -9,7 +9,7 @@ class Api::Web::EmbedsController < Api::Web::BaseController
return not_found if @status.hidden?
if @status.local?
render json: @status, serializer: OEmbedSerializer, width: 400
render json: @status, serializer: OEmbedSerializer
else
return not_found unless user_signed_in?

View File

@@ -11,7 +11,6 @@ class Auth::RegistrationsController < Devise::RegistrationsController
before_action :configure_sign_up_params, only: [:create]
before_action :set_sessions, only: [:edit, :update]
before_action :set_strikes, only: [:edit, :update]
before_action :set_body_classes, only: [:new, :create, :edit, :update]
before_action :require_not_suspended!, only: [:update]
before_action :set_cache_headers, only: [:edit, :update]
before_action :set_rules, only: :new
@@ -104,10 +103,6 @@ class Auth::RegistrationsController < Devise::RegistrationsController
private
def set_body_classes
@body_classes = 'admin' if %w(edit update).include?(action_name)
end
def set_invite
@invite = begin
invite = Invite.find_by(code: invite_code) if invite_code.present?

View File

@@ -20,11 +20,6 @@ class Auth::SessionsController < Devise::SessionsController
p.form_action(false)
end
def check_suspicious!
user = find_user
@login_is_suspicious = suspicious_sign_in?(user) unless user.nil?
end
def create
super do |resource|
# We only need to call this if this hasn't already been
@@ -101,6 +96,11 @@ class Auth::SessionsController < Devise::SessionsController
private
def check_suspicious!
user = find_user
@login_is_suspicious = suspicious_sign_in?(user) unless user.nil?
end
def home_paths(resource)
paths = [about_path, '/explore']

View File

@@ -20,7 +20,7 @@ module AccountControllerConcern
webfinger_account_link,
actor_url_link,
]
)
).to_s
end
def webfinger_account_link

View File

@@ -19,7 +19,7 @@ module Api::Pagination
links = []
links << [next_path, [%w(rel next)]] if next_path
links << [prev_path, [%w(rel prev)]] if prev_path
response.headers['Link'] = LinkHeader.new(links) unless links.empty?
response.headers['Link'] = LinkHeader.new(links).to_s unless links.empty?
end
def require_valid_pagination_options!

View File

@@ -8,6 +8,16 @@ module WebAppControllerConcern
before_action :redirect_unauthenticated_to_permalinks!
before_action :set_app_body_class
content_security_policy do |p|
policy = ContentSecurityPolicy.new
if policy.sso_host.present?
p.form_action policy.sso_host, -> { "https://#{request.host}/auth/auth/" }
else
p.form_action :none
end
end
end
def skip_csrf_meta_tags?
@@ -21,7 +31,7 @@ module WebAppControllerConcern
def redirect_unauthenticated_to_permalinks!
return if user_signed_in? # NOTE: Different from upstream because we allow moved users to log in
permalink_redirector = PermalinkRedirector.new(request.path)
permalink_redirector = PermalinkRedirector.new(request.original_fullpath)
return if permalink_redirector.redirect_path.blank?
expires_in(15.seconds, public: true, stale_while_revalidate: 30.seconds, stale_if_error: 1.day) unless user_signed_in?

View File

@@ -7,16 +7,11 @@ class Disputes::BaseController < ApplicationController
skip_before_action :require_functional!
before_action :set_body_classes
before_action :authenticate_user!
before_action :set_cache_headers
private
def set_body_classes
@body_classes = 'admin'
end
def set_cache_headers
response.cache_control.replace(private: true, no_store: true)
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_body_classes
before_action :set_cache_headers
PER_PAGE = 20
@@ -42,10 +41,6 @@ class Filters::StatusesController < ApplicationController
'remove' if params[:remove]
end
def set_body_classes
@body_classes = 'admin'
end
def set_cache_headers
response.cache_control.replace(private: true, no_store: true)
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_body_classes
before_action :set_cache_headers
def index
@@ -52,10 +51,6 @@ class FiltersController < ApplicationController
params.require(:custom_filter).permit(:title, :expires_in, :filter_action, context: [], keywords_attributes: [:id, :keyword, :whole_word, :_destroy])
end
def set_body_classes
@body_classes = 'admin'
end
def set_cache_headers
response.cache_control.replace(private: true, no_store: true)
end

View File

@@ -6,7 +6,6 @@ class InvitesController < ApplicationController
layout 'admin'
before_action :authenticate_user!
before_action :set_body_classes
before_action :set_cache_headers
def index
@@ -47,10 +46,6 @@ class InvitesController < ApplicationController
params.require(:invite).permit(:max_uses, :expires_in, :autofollow, :comment)
end
def set_body_classes
@body_classes = 'admin'
end
def set_cache_headers
response.cache_control.replace(private: true, no_store: true)
end

View File

@@ -19,9 +19,7 @@ class MediaController < ApplicationController
redirect_to @media_attachment.file.url(:original)
end
def player
@body_classes = 'player'
end
def player; end
private

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_body_classes
before_action :set_cache_headers
before_action :set_last_used_at_by_app, only: :index, unless: -> { request.format == :json }
@@ -23,10 +22,6 @@ class Oauth::AuthorizedApplicationsController < Doorkeeper::AuthorizedApplicatio
private
def set_body_classes
@body_classes = 'admin'
end
def store_current_location
store_location_for(:user, request.url)
end

View File

@@ -4,7 +4,6 @@ class Redirect::BaseController < ApplicationController
vary_by 'Accept-Language'
before_action :set_resource
before_action :set_app_body_class
def show
@redirect_path = ActivityPub::TagManager.instance.url_for(@resource)
@@ -14,10 +13,6 @@ class Redirect::BaseController < ApplicationController
private
def set_app_body_class
@body_classes = 'app-body'
end
def set_resource
raise NotImplementedError
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_body_classes
before_action :set_cache_headers
helper_method :following_relationship?, :followed_by_relationship?, :mutual_relationship?
@@ -68,10 +67,6 @@ class RelationshipsController < ApplicationController
end
end
def set_body_classes
@body_classes = 'admin'
end
def set_cache_headers
response.cache_control.replace(private: true, no_store: true)
end

View File

@@ -4,15 +4,10 @@ class Settings::BaseController < ApplicationController
layout 'admin'
before_action :authenticate_user!
before_action :set_body_classes
before_action :set_cache_headers
private
def set_body_classes
@body_classes = 'admin'
end
def set_cache_headers
response.cache_control.replace(private: true, no_store: true)
end

View File

@@ -15,7 +15,7 @@ module Settings
end
def create
session[:new_otp_secret] = User.generate_otp_secret(32)
session[:new_otp_secret] = User.generate_otp_secret
redirect_to new_settings_two_factor_authentication_confirmation_path
end

View File

@@ -2,14 +2,30 @@
class Settings::VerificationsController < Settings::BaseController
before_action :set_account
before_action :set_verified_links
def show
@verified_links = @account.fields.select(&:verified?)
def show; end
def update
if UpdateAccountService.new.call(@account, account_params)
ActivityPub::UpdateDistributionWorker.perform_async(@account.id)
redirect_to settings_verification_path, notice: I18n.t('generic.changes_saved_msg')
else
render :show
end
end
private
def account_params
params.require(:account).permit(:attribution_domains_as_text)
end
def set_account
@account = current_account
end
def set_verified_links
@verified_links = @account.fields.select(&:verified?)
end
end

View File

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

View File

@@ -4,13 +4,6 @@ class SharesController < ApplicationController
layout 'modal'
before_action :authenticate_user!
before_action :set_body_classes
def show; end
private
def set_body_classes
@body_classes = 'modal-layout compose-standalone'
end
end

View File

@@ -5,7 +5,6 @@ class StatusesCleanupController < ApplicationController
before_action :authenticate_user!
before_action :set_policy
before_action :set_body_classes
before_action :set_cache_headers
def show; end
@@ -34,10 +33,6 @@ class StatusesCleanupController < ApplicationController
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_body_classes
@body_classes = 'admin'
end
def set_cache_headers
response.cache_control.replace(private: true, no_store: true)
end

View File

@@ -11,7 +11,6 @@ class StatusesController < ApplicationController
before_action :require_account_signature!, only: [:show, :activity], if: -> { request.format == :json && authorized_fetch_mode? }
before_action :set_status
before_action :redirect_to_original, only: :show
before_action :set_body_classes, only: :embed
after_action :set_link_headers
@@ -51,12 +50,10 @@ class StatusesController < ApplicationController
private
def set_body_classes
@body_classes = 'with-modals'
end
def set_link_headers
response.headers['Link'] = LinkHeader.new([[ActivityPub::TagManager.instance.uri_for(@status), [%w(rel alternate), %w(type application/activity+json)]]])
response.headers['Link'] = LinkHeader.new(
[[ActivityPub::TagManager.instance.uri_for(@status), [%w(rel alternate), %w(type application/activity+json)]]]
).to_s
end
def set_status

View File

@@ -7,7 +7,23 @@ module WellKnown
def show
@webfinger_template = "#{webfinger_url}?resource={uri}"
expires_in 3.days, public: true
render content_type: 'application/xrd+xml', formats: [:xml]
respond_to do |format|
format.any do
render content_type: 'application/xrd+xml', formats: [:xml]
end
format.json do
render json: {
links: [
{
rel: 'lrdd',
template: @webfinger_template,
},
],
}
end
end
end
end
end

View File

@@ -19,14 +19,6 @@ module AccountsHelper
end
end
def account_action_button(account)
return if account.memorial? || account.moved?
link_to ActivityPub::TagManager.instance.url_for(account), class: 'button logo-button', target: '_new' do
safe_join([logo_as_symbol, t('accounts.follow')])
end
end
def hide_followers_count?(account)
Setting.hide_followers_count || account.user&.settings&.[]('hide_followers_count')
end

View File

@@ -35,4 +35,11 @@ module Admin::ActionLogsHelper
end
end
end
def sorted_action_log_types
Admin::ActionLogFilter::ACTION_TYPE_MAP
.keys
.map { |key| [I18n.t("admin.action_logs.action_types.#{key}"), key] }
.sort_by(&:first)
end
end

View File

@@ -18,6 +18,11 @@ module Admin::DashboardHelper
end
end
def date_range(range)
[l(range.first), l(range.last)]
.join(' - ')
end
def relevant_account_timestamp(account)
timestamp, exact = if account.user_current_sign_in_at && account.user_current_sign_in_at < 24.hours.ago
[account.user_current_sign_in_at, true]
@@ -25,6 +30,8 @@ module Admin::DashboardHelper
[account.user_current_sign_in_at, false]
elsif account.user_pending?
[account.user_created_at, true]
elsif account.suspended_at.present? && account.local? && account.user.nil?
[account.suspended_at, true]
elsif account.last_status_at.present?
[account.last_status_at, true]
else

View File

@@ -5,7 +5,7 @@ module Admin::Trends::StatusesHelper
text = if status.local?
status.text.split("\n").first
else
Nokogiri::HTML(status.text).css('html > body > *').first&.text
Nokogiri::HTML5(status.text).css('html > body > *').first&.text
end
return '' if text.blank?

View File

@@ -1,12 +1,6 @@
# frozen_string_literal: true
module ApplicationHelper
DANGEROUS_SCOPES = %w(
read
write
follow
).freeze
RTL_LOCALES = %i(
ar
ckb
@@ -86,7 +80,7 @@ module ApplicationHelper
def html_title
safe_join(
[content_for(:page_title).to_s.chomp, title]
.select(&:present?),
.compact_blank,
' - '
)
end
@@ -95,8 +89,11 @@ module ApplicationHelper
Rails.env.production? ? site_title : "#{site_title} (Dev)"
end
def class_for_scope(scope)
'scope-danger' if DANGEROUS_SCOPES.include?(scope.to_s)
def label_for_scope(scope)
safe_join [
tag.samp(scope, class: { 'scope-danger' => SessionActivation::DEFAULT_SCOPES.include?(scope.to_s) }),
tag.span(t("doorkeeper.scopes.#{scope}"), class: :hint),
]
end
def can?(action, record)
@@ -106,11 +103,16 @@ module ApplicationHelper
end
def material_symbol(icon, attributes = {})
inline_svg_tag(
"400-24px/#{icon}.svg",
class: ['icon', "material-#{icon}"].concat(attributes[:class].to_s.split),
role: :img,
data: attributes[:data]
safe_join(
[
inline_svg_tag(
"400-24px/#{icon}.svg",
class: ['icon', "material-#{icon}"].concat(attributes[:class].to_s.split),
role: :img,
data: attributes[:data]
),
' ',
]
)
end
@@ -154,6 +156,7 @@ module ApplicationHelper
def body_classes
output = body_class_string.split
output << content_for(:body_classes)
output << "flavour-#{current_flavour.parameterize}"
output << "skin-#{current_skin.parameterize}"
output << 'system-font' if current_account&.user&.setting_system_font_ui
@@ -238,6 +241,10 @@ module ApplicationHelper
full_asset_url(instance_presenter.mascot&.file&.url || frontend_asset_path('images/elephant_ui_plane.svg'))
end
def copyable_input(options = {})
tag.input(type: :text, maxlength: 999, spellcheck: false, readonly: true, **options)
end
# glitch-soc addition to handle the multiple flavors
def preload_locale_pack
supported_locales = Themes.instance.flavour(current_flavour)['locales']

View File

@@ -24,24 +24,8 @@ module ContextHelper
indexable: { 'toot' => 'http://joinmastodon.org/ns#', 'indexable' => 'toot:indexable' },
memorial: { 'toot' => 'http://joinmastodon.org/ns#', 'memorial' => 'toot:memorial' },
voters_count: { 'toot' => 'http://joinmastodon.org/ns#', 'votersCount' => 'toot:votersCount' },
olm: {
'toot' => 'http://joinmastodon.org/ns#',
'Device' => 'toot:Device',
'Ed25519Signature' => 'toot:Ed25519Signature',
'Ed25519Key' => 'toot:Ed25519Key',
'Curve25519Key' => 'toot:Curve25519Key',
'EncryptedMessage' => 'toot:EncryptedMessage',
'publicKeyBase64' => 'toot:publicKeyBase64',
'deviceId' => 'toot:deviceId',
'claim' => { '@type' => '@id', '@id' => 'toot:claim' },
'fingerprintKey' => { '@type' => '@id', '@id' => 'toot:fingerprintKey' },
'identityKey' => { '@type' => '@id', '@id' => 'toot:identityKey' },
'devices' => { '@type' => '@id', '@id' => 'toot:devices' },
'messageFranking' => 'toot:messageFranking',
'messageType' => 'toot:messageType',
'cipherText' => 'toot:cipherText',
},
suspended: { 'toot' => 'http://joinmastodon.org/ns#', 'suspended' => 'toot:suspended' },
attribution_domains: { 'toot' => 'http://joinmastodon.org/ns#', 'attributionDomains' => { '@id' => 'toot:attributionDomains', '@type' => '@id' } },
}.freeze
def full_context

View File

@@ -200,14 +200,6 @@ module JsonLdHelper
nil
end
def merge_context(context, new_context)
if context.is_a?(Array)
context << new_context
else
[context, new_context]
end
end
def response_successful?(response)
(200...300).cover?(response.code)
end

View File

@@ -238,9 +238,7 @@ module LanguagesHelper
# Helper for self.sorted_locale_keys
private_class_method def self.locale_name_for_sorting(locale)
if locale.blank? || locale == 'und'
'000'
elsif (supported_locale = SUPPORTED_LOCALES[locale.to_sym])
if (supported_locale = SUPPORTED_LOCALES[locale.to_sym])
ASCIIFolding.new.fold(supported_locale[1]).downcase
elsif (regional_locale = REGIONAL_LOCALE_NAMES[locale.to_sym])
ASCIIFolding.new.fold(regional_locale).downcase

View File

@@ -57,26 +57,6 @@ module MediaComponentHelper
end
end
def render_card_component(status, **options)
component_params = {
sensitive: sensitive_viewer?(status, current_account),
card: serialize_status_card(status).as_json,
}.merge(**options)
react_component :card, component_params
end
def render_poll_component(status, **options)
component_params = {
disabled: true,
poll: serialize_status_poll(status).as_json,
}.merge(**options)
react_component :poll, component_params do
render partial: 'statuses/poll', locals: { status: status, poll: status.preloadable_poll, autoplay: prefers_autoplay? }
end
end
private
def serialize_media_attachment(attachment)
@@ -86,22 +66,6 @@ module MediaComponentHelper
)
end
def serialize_status_card(status)
ActiveModelSerializers::SerializableResource.new(
status.preview_card,
serializer: REST::PreviewCardSerializer
)
end
def serialize_status_poll(status)
ActiveModelSerializers::SerializableResource.new(
status.preloadable_poll,
serializer: REST::PollSerializer,
scope: current_user,
scope_name: :current_user
)
end
def sensitive_viewer?(status, account)
if !account.nil? && account.id == status.account_id
status.sensitive

View File

@@ -10,16 +10,17 @@ module SettingsHelper
end
def featured_tags_hint(recently_used_tags)
safe_join(
[
t('simple_form.hints.featured_tag.name'),
safe_join(
links_for_featured_tags(recently_used_tags),
', '
),
],
' '
)
recently_used_tags.present? &&
safe_join(
[
t('simple_form.hints.featured_tag.name'),
safe_join(
links_for_featured_tags(recently_used_tags),
', '
),
],
' '
)
end
def session_device_icon(session)

View File

@@ -4,6 +4,13 @@ module StatusesHelper
EMBEDDED_CONTROLLER = 'statuses'
EMBEDDED_ACTION = 'embed'
VISIBLITY_ICONS = {
public: 'globe',
unlisted: 'lock_open',
private: 'lock',
direct: 'alternate_email',
}.freeze
def nothing_here(extra_classes = '')
content_tag(:div, class: "nothing-here #{extra_classes}") do
t('accounts.nothing_here')
@@ -57,17 +64,8 @@ module StatusesHelper
embedded_view? ? '_blank' : nil
end
def fa_visibility_icon(status)
case status.visibility
when 'public'
material_symbol 'globe'
when 'unlisted'
material_symbol 'lock_open'
when 'private'
material_symbol 'lock'
when 'direct'
material_symbol 'alternate_email'
end
def visibility_icon(status)
VISIBLITY_ICONS[status.visibility.to_sym]
end
def embedded_view?

View File

@@ -1,7 +0,0 @@
# frozen_string_literal: true
module WebfingerHelper
def webfinger!(uri)
Webfinger.new(uri).perform
end
end

View File

@@ -0,0 +1,74 @@
import './public-path';
import { createRoot } from 'react-dom/client';
import { afterInitialRender } from 'mastodon/../hooks/useRenderSignal';
import { start } from '../mastodon/common';
import { Status } from '../mastodon/features/standalone/status';
import { loadPolyfills } from '../mastodon/polyfills';
import ready from '../mastodon/ready';
start();
function loaded() {
const mountNode = document.getElementById('mastodon-status');
if (mountNode) {
const attr = mountNode.getAttribute('data-props');
if (!attr) return;
const props = JSON.parse(attr) as { id: string; locale: string };
const root = createRoot(mountNode);
root.render(<Status {...props} />);
}
}
function main() {
ready(loaded).catch((error: unknown) => {
console.error(error);
});
}
loadPolyfills()
.then(main)
.catch((error: unknown) => {
console.error(error);
});
interface SetHeightMessage {
type: 'setHeight';
id: string;
height: number;
}
function isSetHeightMessage(data: unknown): data is SetHeightMessage {
if (
data &&
typeof data === 'object' &&
'type' in data &&
data.type === 'setHeight'
)
return true;
else return false;
}
window.addEventListener('message', (e) => {
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- typings are not correct, it can be null in very rare cases
if (!e.data || !isSetHeightMessage(e.data) || !window.parent) return;
const data = e.data;
// We use a timeout to allow for the React page to render before calculating the height
afterInitialRender(() => {
window.parent.postMessage(
{
type: 'setHeight',
id: data.id,
height: document.getElementsByTagName('html')[0]?.scrollHeight,
},
'*',
);
});
});

View File

@@ -37,43 +37,6 @@ const messages = defineMessages({
},
});
interface SetHeightMessage {
type: 'setHeight';
id: string;
height: number;
}
function isSetHeightMessage(data: unknown): data is SetHeightMessage {
if (
data &&
typeof data === 'object' &&
'type' in data &&
data.type === 'setHeight'
)
return true;
else return false;
}
window.addEventListener('message', (e) => {
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- typings are not correct, it can be null in very rare cases
if (!e.data || !isSetHeightMessage(e.data) || !window.parent) return;
const data = e.data;
ready(() => {
window.parent.postMessage(
{
type: 'setHeight',
id: data.id,
height: document.getElementsByTagName('html')[0]?.scrollHeight,
},
'*',
);
}).catch((e: unknown) => {
console.error('Error in setHeightMessage postMessage', e);
});
});
function loaded() {
const { messages: localeData } = getLocale();

View File

@@ -6,5 +6,4 @@ export const submitAccountNote = createDataLoadingThunk(
({ accountId, note }: { accountId: string; note: string }) =>
apiSubmitAccountNote(accountId, note),
(relationship) => ({ relationship }),
{ skipLoading: true },
);

View File

@@ -1,4 +1,5 @@
import { browserHistory } from 'flavours/glitch/components/router';
import { debounceWithDispatchAndArguments } from 'flavours/glitch/utils/debounce';
import api, { getLinks } from '../api';
@@ -462,6 +463,20 @@ export function expandFollowingFail(id, error) {
};
}
const debouncedFetchRelationships = debounceWithDispatchAndArguments((dispatch, ...newAccountIds) => {
if (newAccountIds.length === 0) {
return;
}
dispatch(fetchRelationshipsRequest(newAccountIds));
api().get(`/api/v1/accounts/relationships?with_suspended=true&${newAccountIds.map(id => `id[]=${id}`).join('&')}`).then(response => {
dispatch(fetchRelationshipsSuccess({ relationships: response.data }));
}).catch(error => {
dispatch(fetchRelationshipsFail(error));
});
}, { delay: 500 });
export function fetchRelationships(accountIds) {
return (dispatch, getState) => {
const state = getState();
@@ -473,13 +488,7 @@ export function fetchRelationships(accountIds) {
return;
}
dispatch(fetchRelationshipsRequest(newAccountIds));
api().get(`/api/v1/accounts/relationships?with_suspended=true&${newAccountIds.map(id => `id[]=${id}`).join('&')}`).then(response => {
dispatch(fetchRelationshipsSuccess({ relationships: response.data }));
}).catch(error => {
dispatch(fetchRelationshipsFail(error));
});
debouncedFetchRelationships(dispatch, ...newAccountIds);
};
}

View File

@@ -1,5 +1,7 @@
import { defineMessages } from 'react-intl';
import { AxiosError } from 'axios';
const messages = defineMessages({
unexpectedTitle: { id: 'alert.unexpected.title', defaultMessage: 'Oops!' },
unexpectedMessage: { id: 'alert.unexpected.message', defaultMessage: 'An unexpected error occurred.' },
@@ -50,6 +52,11 @@ export const showAlertForError = (error, skipNotFound = false) => {
});
}
// An aborted request, e.g. due to reloading the browser window, it not really error
if (error.code === AxiosError.ECONNABORTED) {
return { type: ALERT_NOOP };
}
console.error(error);
return showAlert({

View File

@@ -1,12 +0,0 @@
import { saveSettings } from './settings';
export const LANGUAGE_USE = 'LANGUAGE_USE';
export const useLanguage = language => dispatch => {
dispatch({
type: LANGUAGE_USE,
language,
});
dispatch(saveSettings());
};

View File

@@ -37,8 +37,7 @@ export const synchronouslySubmitMarkers = createAppAsyncThunk(
});
return;
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
} else if ('navigator' && 'sendBeacon' in navigator) {
} else if ('sendBeacon' in navigator) {
// Failing that, we can use sendBeacon, but we have to encode the data as
// FormData for DoorKeeper to recognize the token.
const formData = new FormData();
@@ -64,7 +63,7 @@ export const synchronouslySubmitMarkers = createAppAsyncThunk(
client.setRequestHeader('Content-Type', 'application/json');
client.setRequestHeader('Authorization', `Bearer ${accessToken}`);
client.send(JSON.stringify(params));
} catch (e) {
} catch {
// Do not make the BeforeUnload handler error out
}
},
@@ -75,17 +74,7 @@ interface MarkerParam {
}
function getLastNotificationId(state: RootState): string | undefined {
// eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access
const enableBeta = state.settings.getIn(
['notifications', 'groupingBeta'],
false,
) as boolean;
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
return enableBeta
? state.notificationGroups.lastReadId
: // @ts-expect-error state.notifications is not yet typed
// eslint-disable-next-line @typescript-eslint/no-unsafe-call
state.getIn(['notifications', 'lastReadId']);
return state.notificationGroups.lastReadId;
}
const buildPostMarkersParams = (state: RootState) => {

View File

@@ -2,7 +2,7 @@ import { createAction } from '@reduxjs/toolkit';
import {
apiClearNotifications,
apiFetchNotifications,
apiFetchNotificationGroups,
} from 'flavours/glitch/api/notifications';
import type { ApiAccountJSON } from 'flavours/glitch/api_types/accounts';
import type {
@@ -18,7 +18,7 @@ import {
selectSettingsNotificationsQuickFilterActive,
selectSettingsNotificationsShows,
} from 'flavours/glitch/selectors/settings';
import type { AppDispatch } from 'flavours/glitch/store';
import type { AppDispatch, RootState } from 'flavours/glitch/store';
import {
createAppAsyncThunk,
createDataLoadingThunk,
@@ -32,6 +32,14 @@ function excludeAllTypesExcept(filter: string) {
return allNotificationTypes.filter((item) => item !== filter);
}
function getExcludedTypes(state: RootState) {
const activeFilter = selectSettingsNotificationsQuickFilterActive(state);
return activeFilter === 'all'
? selectSettingsNotificationsExcludedTypes(state)
: excludeAllTypesExcept(activeFilter);
}
function dispatchAssociatedRecords(
dispatch: AppDispatch,
notifications: ApiNotificationGroupJSON[] | ApiNotificationJSON[],
@@ -60,19 +68,19 @@ function dispatchAssociatedRecords(
dispatch(importFetchedStatuses(fetchedStatuses));
}
const supportedGroupedNotificationTypes = ['favourite', 'reblog'];
export function shouldGroupNotificationType(type: string) {
return supportedGroupedNotificationTypes.includes(type);
}
export const fetchNotifications = createDataLoadingThunk(
'notificationGroups/fetch',
async (_params, { getState }) => {
const activeFilter =
selectSettingsNotificationsQuickFilterActive(getState());
return apiFetchNotifications({
exclude_types:
activeFilter === 'all'
? selectSettingsNotificationsExcludedTypes(getState())
: excludeAllTypesExcept(activeFilter),
});
},
async (_params, { getState }) =>
apiFetchNotificationGroups({
grouped_types: supportedGroupedNotificationTypes,
exclude_types: getExcludedTypes(getState()),
}),
({ notifications, accounts, statuses }, { dispatch }) => {
dispatch(importFetchedAccounts(accounts));
dispatch(importFetchedStatuses(statuses));
@@ -92,9 +100,12 @@ export const fetchNotifications = createDataLoadingThunk(
export const fetchNotificationsGap = createDataLoadingThunk(
'notificationGroups/fetchGap',
async (params: { gap: NotificationGap }) =>
apiFetchNotifications({ max_id: params.gap.maxId }),
async (params: { gap: NotificationGap }, { getState }) =>
apiFetchNotificationGroups({
grouped_types: supportedGroupedNotificationTypes,
max_id: params.gap.maxId,
exclude_types: getExcludedTypes(getState()),
}),
({ notifications, accounts, statuses }, { dispatch }) => {
dispatch(importFetchedAccounts(accounts));
dispatch(importFetchedStatuses(statuses));
@@ -107,8 +118,10 @@ export const fetchNotificationsGap = createDataLoadingThunk(
export const pollRecentNotifications = createDataLoadingThunk(
'notificationGroups/pollRecentNotifications',
async (_params, { getState }) => {
return apiFetchNotifications({
return apiFetchNotificationGroups({
grouped_types: supportedGroupedNotificationTypes,
max_id: undefined,
exclude_types: getExcludedTypes(getState()),
// In slow mode, we don't want to include notifications that duplicate the already-displayed ones
since_id: usePendingItems
? getState().notificationGroups.groups.find(
@@ -183,7 +196,6 @@ export const setNotificationsFilter = createAppAsyncThunk(
path: ['notifications', 'quickFilter', 'active'],
value: filterType,
});
// dispatch(expandNotifications({ forceLoad: true }));
void dispatch(fetchNotifications());
dispatch(saveSettings());
},

View File

@@ -17,6 +17,6 @@ export const updateNotificationsPolicy = createDataLoadingThunk(
(policy: Partial<NotificationPolicy>) => apiUpdateNotificationsPolicy(policy),
);
export const decreasePendingNotificationsCount = createAction<number>(
'notificationPolicy/decreasePendingNotificationCount',
export const decreasePendingRequestsCount = createAction<number>(
'notificationPolicy/decreasePendingRequestsCount',
);

View File

@@ -0,0 +1,214 @@
import {
apiFetchNotificationRequest,
apiFetchNotificationRequests,
apiFetchNotifications,
apiAcceptNotificationRequest,
apiDismissNotificationRequest,
apiAcceptNotificationRequests,
apiDismissNotificationRequests,
} from 'flavours/glitch/api/notifications';
import type { ApiAccountJSON } from 'flavours/glitch/api_types/accounts';
import type {
ApiNotificationGroupJSON,
ApiNotificationJSON,
} from 'flavours/glitch/api_types/notifications';
import type { ApiStatusJSON } from 'flavours/glitch/api_types/statuses';
import type { AppDispatch } from 'flavours/glitch/store';
import { createDataLoadingThunk } from 'flavours/glitch/store/typed_functions';
import { importFetchedAccounts, importFetchedStatuses } from './importer';
import { decreasePendingRequestsCount } from './notification_policies';
// TODO: refactor with notification_groups
function dispatchAssociatedRecords(
dispatch: AppDispatch,
notifications: ApiNotificationGroupJSON[] | ApiNotificationJSON[],
) {
const fetchedAccounts: ApiAccountJSON[] = [];
const fetchedStatuses: ApiStatusJSON[] = [];
notifications.forEach((notification) => {
if (notification.type === 'admin.report') {
fetchedAccounts.push(notification.report.target_account);
}
if (notification.type === 'moderation_warning') {
fetchedAccounts.push(notification.moderation_warning.target_account);
}
if ('status' in notification && notification.status) {
fetchedStatuses.push(notification.status);
}
});
if (fetchedAccounts.length > 0)
dispatch(importFetchedAccounts(fetchedAccounts));
if (fetchedStatuses.length > 0)
dispatch(importFetchedStatuses(fetchedStatuses));
}
export const fetchNotificationRequests = createDataLoadingThunk(
'notificationRequests/fetch',
async (_params, { getState }) => {
let sinceId = undefined;
if (getState().notificationRequests.items.length > 0) {
sinceId = getState().notificationRequests.items[0]?.id;
}
return apiFetchNotificationRequests({
since_id: sinceId,
});
},
({ requests, links }, { dispatch }) => {
const next = links.refs.find((link) => link.rel === 'next');
dispatch(importFetchedAccounts(requests.map((request) => request.account)));
return { requests, next: next?.uri };
},
{
condition: (_params, { getState }) =>
!getState().notificationRequests.isLoading,
},
);
export const fetchNotificationRequest = createDataLoadingThunk(
'notificationRequest/fetch',
async ({ id }: { id: string }) => apiFetchNotificationRequest(id),
{
condition: ({ id }, { getState }) =>
!(
getState().notificationRequests.current.item?.id === id ||
getState().notificationRequests.current.isLoading
),
},
);
export const expandNotificationRequests = createDataLoadingThunk(
'notificationRequests/expand',
async (_, { getState }) => {
const nextUrl = getState().notificationRequests.next;
if (!nextUrl) throw new Error('missing URL');
return apiFetchNotificationRequests(undefined, nextUrl);
},
({ requests, links }, { dispatch }) => {
const next = links.refs.find((link) => link.rel === 'next');
dispatch(importFetchedAccounts(requests.map((request) => request.account)));
return { requests, next: next?.uri };
},
{
condition: (_, { getState }) =>
!!getState().notificationRequests.next &&
!getState().notificationRequests.isLoading,
},
);
export const fetchNotificationsForRequest = createDataLoadingThunk(
'notificationRequest/fetchNotifications',
async ({ accountId }: { accountId: string }, { getState }) => {
const sinceId =
// @ts-expect-error current.notifications.items is not yet typed
// eslint-disable-next-line @typescript-eslint/no-unsafe-call
getState().notificationRequests.current.notifications.items[0]?.get(
'id',
) as string | undefined;
return apiFetchNotifications({
since_id: sinceId,
account_id: accountId,
});
},
({ notifications, links }, { dispatch }) => {
const next = links.refs.find((link) => link.rel === 'next');
dispatchAssociatedRecords(dispatch, notifications);
return { notifications, next: next?.uri };
},
{
condition: ({ accountId }, { getState }) => {
const current = getState().notificationRequests.current;
return !(
current.item?.account_id === accountId &&
current.notifications.isLoading
);
},
},
);
export const expandNotificationsForRequest = createDataLoadingThunk(
'notificationRequest/expandNotifications',
async (_, { getState }) => {
const nextUrl = getState().notificationRequests.current.notifications.next;
if (!nextUrl) throw new Error('missing URL');
return apiFetchNotifications(undefined, nextUrl);
},
({ notifications, links }, { dispatch }) => {
const next = links.refs.find((link) => link.rel === 'next');
dispatchAssociatedRecords(dispatch, notifications);
return { notifications, next: next?.uri };
},
{
condition: ({ accountId }: { accountId: string }, { getState }) => {
const url = getState().notificationRequests.current.notifications.next;
return (
!!url &&
!getState().notificationRequests.current.notifications.isLoading &&
getState().notificationRequests.current.item?.account_id === accountId
);
},
},
);
export const acceptNotificationRequest = createDataLoadingThunk(
'notificationRequest/accept',
({ id }: { id: string }) => apiAcceptNotificationRequest(id),
(_data, { dispatch, discardLoadData }) => {
dispatch(decreasePendingRequestsCount(1));
// The payload is not used in any functions
return discardLoadData;
},
);
export const dismissNotificationRequest = createDataLoadingThunk(
'notificationRequest/dismiss',
({ id }: { id: string }) => apiDismissNotificationRequest(id),
(_data, { dispatch, discardLoadData }) => {
dispatch(decreasePendingRequestsCount(1));
// The payload is not used in any functions
return discardLoadData;
},
);
export const acceptNotificationRequests = createDataLoadingThunk(
'notificationRequests/acceptBulk',
({ ids }: { ids: string[] }) => apiAcceptNotificationRequests(ids),
(_data, { dispatch, discardLoadData, actionArg: { ids } }) => {
dispatch(decreasePendingRequestsCount(ids.length));
// The payload is not used in any functions
return discardLoadData;
},
);
export const dismissNotificationRequests = createDataLoadingThunk(
'notificationRequests/dismissBulk',
({ ids }: { ids: string[] }) => apiDismissNotificationRequests(ids),
(_data, { dispatch, discardLoadData, actionArg: { ids } }) => {
dispatch(decreasePendingRequestsCount(ids.length));
// The payload is not used in any functions
return discardLoadData;
},
);

View File

@@ -10,7 +10,7 @@ import api, { getLinks } from '../api';
import { unescapeHTML } from '../utils/html';
import { requestNotificationPermission } from '../utils/notifications';
import { fetchFollowRequests, fetchRelationships } from './accounts';
import { fetchFollowRequests } from './accounts';
import {
importFetchedAccount,
importFetchedAccounts,
@@ -18,7 +18,6 @@ import {
importFetchedStatuses,
} from './importer';
import { submitMarkers } from './markers';
import { decreasePendingNotificationsCount } from './notification_policies';
import { notificationsUpdate } from "./notifications_typed";
import { register as registerPushNotifications } from './push_notifications';
import { saveSettings } from './settings';
@@ -57,26 +56,6 @@ export const NOTIFICATIONS_MARK_AS_READ = 'NOTIFICATIONS_MARK_AS_READ';
export const NOTIFICATIONS_SET_BROWSER_SUPPORT = 'NOTIFICATIONS_SET_BROWSER_SUPPORT';
export const NOTIFICATIONS_SET_BROWSER_PERMISSION = 'NOTIFICATIONS_SET_BROWSER_PERMISSION';
export const NOTIFICATION_REQUESTS_FETCH_REQUEST = 'NOTIFICATION_REQUESTS_FETCH_REQUEST';
export const NOTIFICATION_REQUESTS_FETCH_SUCCESS = 'NOTIFICATION_REQUESTS_FETCH_SUCCESS';
export const NOTIFICATION_REQUESTS_FETCH_FAIL = 'NOTIFICATION_REQUESTS_FETCH_FAIL';
export const NOTIFICATION_REQUESTS_EXPAND_REQUEST = 'NOTIFICATION_REQUESTS_EXPAND_REQUEST';
export const NOTIFICATION_REQUESTS_EXPAND_SUCCESS = 'NOTIFICATION_REQUESTS_EXPAND_SUCCESS';
export const NOTIFICATION_REQUESTS_EXPAND_FAIL = 'NOTIFICATION_REQUESTS_EXPAND_FAIL';
export const NOTIFICATION_REQUEST_FETCH_REQUEST = 'NOTIFICATION_REQUEST_FETCH_REQUEST';
export const NOTIFICATION_REQUEST_FETCH_SUCCESS = 'NOTIFICATION_REQUEST_FETCH_SUCCESS';
export const NOTIFICATION_REQUEST_FETCH_FAIL = 'NOTIFICATION_REQUEST_FETCH_FAIL';
export const NOTIFICATION_REQUEST_ACCEPT_REQUEST = 'NOTIFICATION_REQUEST_ACCEPT_REQUEST';
export const NOTIFICATION_REQUEST_ACCEPT_SUCCESS = 'NOTIFICATION_REQUEST_ACCEPT_SUCCESS';
export const NOTIFICATION_REQUEST_ACCEPT_FAIL = 'NOTIFICATION_REQUEST_ACCEPT_FAIL';
export const NOTIFICATION_REQUEST_DISMISS_REQUEST = 'NOTIFICATION_REQUEST_DISMISS_REQUEST';
export const NOTIFICATION_REQUEST_DISMISS_SUCCESS = 'NOTIFICATION_REQUEST_DISMISS_SUCCESS';
export const NOTIFICATION_REQUEST_DISMISS_FAIL = 'NOTIFICATION_REQUEST_DISMISS_FAIL';
export const NOTIFICATION_REQUESTS_ACCEPT_REQUEST = 'NOTIFICATION_REQUESTS_ACCEPT_REQUEST';
export const NOTIFICATION_REQUESTS_ACCEPT_SUCCESS = 'NOTIFICATION_REQUESTS_ACCEPT_SUCCESS';
export const NOTIFICATION_REQUESTS_ACCEPT_FAIL = 'NOTIFICATION_REQUESTS_ACCEPT_FAIL';
@@ -85,32 +64,10 @@ export const NOTIFICATION_REQUESTS_DISMISS_REQUEST = 'NOTIFICATION_REQUESTS_DISM
export const NOTIFICATION_REQUESTS_DISMISS_SUCCESS = 'NOTIFICATION_REQUESTS_DISMISS_SUCCESS';
export const NOTIFICATION_REQUESTS_DISMISS_FAIL = 'NOTIFICATION_REQUESTS_DISMISS_FAIL';
export const NOTIFICATIONS_FOR_REQUEST_FETCH_REQUEST = 'NOTIFICATIONS_FOR_REQUEST_FETCH_REQUEST';
export const NOTIFICATIONS_FOR_REQUEST_FETCH_SUCCESS = 'NOTIFICATIONS_FOR_REQUEST_FETCH_SUCCESS';
export const NOTIFICATIONS_FOR_REQUEST_FETCH_FAIL = 'NOTIFICATIONS_FOR_REQUEST_FETCH_FAIL';
export const NOTIFICATIONS_FOR_REQUEST_EXPAND_REQUEST = 'NOTIFICATIONS_FOR_REQUEST_EXPAND_REQUEST';
export const NOTIFICATIONS_FOR_REQUEST_EXPAND_SUCCESS = 'NOTIFICATIONS_FOR_REQUEST_EXPAND_SUCCESS';
export const NOTIFICATIONS_FOR_REQUEST_EXPAND_FAIL = 'NOTIFICATIONS_FOR_REQUEST_EXPAND_FAIL';
defineMessages({
mention: { id: 'notification.mention', defaultMessage: '{name} mentioned you' },
});
const fetchRelatedRelationships = (dispatch, notifications) => {
const accountIds = notifications.filter(item => ['follow', 'follow_request', 'admin.sign_up'].indexOf(item.type) !== -1).map(item => item.account.id);
if (accountIds.length > 0) {
dispatch(fetchRelationships(accountIds));
}
};
const selectNotificationCountForRequest = (state, id) => {
const requests = state.getIn(['notificationRequests', 'items']);
const thisRequest = requests.find(request => request.get('id') === id);
return thisRequest ? thisRequest.get('notifications_count') : 0;
};
export const loadPending = () => ({
type: NOTIFICATIONS_LOAD_PENDING,
});
@@ -153,8 +110,6 @@ export function updateNotifications(notification, intlMessages, intlLocale) {
dispatch(notificationsUpdate({ notification, preferPendingItems, playSound: playSound && !filtered}));
fetchRelatedRelationships(dispatch, [notification]);
} else if (playSound && !filtered) {
dispatch({
type: NOTIFICATIONS_UPDATE_NOOP,
@@ -246,7 +201,6 @@ export function expandNotifications({ maxId = undefined, forceLoad = false }) {
dispatch(importFetchedAccounts(response.data.filter(item => item.report).map(item => item.report.target_account)));
dispatch(expandNotificationsSuccess(response.data, next ? next.uri : null, isLoadingMore, isLoadingRecent, isLoadingRecent && preferPendingItems));
fetchRelatedRelationships(dispatch, response.data);
dispatch(submitMarkers());
} catch(error) {
dispatch(expandNotificationsFail(error, isLoadingMore));
@@ -431,296 +385,3 @@ export function setBrowserPermission (value) {
value,
};
}
export const fetchNotificationRequests = () => (dispatch, getState) => {
const params = {};
if (getState().getIn(['notificationRequests', 'isLoading'])) {
return;
}
if (getState().getIn(['notificationRequests', 'items'])?.size > 0) {
params.since_id = getState().getIn(['notificationRequests', 'items', 0, 'id']);
}
dispatch(fetchNotificationRequestsRequest());
api().get('/api/v1/notifications/requests', { params }).then(response => {
const next = getLinks(response).refs.find(link => link.rel === 'next');
dispatch(importFetchedAccounts(response.data.map(x => x.account)));
dispatch(fetchNotificationRequestsSuccess(response.data, next ? next.uri : null));
}).catch(err => {
dispatch(fetchNotificationRequestsFail(err));
});
};
export const fetchNotificationRequestsRequest = () => ({
type: NOTIFICATION_REQUESTS_FETCH_REQUEST,
});
export const fetchNotificationRequestsSuccess = (requests, next) => ({
type: NOTIFICATION_REQUESTS_FETCH_SUCCESS,
requests,
next,
});
export const fetchNotificationRequestsFail = error => ({
type: NOTIFICATION_REQUESTS_FETCH_FAIL,
error,
});
export const expandNotificationRequests = () => (dispatch, getState) => {
const url = getState().getIn(['notificationRequests', 'next']);
if (!url || getState().getIn(['notificationRequests', 'isLoading'])) {
return;
}
dispatch(expandNotificationRequestsRequest());
api().get(url).then(response => {
const next = getLinks(response).refs.find(link => link.rel === 'next');
dispatch(importFetchedAccounts(response.data.map(x => x.account)));
dispatch(expandNotificationRequestsSuccess(response.data, next?.uri));
}).catch(err => {
dispatch(expandNotificationRequestsFail(err));
});
};
export const expandNotificationRequestsRequest = () => ({
type: NOTIFICATION_REQUESTS_EXPAND_REQUEST,
});
export const expandNotificationRequestsSuccess = (requests, next) => ({
type: NOTIFICATION_REQUESTS_EXPAND_SUCCESS,
requests,
next,
});
export const expandNotificationRequestsFail = error => ({
type: NOTIFICATION_REQUESTS_EXPAND_FAIL,
error,
});
export const fetchNotificationRequest = id => (dispatch, getState) => {
const current = getState().getIn(['notificationRequests', 'current']);
if (current.getIn(['item', 'id']) === id || current.get('isLoading')) {
return;
}
dispatch(fetchNotificationRequestRequest(id));
api().get(`/api/v1/notifications/requests/${id}`).then(({ data }) => {
dispatch(fetchNotificationRequestSuccess(data));
}).catch(err => {
dispatch(fetchNotificationRequestFail(id, err));
});
};
export const fetchNotificationRequestRequest = id => ({
type: NOTIFICATION_REQUEST_FETCH_REQUEST,
id,
});
export const fetchNotificationRequestSuccess = request => ({
type: NOTIFICATION_REQUEST_FETCH_SUCCESS,
request,
});
export const fetchNotificationRequestFail = (id, error) => ({
type: NOTIFICATION_REQUEST_FETCH_FAIL,
id,
error,
});
export const acceptNotificationRequest = (id) => (dispatch, getState) => {
const count = selectNotificationCountForRequest(getState(), id);
dispatch(acceptNotificationRequestRequest(id));
api().post(`/api/v1/notifications/requests/${id}/accept`).then(() => {
dispatch(acceptNotificationRequestSuccess(id));
dispatch(decreasePendingNotificationsCount(count));
}).catch(err => {
dispatch(acceptNotificationRequestFail(id, err));
});
};
export const acceptNotificationRequestRequest = id => ({
type: NOTIFICATION_REQUEST_ACCEPT_REQUEST,
id,
});
export const acceptNotificationRequestSuccess = id => ({
type: NOTIFICATION_REQUEST_ACCEPT_SUCCESS,
id,
});
export const acceptNotificationRequestFail = (id, error) => ({
type: NOTIFICATION_REQUEST_ACCEPT_FAIL,
id,
error,
});
export const dismissNotificationRequest = (id) => (dispatch, getState) => {
const count = selectNotificationCountForRequest(getState(), id);
dispatch(dismissNotificationRequestRequest(id));
api().post(`/api/v1/notifications/requests/${id}/dismiss`).then(() =>{
dispatch(dismissNotificationRequestSuccess(id));
dispatch(decreasePendingNotificationsCount(count));
}).catch(err => {
dispatch(dismissNotificationRequestFail(id, err));
});
};
export const dismissNotificationRequestRequest = id => ({
type: NOTIFICATION_REQUEST_DISMISS_REQUEST,
id,
});
export const dismissNotificationRequestSuccess = id => ({
type: NOTIFICATION_REQUEST_DISMISS_SUCCESS,
id,
});
export const dismissNotificationRequestFail = (id, error) => ({
type: NOTIFICATION_REQUEST_DISMISS_FAIL,
id,
error,
});
export const acceptNotificationRequests = (ids) => (dispatch, getState) => {
const count = ids.reduce((count, id) => count + selectNotificationCountForRequest(getState(), id), 0);
dispatch(acceptNotificationRequestsRequest(ids));
api().post(`/api/v1/notifications/requests/accept`, { id: ids }).then(() => {
dispatch(acceptNotificationRequestsSuccess(ids));
dispatch(decreasePendingNotificationsCount(count));
}).catch(err => {
dispatch(acceptNotificationRequestFail(ids, err));
});
};
export const acceptNotificationRequestsRequest = ids => ({
type: NOTIFICATION_REQUESTS_ACCEPT_REQUEST,
ids,
});
export const acceptNotificationRequestsSuccess = ids => ({
type: NOTIFICATION_REQUESTS_ACCEPT_SUCCESS,
ids,
});
export const acceptNotificationRequestsFail = (ids, error) => ({
type: NOTIFICATION_REQUESTS_ACCEPT_FAIL,
ids,
error,
});
export const dismissNotificationRequests = (ids) => (dispatch, getState) => {
const count = ids.reduce((count, id) => count + selectNotificationCountForRequest(getState(), id), 0);
dispatch(acceptNotificationRequestsRequest(ids));
api().post(`/api/v1/notifications/requests/dismiss`, { id: ids }).then(() => {
dispatch(dismissNotificationRequestsSuccess(ids));
dispatch(decreasePendingNotificationsCount(count));
}).catch(err => {
dispatch(dismissNotificationRequestFail(ids, err));
});
};
export const dismissNotificationRequestsRequest = ids => ({
type: NOTIFICATION_REQUESTS_DISMISS_REQUEST,
ids,
});
export const dismissNotificationRequestsSuccess = ids => ({
type: NOTIFICATION_REQUESTS_DISMISS_SUCCESS,
ids,
});
export const dismissNotificationRequestsFail = (ids, error) => ({
type: NOTIFICATION_REQUESTS_DISMISS_FAIL,
ids,
error,
});
export const fetchNotificationsForRequest = accountId => (dispatch, getState) => {
const current = getState().getIn(['notificationRequests', 'current']);
const params = { account_id: accountId };
if (current.getIn(['item', 'account']) === accountId) {
if (current.getIn(['notifications', 'isLoading'])) {
return;
}
if (current.getIn(['notifications', 'items'])?.size > 0) {
params.since_id = current.getIn(['notifications', 'items', 0, 'id']);
}
}
dispatch(fetchNotificationsForRequestRequest());
api().get('/api/v1/notifications', { params }).then(response => {
const next = getLinks(response).refs.find(link => link.rel === 'next');
dispatch(importFetchedAccounts(response.data.map(item => item.account)));
dispatch(importFetchedStatuses(response.data.map(item => item.status).filter(status => !!status)));
dispatch(importFetchedAccounts(response.data.filter(item => item.report).map(item => item.report.target_account)));
dispatch(fetchNotificationsForRequestSuccess(response.data, next?.uri));
}).catch(err => {
dispatch(fetchNotificationsForRequestFail(err));
});
};
export const fetchNotificationsForRequestRequest = () => ({
type: NOTIFICATIONS_FOR_REQUEST_FETCH_REQUEST,
});
export const fetchNotificationsForRequestSuccess = (notifications, next) => ({
type: NOTIFICATIONS_FOR_REQUEST_FETCH_SUCCESS,
notifications,
next,
});
export const fetchNotificationsForRequestFail = (error) => ({
type: NOTIFICATIONS_FOR_REQUEST_FETCH_FAIL,
error,
});
export const expandNotificationsForRequest = () => (dispatch, getState) => {
const url = getState().getIn(['notificationRequests', 'current', 'notifications', 'next']);
if (!url || getState().getIn(['notificationRequests', 'current', 'notifications', 'isLoading'])) {
return;
}
dispatch(expandNotificationsForRequestRequest());
api().get(url).then(response => {
const next = getLinks(response).refs.find(link => link.rel === 'next');
dispatch(importFetchedAccounts(response.data.map(item => item.account)));
dispatch(importFetchedStatuses(response.data.map(item => item.status).filter(status => !!status)));
dispatch(importFetchedAccounts(response.data.filter(item => item.report).map(item => item.report.target_account)));
dispatch(expandNotificationsForRequestSuccess(response.data, next?.uri));
}).catch(err => {
dispatch(expandNotificationsForRequestFail(err));
});
};
export const expandNotificationsForRequestRequest = () => ({
type: NOTIFICATIONS_FOR_REQUEST_EXPAND_REQUEST,
});
export const expandNotificationsForRequestSuccess = (notifications, next) => ({
type: NOTIFICATIONS_FOR_REQUEST_EXPAND_SUCCESS,
notifications,
next,
});
export const expandNotificationsForRequestFail = (error) => ({
type: NOTIFICATIONS_FOR_REQUEST_EXPAND_FAIL,
error,
});

View File

@@ -1,18 +1,10 @@
import { createAppAsyncThunk } from 'flavours/glitch/store';
import { fetchNotifications } from './notification_groups';
import { expandNotifications } from './notifications';
export const initializeNotifications = createAppAsyncThunk(
'notifications/initialize',
(_, { dispatch, getState }) => {
// eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access
const enableBeta = getState().settings.getIn(
['notifications', 'groupingBeta'],
false,
) as boolean;
if (enableBeta) void dispatch(fetchNotifications());
else void dispatch(expandNotifications({}));
(_, { dispatch }) => {
void dispatch(fetchNotifications());
},
);

View File

@@ -49,11 +49,13 @@ export function fetchStatusRequest(id, skipLoading) {
};
}
export function fetchStatus(id, forceFetch = false) {
export function fetchStatus(id, forceFetch = false, alsoFetchContext = true) {
return (dispatch, getState) => {
const skipLoading = !forceFetch && getState().getIn(['statuses', id], null) !== null;
dispatch(fetchContext(id));
if (alsoFetchContext) {
dispatch(fetchContext(id));
}
if (skipLoading) {
return;

View File

@@ -103,18 +103,14 @@ export const connectTimelineStream = (timelineId, channelName, params = {}, opti
const notificationJSON = JSON.parse(data.payload);
dispatch(updateNotifications(notificationJSON, messages, locale));
// TODO: remove this once the groups feature replaces the previous one
if(getState().settings.getIn(['notifications', 'groupingBeta'], false)) {
dispatch(processNewNotificationForGroups(notificationJSON));
}
dispatch(processNewNotificationForGroups(notificationJSON));
break;
}
case 'notifications_merged':
const state = getState();
if (state.notifications.top || !state.notifications.mounted)
dispatch(expandNotifications({ forceLoad: true, maxId: undefined }));
if(state.settings.getIn(['notifications', 'groupingBeta'], false)) {
dispatch(refreshStaleNotificationGroups());
}
dispatch(refreshStaleNotificationGroups());
break;
case 'conversation':
// @ts-expect-error
@@ -139,21 +135,15 @@ export const connectTimelineStream = (timelineId, channelName, params = {}, opti
/**
* @param {Function} dispatch
* @param {Function} getState
*/
async function refreshHomeTimelineAndNotification(dispatch, getState) {
async function refreshHomeTimelineAndNotification(dispatch) {
await dispatch(expandHomeTimeline({ maxId: undefined }));
// TODO: remove this once the groups feature replaces the previous one
if(getState().settings.getIn(['notifications', 'groupingBeta'], false)) {
// TODO: polling for merged notifications
try {
await dispatch(pollRecentGroupNotifications());
} catch (error) {
// TODO
}
} else {
await dispatch(expandNotifications({}));
// TODO: polling for merged notifications
try {
await dispatch(pollRecentGroupNotifications());
} catch {
// TODO
}
await dispatch(fetchAnnouncements());

View File

@@ -42,6 +42,9 @@ const authorizationTokenFromInitialState = (): RawAxiosRequestHeaders => {
// eslint-disable-next-line import/no-default-export
export default function api(withAuthorization = true) {
return axios.create({
transitional: {
clarifyTimeoutError: true,
},
headers: {
...csrfHeader,
...(withAuthorization ? authorizationTokenFromInitialState() : {}),
@@ -67,6 +70,7 @@ export async function apiRequest<ApiResponse = unknown>(
args: {
params?: RequestParamsOrData;
data?: RequestParamsOrData;
timeout?: number;
} = {},
) {
const { data } = await api().request<ApiResponse>({

View File

@@ -1,14 +1,44 @@
import api, { apiRequest, getLinks } from 'flavours/glitch/api';
import type { ApiNotificationGroupsResultJSON } from 'flavours/glitch/api_types/notifications';
import api, {
apiRequest,
getLinks,
apiRequestGet,
apiRequestPost,
} from 'flavours/glitch/api';
import type {
ApiNotificationGroupsResultJSON,
ApiNotificationRequestJSON,
ApiNotificationJSON,
} from 'flavours/glitch/api_types/notifications';
export const apiFetchNotifications = async (params?: {
export const apiFetchNotifications = async (
params?: {
account_id?: string;
since_id?: string;
},
url?: string,
) => {
const response = await api().request<ApiNotificationJSON[]>({
method: 'GET',
url: url ?? '/api/v1/notifications',
params,
});
return {
notifications: response.data,
links: getLinks(response),
};
};
export const apiFetchNotificationGroups = async (params?: {
url?: string;
grouped_types?: string[];
exclude_types?: string[];
max_id?: string;
since_id?: string;
}) => {
const response = await api().request<ApiNotificationGroupsResultJSON>({
method: 'GET',
url: '/api/v2_alpha/notifications',
url: '/api/v2/notifications',
params,
});
@@ -24,3 +54,43 @@ export const apiFetchNotifications = async (params?: {
export const apiClearNotifications = () =>
apiRequest<undefined>('POST', 'v1/notifications/clear');
export const apiFetchNotificationRequests = async (
params?: {
since_id?: string;
},
url?: string,
) => {
const response = await api().request<ApiNotificationRequestJSON[]>({
method: 'GET',
url: url ?? '/api/v1/notifications/requests',
params,
});
return {
requests: response.data,
links: getLinks(response),
};
};
export const apiFetchNotificationRequest = async (id: string) => {
return apiRequestGet<ApiNotificationRequestJSON>(
`v1/notifications/requests/${id}`,
);
};
export const apiAcceptNotificationRequest = async (id: string) => {
return apiRequestPost(`v1/notifications/requests/${id}/accept`);
};
export const apiDismissNotificationRequest = async (id: string) => {
return apiRequestPost(`v1/notifications/requests/${id}/dismiss`);
};
export const apiAcceptNotificationRequests = async (id: string[]) => {
return apiRequestPost('v1/notifications/requests/accept', { id });
};
export const apiDismissNotificationRequests = async (id: string[]) => {
return apiRequestPost('v1/notifications/requests/dismiss', { id });
};

View File

@@ -149,3 +149,12 @@ export interface ApiNotificationGroupsResultJSON {
statuses: ApiStatusJSON[];
notification_groups: ApiNotificationGroupJSON[];
}
export interface ApiNotificationRequestJSON {
id: string;
created_at: string;
updated_at: string;
notifications_count: string;
account: ApiAccountJSON;
last_status?: ApiStatusJSON;
}

View File

@@ -5,7 +5,7 @@ export function start() {
try {
Rails.start();
} catch (e) {
} catch {
// If called twice
}
}

View File

@@ -0,0 +1,67 @@
import { useState, useCallback, useRef } from 'react';
import { FormattedMessage } from 'react-intl';
import Overlay from 'react-overlays/Overlay';
import type {
OffsetValue,
UsePopperOptions,
} from 'react-overlays/esm/usePopper';
const offset = [0, 4] as OffsetValue;
const popperConfig = { strategy: 'fixed' } as UsePopperOptions;
export const AltTextBadge: React.FC<{
description: string;
}> = ({ description }) => {
const anchorRef = useRef<HTMLButtonElement>(null);
const [open, setOpen] = useState(false);
const handleClick = useCallback(() => {
setOpen((v) => !v);
}, [setOpen]);
const handleClose = useCallback(() => {
setOpen(false);
}, [setOpen]);
return (
<>
<button
ref={anchorRef}
className='media-gallery__alt__label'
onClick={handleClick}
>
ALT
</button>
<Overlay
rootClose
onHide={handleClose}
show={open}
target={anchorRef.current}
placement='top-end'
flip
offset={offset}
popperConfig={popperConfig}
>
{({ props }) => (
<div {...props} className='hover-card-controller'>
<div
className='media-gallery__alt__popover dropdown-animation'
role='tooltip'
>
<h4>
<FormattedMessage
id='alt_text_badge.title'
defaultMessage='Alt text'
/>
</h4>
<p>{description}</p>
</div>
</div>
)}
</Overlay>
</>
);
};

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