diff options
| author | syuilo <syuilotan@yahoo.co.jp> | 2018-04-17 16:05:50 +0900 |
|---|---|---|
| committer | syuilo <syuilotan@yahoo.co.jp> | 2018-04-17 16:05:50 +0900 |
| commit | aaa167fd5765360631af3b2c3af416e3f2db30e9 (patch) | |
| tree | 384e0120778bfbab5ff8c2bbcde4bd956b9d6848 /src/remote/activitypub/objects/note.ts | |
| parent | v4970 (diff) | |
| download | sharkey-aaa167fd5765360631af3b2c3af416e3f2db30e9.tar.gz sharkey-aaa167fd5765360631af3b2c3af416e3f2db30e9.tar.bz2 sharkey-aaa167fd5765360631af3b2c3af416e3f2db30e9.zip | |
Refactor
Diffstat (limited to 'src/remote/activitypub/objects/note.ts')
| -rw-r--r-- | src/remote/activitypub/objects/note.ts | 115 |
1 files changed, 0 insertions, 115 deletions
diff --git a/src/remote/activitypub/objects/note.ts b/src/remote/activitypub/objects/note.ts deleted file mode 100644 index 221d502f06..0000000000 --- a/src/remote/activitypub/objects/note.ts +++ /dev/null @@ -1,115 +0,0 @@ -import { JSDOM } from 'jsdom'; -import * as debug from 'debug'; - -import config from '../../../config'; -import Resolver from '../resolver'; -import Note, { INote } from '../../../models/note'; -import post from '../../../services/note/create'; -import { INote as INoteActivityStreamsObject, IObject } from '../type'; -import { resolvePerson, updatePerson } from './person'; -import { resolveImage } from './image'; -import { IRemoteUser } from '../../../models/user'; - -const log = debug('misskey:activitypub'); - -/** - * Noteをフェッチします。 - * - * Misskeyに対象のNoteが登録されていればそれを返します。 - */ -export async function fetchNote(value: string | IObject, resolver?: Resolver): Promise<INote> { - const uri = typeof value == 'string' ? value : value.id; - - // URIがこのサーバーを指しているならデータベースからフェッチ - if (uri.startsWith(config.url + '/')) { - return await Note.findOne({ _id: uri.split('/').pop() }); - } - - //#region このサーバーに既に登録されていたらそれを返す - const exist = await Note.findOne({ uri }); - - if (exist) { - return exist; - } - //#endregion - - return null; -} - -/** - * Noteを作成します。 - */ -export async function createNote(value: any, resolver?: Resolver, silent = false): Promise<INote> { - if (resolver == null) resolver = new Resolver(); - - const object = await resolver.resolve(value) as any; - - if (object == null || object.type !== 'Note') { - throw new Error('invalid note'); - } - - const note: INoteActivityStreamsObject = object; - - log(`Creating the Note: ${note.id}`); - - // 投稿者をフェッチ - const actor = await resolvePerson(note.attributedTo) as IRemoteUser; - - //#region Visibility - let visibility = 'public'; - if (!note.to.includes('https://www.w3.org/ns/activitystreams#Public')) visibility = 'unlisted'; - if (note.cc.length == 0) visibility = 'private'; - // TODO - if (visibility != 'public') throw new Error('unspported visibility'); - //#endergion - - // 添付メディア - // TODO: attachmentは必ずしもImageではない - // TODO: attachmentは必ずしも配列ではない - const media = note.attachment - ? await Promise.all(note.attachment.map(x => resolveImage(actor, x))) - : []; - - // リプライ - const reply = note.inReplyTo ? await resolveNote(note.inReplyTo, resolver) : null; - - const { window } = new JSDOM(note.content); - - // ユーザーの情報が古かったらついでに更新しておく - if (actor.updatedAt && Date.now() - actor.updatedAt.getTime() > 1000 * 60 * 60 * 24) { - updatePerson(note.attributedTo); - } - - return await post(actor, { - createdAt: new Date(note.published), - media, - reply, - renote: undefined, - text: window.document.body.textContent, - viaMobile: false, - geo: undefined, - visibility, - uri: note.id - }, silent); -} - -/** - * Noteを解決します。 - * - * Misskeyに対象のNoteが登録されていればそれを返し、そうでなければ - * リモートサーバーからフェッチしてMisskeyに登録しそれを返します。 - */ -export async function resolveNote(value: string | IObject, resolver?: Resolver): Promise<INote> { - const uri = typeof value == 'string' ? value : value.id; - - //#region このサーバーに既に登録されていたらそれを返す - const exist = await fetchNote(uri); - - if (exist) { - return exist; - } - //#endregion - - // リモートサーバーからフェッチしてきて登録 - return await createNote(value, resolver); -} |