summaryrefslogtreecommitdiff
path: root/src/remote/activitypub/models/note.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/remote/activitypub/models/note.ts')
-rw-r--r--src/remote/activitypub/models/note.ts17
1 files changed, 16 insertions, 1 deletions
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);