Merge branch 'develop' into swn
This commit is contained in:
commit
ab03cc7c0c
4 changed files with 62 additions and 1 deletions
|
@ -9,6 +9,12 @@
|
||||||
|
|
||||||
-->
|
-->
|
||||||
|
|
||||||
|
## 12.90.1 (2021/09/05)
|
||||||
|
|
||||||
|
### Bugfixes
|
||||||
|
- Dockerfileを修正
|
||||||
|
- ノート翻訳時に公開範囲が考慮されていない問題を修正
|
||||||
|
|
||||||
## 12.90.0 (2021/09/04)
|
## 12.90.0 (2021/09/04)
|
||||||
|
|
||||||
### Improvements
|
### Improvements
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"name": "misskey",
|
"name": "misskey",
|
||||||
"author": "syuilo <syuilotan@yahoo.co.jp>",
|
"author": "syuilo <syuilotan@yahoo.co.jp>",
|
||||||
"version": "12.90.0",
|
"version": "12.90.1",
|
||||||
"codename": "indigo",
|
"codename": "indigo",
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
|
|
|
@ -18,7 +18,57 @@ export class NoteRepository extends Repository<Note> {
|
||||||
return x.trim().length <= 100;
|
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) {
|
private async hideNote(packedNote: PackedNote, meId: User['id'] | null) {
|
||||||
|
// TODO: isVisibleForMe を使うようにしても良さそう(型違うけど)
|
||||||
let hide = false;
|
let hide = false;
|
||||||
|
|
||||||
// visibility が specified かつ自分が指定されていなかったら非表示
|
// visibility が specified かつ自分が指定されていなかったら非表示
|
||||||
|
|
|
@ -8,6 +8,7 @@ import config from '@/config/index';
|
||||||
import { getAgentByUrl } from '@/misc/fetch';
|
import { getAgentByUrl } from '@/misc/fetch';
|
||||||
import { URLSearchParams } from 'url';
|
import { URLSearchParams } from 'url';
|
||||||
import { fetchMeta } from '@/misc/fetch-meta';
|
import { fetchMeta } from '@/misc/fetch-meta';
|
||||||
|
import { Notes } from '@/models';
|
||||||
|
|
||||||
export const meta = {
|
export const meta = {
|
||||||
tags: ['notes'],
|
tags: ['notes'],
|
||||||
|
@ -43,6 +44,10 @@ export default define(meta, async (ps, user) => {
|
||||||
throw e;
|
throw e;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (!(await Notes.isVisibleForMe(note, user ? user.id : null))) {
|
||||||
|
return 204; // TODO: 良い感じのエラー返す
|
||||||
|
}
|
||||||
|
|
||||||
if (note.text == null) {
|
if (note.text == null) {
|
||||||
return 204;
|
return 204;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue