diff options
| author | syuilo <syuilotan@yahoo.co.jp> | 2019-03-13 23:27:21 +0900 |
|---|---|---|
| committer | syuilo <syuilotan@yahoo.co.jp> | 2019-03-13 23:27:21 +0900 |
| commit | b157e9535eb7559b74426fabdb610c2d0b64a39a (patch) | |
| tree | 19e6c901cb24004cc4296882fb52d1dba9690845 /src/remote | |
| parent | :art: (diff) | |
| parent | Add languages (#4452) (diff) | |
| download | misskey-b157e9535eb7559b74426fabdb610c2d0b64a39a.tar.gz misskey-b157e9535eb7559b74426fabdb610c2d0b64a39a.tar.bz2 misskey-b157e9535eb7559b74426fabdb610c2d0b64a39a.zip | |
Merge branch 'develop' of https://github.com/syuilo/misskey into develop
Diffstat (limited to 'src/remote')
| -rw-r--r-- | src/remote/activitypub/kernel/announce/note.ts | 7 | ||||
| -rw-r--r-- | src/remote/activitypub/models/note.ts | 17 |
2 files changed, 23 insertions, 1 deletions
diff --git a/src/remote/activitypub/kernel/announce/note.ts b/src/remote/activitypub/kernel/announce/note.ts index 8d090902c0..912936bef8 100644 --- a/src/remote/activitypub/kernel/announce/note.ts +++ b/src/remote/activitypub/kernel/announce/note.ts @@ -5,6 +5,8 @@ import { IAnnounce, INote } from '../../type'; import { fetchNote, resolveNote } from '../../models/note'; import { resolvePerson } from '../../models/person'; import { apLogger } from '../../logger'; +import { extractDbHost } from '../../../../misc/convert-host'; +import Instance from '../../../../models/instance'; const logger = apLogger; @@ -23,6 +25,11 @@ export default async function(resolver: Resolver, actor: IRemoteUser, activity: throw new Error('invalid announce'); } + // アナウンス先をブロックしてたら中断 + // TODO: いちいちデータベースにアクセスするのはコスト高そうなのでどっかにキャッシュしておく + const instance = await Instance.findOne({ host: extractDbHost(uri) }); + if (instance && instance.isBlocked) return; + // 既に同じURIを持つものが登録されていないかチェック const exist = await fetchNote(uri); if (exist) { diff --git a/src/remote/activitypub/models/note.ts b/src/remote/activitypub/models/note.ts index bd43aa8902..c8939279eb 100644 --- a/src/remote/activitypub/models/note.ts +++ b/src/remote/activitypub/models/note.ts @@ -19,6 +19,8 @@ import vote from '../../../services/note/polls/vote'; import { apLogger } from '../logger'; import { IDriveFile } from '../../../models/drive-file'; import { deliverQuestionUpdate } from '../../../services/note/polls/update'; +import Instance from '../../../models/instance'; +import { extractDbHost } from '../../../misc/convert-host'; const logger = apLogger; @@ -132,7 +134,15 @@ export async function createNote(value: any, resolver?: Resolver, silent = false let quote: INote; if (note._misskey_quote && typeof note._misskey_quote == 'string') { - quote = await resolveNote(note._misskey_quote).catch(() => null); + quote = await resolveNote(note._misskey_quote).catch(e => { + // 4xxの場合は引用してないことにする + if (e.statusCode >= 400 && e.statusCode < 500) { + logger.warn(`Ignored quote target ${note.inReplyTo} - ${e.statusCode} `); + return null; + } + logger.warn(`Error in quote target ${note.inReplyTo} - ${e.statusCode || e}`); + throw e; + }); } const cw = note.summary === '' ? null : note.summary; @@ -214,6 +224,11 @@ export async function createNote(value: any, resolver?: Resolver, silent = false export async function resolveNote(value: string | IObject, resolver?: Resolver): Promise<INote> { const uri = typeof value == 'string' ? value : value.id; + // ブロックしてたら中断 + // TODO: いちいちデータベースにアクセスするのはコスト高そうなのでどっかにキャッシュしておく + const instance = await Instance.findOne({ host: extractDbHost(uri) }); + if (instance && instance.isBlocked) throw { statusCode: 451 }; + //#region このサーバーに既に登録されていたらそれを返す const exist = await fetchNote(uri); |