diff --git a/src/remote/activitypub/renderer/context.ts b/src/remote/activitypub/renderer/context.ts deleted file mode 100644 index b56f727ae..000000000 --- a/src/remote/activitypub/renderer/context.ts +++ /dev/null @@ -1,5 +0,0 @@ -export default [ - 'https://www.w3.org/ns/activitystreams', - 'https://w3id.org/security/v1', - { Hashtag: 'as:Hashtag' } -]; diff --git a/src/remote/activitypub/renderer/index.ts b/src/remote/activitypub/renderer/index.ts new file mode 100644 index 000000000..ee7f49616 --- /dev/null +++ b/src/remote/activitypub/renderer/index.ts @@ -0,0 +1,7 @@ +export default (x: any) => Object.assign({ + '@context': [ + 'https://www.w3.org/ns/activitystreams', + 'https://w3id.org/security/v1', + { Hashtag: 'as:Hashtag' } + ] +}, x); diff --git a/src/server/activitypub.ts b/src/server/activitypub.ts index acd10b788..2a99bccfc 100644 --- a/src/server/activitypub.ts +++ b/src/server/activitypub.ts @@ -2,8 +2,7 @@ import * as Router from 'koa-router'; import { parseRequest } from 'http-signature'; import { createHttp } from '../queue'; -import context from '../remote/activitypub/renderer/context'; -import render from '../remote/activitypub/renderer/note'; +import pack from '../remote/activitypub/renderer'; import Note from '../models/note'; import User, { isLocalUser } from '../models/user'; import renderNote from '../remote/activitypub/renderer/note'; @@ -57,10 +56,7 @@ router.get('/notes/:note', async (ctx, next) => { return; } - const rendered = await render(note); - rendered['@context'] = context; - - ctx.body = rendered; + ctx.body = pack(await renderNote(note)); }); // outbot @@ -81,9 +77,8 @@ router.get('/users/:user/outbox', async ctx => { const renderedNotes = await Promise.all(notes.map(note => renderNote(note))); const rendered = renderOrderedCollection(`${config.url}/users/${userId}/inbox`, user.notesCount, renderedNotes); - rendered['@context'] = context; - ctx.body = rendered; + ctx.body = pack(rendered); }); // publickey @@ -98,10 +93,7 @@ router.get('/users/:user/publickey', async ctx => { } if (isLocalUser(user)) { - const rendered = renderKey(user); - rendered['@context'] = context; - - ctx.body = rendered; + ctx.body = pack(renderKey(user)); } else { ctx.status = 400; } @@ -118,10 +110,7 @@ router.get('/users/:user', async ctx => { return; } - const rendered = renderPerson(user); - rendered['@context'] = context; - - ctx.body = rendered; + ctx.body = pack(renderPerson(user)); }); // follow form diff --git a/src/services/following/create.ts b/src/services/following/create.ts index 31e3be19e..3289e3129 100644 --- a/src/services/following/create.ts +++ b/src/services/following/create.ts @@ -4,7 +4,7 @@ import FollowingLog from '../../models/following-log'; import FollowedLog from '../../models/followed-log'; import event from '../../publishers/stream'; import notify from '../../publishers/notify'; -import context from '../../remote/activitypub/renderer/context'; +import pack from '../../remote/activitypub/renderer'; import renderFollow from '../../remote/activitypub/renderer/follow'; import renderAccept from '../../remote/activitypub/renderer/accept'; import { deliver } from '../../queue'; @@ -57,16 +57,12 @@ export default async function(follower: IUser, followee: IUser, activity?) { } if (isLocalUser(follower) && isRemoteUser(followee)) { - const content = renderFollow(follower, followee); - content['@context'] = context; - + const content = pack(renderFollow(follower, followee)); deliver(follower, content, followee.inbox).save(); } if (isRemoteUser(follower) && isLocalUser(followee)) { - const content = renderAccept(activity); - content['@context'] = context; - + const content = pack(renderAccept(activity)); deliver(followee, content, follower.inbox).save(); } } diff --git a/src/services/following/delete.ts b/src/services/following/delete.ts index d79bf64f5..8b6c56816 100644 --- a/src/services/following/delete.ts +++ b/src/services/following/delete.ts @@ -3,7 +3,7 @@ import Following from '../../models/following'; import FollowingLog from '../../models/following-log'; import FollowedLog from '../../models/followed-log'; import event from '../../publishers/stream'; -import context from '../../remote/activitypub/renderer/context'; +import pack from '../../remote/activitypub/renderer'; import renderFollow from '../../remote/activitypub/renderer/follow'; import renderUndo from '../../remote/activitypub/renderer/undo'; import { deliver } from '../../queue'; @@ -56,9 +56,7 @@ export default async function(follower: IUser, followee: IUser, activity?) { } if (isLocalUser(follower) && isRemoteUser(followee)) { - const content = renderUndo(renderFollow(follower, followee)); - content['@context'] = context; - + const content = pack(renderUndo(renderFollow(follower, followee))); deliver(follower, content, followee.inbox).save(); } } diff --git a/src/services/note/create.ts b/src/services/note/create.ts index 8f0b84bcc..b238cd560 100644 --- a/src/services/note/create.ts +++ b/src/services/note/create.ts @@ -6,7 +6,7 @@ import { deliver } from '../../queue'; import renderNote from '../../remote/activitypub/renderer/note'; import renderCreate from '../../remote/activitypub/renderer/create'; import renderAnnounce from '../../remote/activitypub/renderer/announce'; -import context from '../../remote/activitypub/renderer/context'; +import packAp from '../../remote/activitypub/renderer'; import { IDriveFile } from '../../models/drive-file'; import notify from '../../publishers/notify'; import NoteWatching from '../../models/note-watching'; @@ -132,8 +132,7 @@ export default async (user: IUser, data: { const content = data.renote && data.text == null ? renderAnnounce(data.renote.uri ? data.renote.uri : await renderNote(data.renote)) : renderCreate(await renderNote(note)); - content['@context'] = context; - return content; + return packAp(content); }; // 投稿がリプライかつ投稿者がローカルユーザーかつリプライ先の投稿の投稿者がリモートユーザーなら配送 diff --git a/src/services/note/reaction/create.ts b/src/services/note/reaction/create.ts index 88158034f..69a14248d 100644 --- a/src/services/note/reaction/create.ts +++ b/src/services/note/reaction/create.ts @@ -8,7 +8,7 @@ import NoteWatching from '../../../models/note-watching'; import watch from '../watch'; import renderLike from '../../../remote/activitypub/renderer/like'; import { deliver } from '../../../queue'; -import context from '../../../remote/activitypub/renderer/context'; +import pack from '../../../remote/activitypub/renderer'; export default async (user: IUser, note: INote, reaction: string) => new Promise(async (res, rej) => { // Myself @@ -85,9 +85,7 @@ export default async (user: IUser, note: INote, reaction: string) => new Promise //#region 配信 // リアクターがローカルユーザーかつリアクション対象がリモートユーザーの投稿なら配送 if (isLocalUser(user) && isRemoteUser(note._user)) { - const content = renderLike(user, note); - content['@context'] = context; - + const content = pack(renderLike(user, note)); deliver(user, content, note._user.inbox).save(); } //#endregion