misskey icon indicating copy to clipboard operation
misskey copied to clipboard

メンションの最大数をロールごとに設定可能にする

Open yuriha-chan opened this issue 1 year ago • 4 comments

What

ユーザーが投稿できるメンションとダイレクト投稿の宛先の数をロールごとに制限する。リモートの投稿も対象となる。

Why

メンションを多数つけた投稿を行うことで、スパムを投稿しようとする攻撃者は、限られたレートリミットにおいてスパムの送付対象となる被害ユーザーを増やすことができる。そのため、一つのノートにつけられるメンションの数を制限することで、スパムを送付する効率を下げることができると考えられる。

ロールごとにメンションとダイレクト投稿の宛先の数を制限することにより、信頼のおけるユーザーのみが複数のメンションを許すというサーバーの運用が可能になる。

Additional info (optional)

Checklist

  • [x] Read the contribution guide
  • [x] Test working in a local environment
  • [ ] (If needed) Add story of storybook
  • [ ] (If needed) Update CHANGELOG.md
  • [ ] (If possible) Add tests

yuriha-chan avatar Feb 16 '24 13:02 yuriha-chan

Related: https://github.com/misskey-dev/misskey/issues/13332

yuriha-chan avatar Feb 16 '24 13:02 yuriha-chan

このPRによるapi.jsonの差分

差分はこちら
--- base
+++ head
@@ -53625,6 +53625,15 @@
                       }
                     }
                   },
+                  "CONTAINS_TOO_MANY_MENTIONS": {
+                    "value": {
+                      "error": {
+                        "message": "Cannot post because it exceeds the allowed number of mentions.",
+                        "code": "CONTAINS_TOO_MANY_MENTIONS",
+                        "id": "4de0363a-3046-481b-9b0f-feff3e211025"
+                      }
+                    }
+                  },
                   "INVALID_PARAM": {
                     "value": {
                       "error": {
@@ -77834,6 +77843,9 @@
           "canPublicNote": {
             "type": "boolean"
           },
+          "mentionLimit": {
+            "type": "integer"
+          },
           "canInvite": {
             "type": "boolean"
           },
@@ -77902,6 +77914,7 @@
           "gtlAvailable",
           "ltlAvailable",
           "canPublicNote",
+          "mentionLimit",
           "canInvite",
           "inviteLimit",
           "inviteLimitCycle",

Get diff files from Workflow Page

github-actions[bot] avatar Feb 16 '24 13:02 github-actions[bot]

https://github.com/misskey-dev/misskey/issues/13332#issuecomment-1947965237 とはいえロールで切れるのならそれでもよさそう

kakkokari-gtyih avatar Feb 16 '24 13:02 kakkokari-gtyih

Codecov Report

Attention: Patch coverage is 68.18182% with 7 lines in your changes are missing coverage. Please review.

Project coverage is 62.83%. Comparing base (16f16e6) to head (3420057). Report is 2 commits behind head on develop.

:exclamation: Current head 3420057 differs from pull request most recent head 9072231. Consider uploading reports for the commit 9072231 to get more accurate results

Files Patch % Lines
...s/backend/src/server/api/endpoints/notes/create.ts 54.54% 5 Missing :warning:
packages/backend/src/core/NoteCreateService.ts 50.00% 2 Missing :warning:
Additional details and impacted files
@@             Coverage Diff             @@
##           develop   #13343      +/-   ##
===========================================
  Coverage    62.83%   62.83%              
===========================================
  Files          986      804     -182     
  Lines       110646    90252   -20394     
  Branches      5358     5251     -107     
===========================================
- Hits         69527    56712   -12815     
+ Misses       39453    32112    -7341     
+ Partials      1666     1428     -238     

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.

codecov[bot] avatar Feb 16 '24 13:02 codecov[bot]

なですきーで実運用してみているのですが、リモートの投稿の場合にジョブキューのInboxにDelayedで溜まってしまう現象が起きています packages/backend/src/queue/processors/InboxProcessorService.tsなどで例外をキャッチする必要があるかもしれません

参考: https://github.com/misskey-dev/misskey/pull/13428 https://github.com/MisskeyIO/misskey/pull/468

tai-cha avatar Feb 21 '24 21:02 tai-cha

・デフォルトのベースロールのメンション上限は20アカウントに設定しています。 ・解決できないリモートユーザーは、メンションの人数に含めない実装になっています。(そのためリモートユーザーへのメンションは自動テスト項目から除外しています。)

yuriha-chan avatar Feb 24 '24 01:02 yuriha-chan

CHANGELOG要りそう

syuilo avatar Feb 24 '24 01:02 syuilo

autogenを実行しても手元では何も差分が生まれなかったので、CIのエラーはちょっとわからないです…。

$ pnpm run build-misskey-js-with-types 

> [email protected] build-misskey-js-with-types /home/yuriha/misskey
> pnpm build-pre && pnpm --filter backend... --filter=!misskey-js build && pnpm --filter backend generate-api-json && ncp packages/backend/built/api.json packages/misskey-js/generator/api.json && pnpm --filter misskey-js update-autogen-code && pnpm --filter misskey-js build && pnpm --filter misskey-js api


> [email protected] build-pre /home/yuriha/misskey
> node ./scripts/build-pre.js

Scope: 2 of 8 workspace projects
packages/misskey-reversi build$ node ./build.js
└─ Done in 100ms
packages/backend build$ swc src -d built -D
│ Successfully compiled: 800 files, copied 27 files with swc (401.53ms)
└─ Done in 509ms

> backend@ generate-api-json /home/yuriha/misskey/packages/backend
> pnpm build && node ./generate_api_json.js

(中略)
api-extractor 7.39.1  - https://api-extractor.com/

Using configuration from ./api-extractor.json
Analysis will use the bundled TypeScript version 5.3.3
Writing: /home/yuriha/misskey/packages/misskey-js/temp/misskey-js.api.json
The API report is up to date: temp/misskey-js.api.md

API Extractor completed successfully

$ git status
On branch limit-mentions
Your branch is up to date with 'origin/limit-mentions'.

nothing to commit, working tree clean

yuriha-chan avatar Feb 24 '24 02:02 yuriha-chan

develop取り込んだらワンチャン全チェック通らないかな

tai-cha avatar Feb 28 '24 12:02 tai-cha

Chromatic以外は全部通ってそう

tai-cha avatar Feb 28 '24 14:02 tai-cha

developにマージしやすいようにupdateしたらテスト落ちたけど1個前でpassしてるのでdevelopがチェック落ちているのが悪そう

tai-cha avatar Feb 29 '24 03:02 tai-cha

👍

syuilo avatar Feb 29 '24 11:02 syuilo

Thank you for sending us a great Pull Request! 👍 Please regenerate misskey-js type definitions! 🙏

example:

pnpm run build-misskey-js-with-types

github-actions[bot] avatar Feb 29 '24 11:02 github-actions[bot]