diff options
| author | MeiMei <30769358+mei23@users.noreply.github.com> | 2020-05-09 08:21:42 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-05-09 08:21:42 +0900 |
| commit | 070f1f3c6ee3188e1b16236366877c1c243601c1 (patch) | |
| tree | f77fa43be8524698bc9e46246748a3163dbd4a7a /src/remote/activitypub/kernel/create/note.ts | |
| parent | WebAuthnでログインできないのを修正 (#6327) (diff) | |
| download | sharkey-070f1f3c6ee3188e1b16236366877c1c243601c1.tar.gz sharkey-070f1f3c6ee3188e1b16236366877c1c243601c1.tar.bz2 sharkey-070f1f3c6ee3188e1b16236366877c1c243601c1.zip | |
APリファクタとLD-Signatureの検証に対応 (#6300)
* DbResolver
* inbox types
* 認証順を変更
* User/Keyあたりをまとめる
* LD-Signatue
* Validate contexts url
* LD-Signature DocumentLoaderにProxyとTimeout
Diffstat (limited to 'src/remote/activitypub/kernel/create/note.ts')
| -rw-r--r-- | src/remote/activitypub/kernel/create/note.ts | 26 |
1 files changed, 23 insertions, 3 deletions
diff --git a/src/remote/activitypub/kernel/create/note.ts b/src/remote/activitypub/kernel/create/note.ts index d7027b8f3f..f4fb8e5647 100644 --- a/src/remote/activitypub/kernel/create/note.ts +++ b/src/remote/activitypub/kernel/create/note.ts @@ -3,19 +3,39 @@ import { IRemoteUser } from '../../../../models/entities/user'; import { createNote, fetchNote } from '../../models/note'; import { getApId, IObject, ICreate } from '../../type'; import { getApLock } from '../../../../misc/app-lock'; +import { extractDbHost } from '../../../../misc/convert-host'; /** * 投稿作成アクティビティを捌きます */ -export default async function(resolver: Resolver, actor: IRemoteUser, note: IObject, silent = false, activity?: ICreate): Promise<void> { +export default async function(resolver: Resolver, actor: IRemoteUser, note: IObject, silent = false, activity?: ICreate): Promise<string> { const uri = getApId(note); + if (typeof note === 'object') { + if (actor.uri !== note.attributedTo) { + return `skip: actor.uri !== note.attributedTo`; + } + + if (typeof note.id === 'string') { + if (extractDbHost(actor.uri) !== extractDbHost(note.id)) { + return `skip: host in actor.uri !== note.id`; + } + } + } + const unlock = await getApLock(uri); try { const exist = await fetchNote(note); - if (exist == null) { - await createNote(note, resolver, silent); + if (exist) return 'skip: note exists'; + + await createNote(note, resolver, silent); + return 'ok'; + } catch (e) { + if (e.statusCode >= 400 && e.statusCode < 500) { + return `skip ${e.statusCode}`; + } else { + throw e; } } finally { unlock(); |