diff --git a/CHANGELOG.md b/CHANGELOG.md index 2454a3b609e1f7ba1c000f6891ab50c5d2fceebe..c14fb48177b11d070e8406d2aaccadd3a69a83ad 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,12 @@ --> +## 12.x.x (unreleased) + +### Bugfixes +- Dockerfileã‚’ä¿®æ£ +- ノート翻訳時ã«å…¬é–‹ç¯„囲ãŒè€ƒæ…®ã•ã‚Œã¦ã„ãªã„å•é¡Œã‚’ä¿®æ£ + ## 12.90.0 (2021/09/04) ### Improvements diff --git a/src/models/repositories/note.ts b/src/models/repositories/note.ts index a8e356abf260c559d795f5ff410f3cd505556535..9e0f5e55f094c850028fe75d354bfc06ef6aa5f1 100644 --- a/src/models/repositories/note.ts +++ b/src/models/repositories/note.ts @@ -18,7 +18,57 @@ export class NoteRepository extends Repository<Note> { return x.trim().length <= 100; } + public async isVisibleForMe(note: Note, meId: User['id'] | null): Promise<boolean> { + // visibility ㌠specified ã‹ã¤è‡ªåˆ†ãŒæŒ‡å®šã•ã‚Œã¦ã„ãªã‹ã£ãŸã‚‰éžè¡¨ç¤º + if (note.visibility === 'specified') { + if (meId == null) { + return false; + } else if (meId === note.userId) { + return true; + } else { + // 指定ã•ã‚Œã¦ã„ã‚‹ã‹ã©ã†ã‹ + const specified = note.visibleUserIds.some((id: any) => meId === id); + + if (specified) { + return true; + } else { + return false; + } + } + } + + // visibility ㌠followers ã‹ã¤è‡ªåˆ†ãŒæŠ•ç¨¿è€…ã®ãƒ•ã‚©ãƒãƒ¯ãƒ¼ã§ãªã‹ã£ãŸã‚‰éžè¡¨ç¤º + if (note.visibility === 'followers') { + if (meId == null) { + return false; + } else if (meId === note.userId) { + return true; + } else if (note.reply && (meId === note.reply.userId)) { + // 自分ã®æŠ•ç¨¿ã«å¯¾ã™ã‚‹ãƒªãƒ—ライ + return true; + } else if (note.mentions && note.mentions.some(id => meId === id)) { + // 自分ã¸ã®ãƒ¡ãƒ³ã‚·ãƒ§ãƒ³ + return true; + } else { + // フォãƒãƒ¯ãƒ¼ã‹ã©ã†ã‹ + const following = await Followings.findOne({ + followeeId: note.userId, + followerId: meId + }); + + if (following == null) { + return false; + } else { + return true; + } + } + } + + return true; + } + private async hideNote(packedNote: PackedNote, meId: User['id'] | null) { + // TODO: isVisibleForMe を使ã†ã‚ˆã†ã«ã—ã¦ã‚‚良ã•ãã†(åž‹é•ã†ã‘ã©) let hide = false; // visibility ㌠specified ã‹ã¤è‡ªåˆ†ãŒæŒ‡å®šã•ã‚Œã¦ã„ãªã‹ã£ãŸã‚‰éžè¡¨ç¤º diff --git a/src/server/api/endpoints/notes/translate.ts b/src/server/api/endpoints/notes/translate.ts index e4bc6bb0608480e38fa710e7d73b7e500e51c242..b56b1debdd27f5aac41db8e71790f14bf3fb7f03 100644 --- a/src/server/api/endpoints/notes/translate.ts +++ b/src/server/api/endpoints/notes/translate.ts @@ -8,6 +8,7 @@ import config from '@/config/index'; import { getAgentByUrl } from '@/misc/fetch'; import { URLSearchParams } from 'url'; import { fetchMeta } from '@/misc/fetch-meta'; +import { Notes } from '@/models'; export const meta = { tags: ['notes'], @@ -43,6 +44,10 @@ export default define(meta, async (ps, user) => { throw e; }); + if (!(await Notes.isVisibleForMe(note, user ? user.id : null))) { + return 204; // TODO: 良ã„æ„Ÿã˜ã®ã‚¨ãƒ©ãƒ¼è¿”ã™ + } + if (note.text == null) { return 204; }