Skip to content

Commit

Permalink
fix(server): ノート翻訳時に公開範囲が考慮されていない問題を修正
Browse files Browse the repository at this point in the history
  • Loading branch information
syuilo committed Sep 5, 2021
1 parent 65d9c30 commit 1cd8bfa
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 0 deletions.
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,12 @@
-->

## 12.x.x (unreleased)

### Bugfixes
- Dockerfileを修正
- ノート翻訳時に公開範囲が考慮されていない問題を修正

## 12.90.0 (2021/09/04)

### Improvements
Expand Down
50 changes: 50 additions & 0 deletions src/models/repositories/note.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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 かつ自分が指定されていなかったら非表示
Expand Down
5 changes: 5 additions & 0 deletions src/server/api/endpoints/notes/translate.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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'],
Expand Down Expand Up @@ -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;
}
Expand Down

0 comments on commit 1cd8bfa

Please sign in to comment.