summaryrefslogtreecommitdiff
path: root/packages/backend/src/core/NoteCreateService.ts
diff options
context:
space:
mode:
authoranatawa12 <anatawa12@icloud.com>2023-10-05 17:03:50 +0900
committerGitHub <noreply@github.com>2023-10-05 17:03:50 +0900
commitee483f2deee56ecac38ccc5554594c6ecad1cc96 (patch)
treedbbea339ab6517b9b74d7e97f1566003ad045ece /packages/backend/src/core/NoteCreateService.ts
parent2023.10.0-beta.3 (diff)
downloadsharkey-ee483f2deee56ecac38ccc5554594c6ecad1cc96.tar.gz
sharkey-ee483f2deee56ecac38ccc5554594c6ecad1cc96.tar.bz2
sharkey-ee483f2deee56ecac38ccc5554594c6ecad1cc96.zip
Disallow renote of direct note (#11970)
* chore: renoteに関するチェックをまとめる * fix: ダイレクト投稿をrenoteできる * fix(frontend): 自分のダイレクト投稿をrenoteできる * docs(changelog): ダイレクト投稿をリノートできてしまう * fix lint * chore(backend): visibilityに関するエラーをApi Errorとして返す
Diffstat (limited to 'packages/backend/src/core/NoteCreateService.ts')
-rw-r--r--packages/backend/src/core/NoteCreateService.ts35
1 files changed, 23 insertions, 12 deletions
diff --git a/packages/backend/src/core/NoteCreateService.ts b/packages/backend/src/core/NoteCreateService.ts
index e8e9973b6e..34d103df77 100644
--- a/packages/backend/src/core/NoteCreateService.ts
+++ b/packages/backend/src/core/NoteCreateService.ts
@@ -252,19 +252,30 @@ export class NoteCreateService implements OnApplicationShutdown {
}
}
- // Renote対象が「ホームまたは全体」以外の公開範囲ならreject
- if (data.renote && data.renote.visibility !== 'public' && data.renote.visibility !== 'home' && data.renote.userId !== user.id) {
- throw new Error('Renote target is not public or home');
- }
-
- // Renote対象がpublicではないならhomeにする
- if (data.renote && data.renote.visibility !== 'public' && data.visibility === 'public') {
- data.visibility = 'home';
- }
+ if (data.renote) {
+ switch (data.renote.visibility) {
+ case 'public':
+ // public noteは無条件にrenote可能
+ break;
+ case 'home':
+ // home noteはhome以下にrenote可能
+ if (data.visibility === 'public') {
+ data.visibility = 'home';
+ }
+ break;
+ case 'followers':
+ // 他人のfollowers noteはreject
+ if (data.renote.userId !== user.id) {
+ throw new Error('Renote target is not public or home');
+ }
- // Renote対象がfollowersならfollowersにする
- if (data.renote && data.renote.visibility === 'followers') {
- data.visibility = 'followers';
+ // Renote対象がfollowersならfollowersにする
+ data.visibility = 'followers';
+ break;
+ case 'specified':
+ // specified / direct noteはreject
+ throw new Error('Renote target is not public or home');
+ }
}
// 返信対象がpublicではないならhomeにする