Commit graph

4516 commits

Author SHA1 Message Date
Marie
ae65642ffb merge: StreamingApiServerService: handle websocket errors from client gracefully (!1166)
View MR for information: https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/1166

Approved-by: Hazelnoot <acomputerdog@gmail.com>
Approved-by: Marie <github@yuugi.dev>
2025-07-27 14:28:05 +00:00
Marie
41be003d79 merge: Slightly optimize i/update-remote-user endpoint by fetching from cache (!1185)
View MR for information: https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/1185

Approved-by: dakkar <dakkar@thenautilus.net>
Approved-by: Marie <github@yuugi.dev>
2025-07-27 14:23:06 +00:00
Hazelnoot
b6c8f4f876 merge: Add more "detail" flags to API endpoints (!1186)
View MR for information: https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/1186

Approved-by: dakkar <dakkar@thenautilus.net>
Approved-by: Marie <github@yuugi.dev>
2025-07-27 14:22:11 +00:00
Hazelnoot
1cf5988885 merge: Improve URL validation (!1155)
View MR for information: https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/1155

Approved-by: dakkar <dakkar@thenautilus.net>
Approved-by: Marie <github@yuugi.dev>
2025-07-27 14:21:20 +00:00
Marie
9363842084 merge: Prevent Mastodon API error when not fetching reply or renote (resolves #1125) (!1170)
View MR for information: https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/1170

Closes #1125

Approved-by: Hazelnoot <acomputerdog@gmail.com>
Approved-by: Marie <github@yuugi.dev>
2025-07-27 14:19:26 +00:00
Marie
1d9184f76e merge: lowercase username for UsedUsernamesRepository - fixes #1161 (!1173)
View MR for information: https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/1173

Closes #1161

Approved-by: Hazelnoot <acomputerdog@gmail.com>
Approved-by: Marie <github@yuugi.dev>
2025-07-27 14:18:53 +00:00
Hazelnoot
e46c3f14fa merge: Fix occasional API errors caused by null jobs (!1179)
View MR for information: https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/1179

Approved-by: dakkar <dakkar@thenautilus.net>
Approved-by: Marie <github@yuugi.dev>
2025-07-27 14:18:45 +00:00
Hazelnoot
6ed0033559 merge: Fix duplicate ModLog entries from admin/delete-all-files-of-a-user endpoint (!1177)
View MR for information: https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/1177

Approved-by: dakkar <dakkar@thenautilus.net>
Approved-by: Marie <github@yuugi.dev>
2025-07-27 14:18:39 +00:00
Marie
a53196c407 merge: Limit chat messages based on maxNoteLength (!1188)
View MR for information: https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/1188

Approved-by: dakkar <dakkar@thenautilus.net>
Approved-by: Marie <github@yuugi.dev>
2025-07-27 14:17:36 +00:00
Marie
4afd2cc14f merge: Show popup when chat API returns an error (!1189)
View MR for information: https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/1189

Approved-by: dakkar <dakkar@thenautilus.net>
Approved-by: Marie <github@yuugi.dev>
2025-07-27 14:17:26 +00:00
Marie
195f1adbc9 merge: Use bucket rate limit for posts and chat messages (!1187)
View MR for information: https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/1187

Approved-by: dakkar <dakkar@thenautilus.net>
Approved-by: Marie <github@yuugi.dev>
2025-07-27 14:17:14 +00:00
Hazelnoot
42807cb3fb merge: Increase rate limit (allow more calls) for import endpoints (!1184)
View MR for information: https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/1184

Approved-by: dakkar <dakkar@thenautilus.net>
Approved-by: Marie <github@yuugi.dev>
2025-07-27 14:15:19 +00:00
Hazelnoot
94b6dec543 merge: Fix Postgres / TypeORM errors when suspending a user with follow relations (resolves #482) (!1178)
View MR for information: https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/1178

Approved-by: dakkar <dakkar@thenautilus.net>
Approved-by: Marie <github@yuugi.dev>
2025-07-27 14:14:13 +00:00
Hazelnoot
57d77b8f99 merge: Fix link verification for actors without a url field (!1180)
View MR for information: https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/1180

Approved-by: dakkar <dakkar@thenautilus.net>
Approved-by: Marie <github@yuugi.dev>
2025-07-27 14:13:51 +00:00
Hazelnoot
ef2d5757eb merge: Fix factor scaling in rate limit (!1182)
View MR for information: https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/1182

Approved-by: dakkar <dakkar@thenautilus.net>
Approved-by: Marie <github@yuugi.dev>
2025-07-27 14:13:32 +00:00
Hazelnoot
e78c4d99f6 fix database type of chat_message.text 2025-07-26 20:10:54 -04:00
Hazelnoot
591c6d603f use bucket rate limit for posts and chat messages 2025-07-26 19:10:22 -04:00
Hazelnoot
b71cd6c2c8 limit chat messages based on maxNoteLength instead of hardcoded 2000 chars 2025-07-26 19:06:39 -04:00
Hazelnoot
88231c61af merge: Change profile field value to not include <p> (!1141)
View MR for information: https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/1141

Closes #1123

Approved-by: dakkar <dakkar@thenautilus.net>
Approved-by: Hazelnoot <acomputerdog@gmail.com>
2025-07-26 22:49:40 +00:00
Hazelnoot
53c7db3d1d fix DI error in HttpRequestService.ts 2025-07-25 16:33:15 -04:00
Hazelnoot
05bc6f5d86 resolve domain names when checking for private URLs 2025-07-25 16:28:53 -04:00
Hazelnoot
6c9c6aa1b6 fix more freeze / unfreeze errors caused by TypeORM bugs 2025-07-23 16:11:44 -04:00
Hazelnoot
7dd2021087 fix user suspension / unsuspension not updating caches 2025-07-23 16:11:44 -04:00
Hazelnoot
f70a3469bd fix error in UserSuspendService.freezeAll and UserSuspendService.unFreezeAll caused by TypeORM bug 2025-07-23 15:45:32 -04:00
dakkar
97e7011622 lowercase username for UsedUsernamesRepository - fixes #1161 2025-07-22 20:39:44 +01:00
Hazelnoot
63bac24ece allow HTTP connections to private IPs 2025-07-21 16:16:33 -04:00
Hazelnoot
fba171840f refactor actor validation to reduce code duplication 2025-07-21 16:16:33 -04:00
Hazelnoot
8107f7f576 move CaptchaError to a separate file to avoid circular import errors 2025-07-21 16:16:33 -04:00
Hazelnoot
f1038c42e8 add comment about validation in verify-field-link.ts 2025-07-21 16:16:33 -04:00
Hazelnoot
255ecd8427 remove unused console logging fallbacks 2025-07-21 16:16:33 -04:00
Hazelnoot
637fa254e5 use logger instead of console for uncaughtException debug lines 2025-07-21 16:16:33 -04:00
Hazelnoot
b38351e28a add workarounds for node-fetch crashes 2025-07-21 16:16:33 -04:00
Hazelnoot
1758b5b3be fix URL errors from incorrect validation in validateActor 2025-07-21 16:16:33 -04:00
Hazelnoot
48fa42b362 re-use parsed URI in validateActor 2025-07-21 16:16:33 -04:00
Hazelnoot
ba9ec3bcee verify URLs in DownloadService 2025-07-21 16:16:33 -04:00
Hazelnoot
dac310b540 use shared URL verification in verifyLinkFields 2025-07-21 16:16:32 -04:00
Hazelnoot
15f6c6ca93 validate all URLs before fetch 2025-07-21 16:16:32 -04:00
Hazelnoot
f163e15602 move user.lastFetchedAt to UserLite 2025-07-21 16:13:00 -04:00
Hazelnoot
69402e3abb move user.updateAt to UserLite 2025-07-21 16:13:00 -04:00
Hazelnoot
3dbfb4fa20 add "detail" flag to more user endpoints 2025-07-21 16:13:00 -04:00
Hazelnoot
34dcb1c51c optimize i/update-remote-user endpoint by fetching from cache 2025-07-21 16:12:32 -04:00
Hazelnoot
5a9bf50424 increase rate limit for import endpoints to 1 per minute 2025-07-21 16:12:19 -04:00
Hazelnoot
d2ec40fb87 scale rate limit dripRate with factor 2025-07-21 15:57:30 -04:00
Hazelnoot
2b7c74c63c include profile URI for link verification 2025-07-21 15:55:36 -04:00
Hazelnoot
4346bac05f check for null jobs in QueueService.queueGetJobs 2025-07-21 15:55:00 -04:00
Hazelnoot
223198a0fb fix admin/delete-all-files-of-a-user endpoint recording a log entry for every single file 2025-07-21 15:54:49 -04:00
Hazelnoot
ed68230811 merge: Add importCompleted notification. Send importCompleted when antenna/customEmoji/muting/userList is imported (!1165)
View MR for information: https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/1165

Closes #891

Approved-by: dakkar <dakkar@thenautilus.net>
Approved-by: Hazelnoot <acomputerdog@gmail.com>
2025-07-21 18:42:29 +00:00
наб
d954b8d138
StreamingApiServerService: handle websocket errors from client gracefully
$ nc -C tarta.nabijaczleweli.xyz 12122
  GET /streaming?_t=1752534314122 HTTP/1.1
  Host: tarta.nabijaczleweli.xyz:12122
  User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:142.0) Gecko/20100101 Firefox/142.0
  Accept: */*
  Accept-Language: en-GB,en;q=0.5
  Accept-Encoding: gzip, deflate
  Sec-WebSocket-Version: 13
  Sec-WebSocket-Extensions: permessage-deflate
  Sec-WebSocket-Key: AAAAAAAAAAAAAAAAAAAAAA==
  Connection: keep-alive, Upgrade
  Pragma: no-cache
  Cache-Control: no-cache
  Upgrade: websocket
the parameters almost don't matter so long as the server
replies with an upgrade, then press enter once or twice,
at which point the server will have crashed after
  INFO 1  [core nest]             NestFactory: Starting Nest application...
  ERR  *  [core]          Uncaught exception (uncaughtException): RangeError: Invalid WebSocket frame: invalid opcode 13
      at Receiver.getInfo (/srv/Sharkey/node_modules/.pnpm/ws@8.18.1_bufferutil@4.0.9_utf-8-validate@6.0.5/node_modules/ws/lib/receiver.js:311:26)
      at Receiver.startLoop (/srv/Sharkey/node_modules/.pnpm/ws@8.18.1_bufferutil@4.0.9_utf-8-validate@6.0.5/node_modules/ws/lib/receiver.js:155:16)
      at Receiver._write (/srv/Sharkey/node_modules/.pnpm/ws@8.18.1_bufferutil@4.0.9_utf-8-validate@6.0.5/node_modules/ws/lib/receiver.js:94:10)
      at writeOrBuffer (node:internal/streams/writable:572:12)
      at _write (node:internal/streams/writable:501:10)
      at Writable.write (node:internal/streams/writable:510:10)
      at Socket.socketOnData (/srv/Sharkey/node_modules/.pnpm/ws@8.18.1_bufferutil@4.0.9_utf-8-validate@6.0.5/node_modules/ws/lib/websocket.js:1355:35)
      at Socket.emit (node:events:518:28)
      at addChunk (node:internal/streams/readable:561:12)
      at readableAddChunkPushByteMode (node:internal/streams/readable:512:3)
      at Readable.push (node:internal/streams/readable:392:5)
      at TCP.onStreamRead (node:internal/stream_base_commons:189:23) {
    code: 'WS_ERR_INVALID_OPCODE',
    [Symbol(status-code)]: 1002
  }
  INFO *  [core]          The process is going to exit with code 1
  node:events:496
        throw er; // Unhandled 'error' event
        ^

  RangeError: Invalid WebSocket frame: invalid opcode 13
      at Receiver.getInfo (/srv/Sharkey/node_modules/.pnpm/ws@8.18.1_bufferutil@4.0.9_utf-8-validate@6.0.5/node_modules/ws/lib/receiver.js:311:26)
      at Receiver.startLoop (/srv/Sharkey/node_modules/.pnpm/ws@8.18.1_bufferutil@4.0.9_utf-8-validate@6.0.5/node_modules/ws/lib/receiver.js:155:16)
      at Receiver._write (/srv/Sharkey/node_modules/.pnpm/ws@8.18.1_bufferutil@4.0.9_utf-8-validate@6.0.5/node_modules/ws/lib/receiver.js:94:10)
      at writeOrBuffer (node:internal/streams/writable:572:12)
      at _write (node:internal/streams/writable:501:10)
      at Writable.write (node:internal/streams/writable:510:10)
      at Socket.socketOnData (/srv/Sharkey/node_modules/.pnpm/ws@8.18.1_bufferutil@4.0.9_utf-8-validate@6.0.5/node_modules/ws/lib/websocket.js:1355:35)
      at Socket.emit (node:events:518:28)
      at addChunk (node:internal/streams/readable:561:12)
      at readableAddChunkPushByteMode (node:internal/streams/readable:512:3)
      at Readable.push (node:internal/streams/readable:392:5)
      at TCP.onStreamRead (node:internal/stream_base_commons:189:23)
  Emitted 'error' event on WebSocket instance at:
      at Receiver.receiverOnError (/srv/Sharkey/node_modules/.pnpm/ws@8.18.1_bufferutil@4.0.9_utf-8-validate@6.0.5/node_modules/ws/lib/websocket.js:1199:15)
      at Receiver.emit (node:events:518:28)
      at emitErrorNT (node:internal/streams/destroy:170:8)
      at emitErrorCloseNT (node:internal/streams/destroy:129:3)
      at process.processTicksAndRejections (node:internal/process/task_queues:90:21) {
    code: 'WS_ERR_INVALID_OPCODE',
    [Symbol(status-code)]: 1002
  }

  Node.js v22.14.0
   ELIFECYCLE  Command failed with exit code 1.

This works through some reverse proxies (HAProxy, Caddy),
but not through others (Cloudflare, nginx, Apache(?))

Instead, just hang up if the client violates protocol

Fixes https://101010.pl/@nabijaczleweli/114854334401159070
2025-07-21 17:39:41 +02:00
Hazelnoot
6d73171dfe merge: Reject duplicate mod actions (!1157)
View MR for information: https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/1157

Closes #768

Approved-by: dakkar <dakkar@thenautilus.net>
Approved-by: Hazelnoot <acomputerdog@gmail.com>
2025-07-21 14:59:49 +00:00
Emily Fox
b58bd4b9c9 prevent mastodon api error when not fetching reply or renote (resolves #1125)
Use of inner joins for `reply.user` and `renote.user` meant fetching a base
note would always fail when asked to query reply or renote information.
2025-07-16 12:07:38 -05:00