summaryrefslogtreecommitdiff
path: root/src/remote
diff options
context:
space:
mode:
authorAkihiko Odaki <nekomanma@pixiv.co.jp>2018-04-05 01:24:39 +0900
committerAkihiko Odaki <nekomanma@pixiv.co.jp>2018-04-05 01:24:39 +0900
commit168b0730b46fd283b900b553dd2eede2aa4c7dac (patch)
treec60094d36238cae8ee69a215c01ea4c4dcb3976d /src/remote
parentDo not declare two variables in a statement (diff)
downloadsharkey-168b0730b46fd283b900b553dd2eede2aa4c7dac.tar.gz
sharkey-168b0730b46fd283b900b553dd2eede2aa4c7dac.tar.bz2
sharkey-168b0730b46fd283b900b553dd2eede2aa4c7dac.zip
Implement Mention object
Diffstat (limited to 'src/remote')
-rw-r--r--src/remote/activitypub/create.ts12
-rw-r--r--src/remote/activitypub/resolve-person.ts5
-rw-r--r--src/remote/resolve-user.ts3
3 files changed, 15 insertions, 5 deletions
diff --git a/src/remote/activitypub/create.ts b/src/remote/activitypub/create.ts
index 97c72860fd..710d56fd3d 100644
--- a/src/remote/activitypub/create.ts
+++ b/src/remote/activitypub/create.ts
@@ -7,6 +7,7 @@ import { IRemoteUser } from '../../models/user';
import uploadFromUrl from '../../drive/upload-from-url';
import createPost from '../../post/create';
import distributePost from '../../post/distribute';
+import resolvePerson from './resolve-person';
import Resolver from './resolver';
const createDOMPurify = require('dompurify');
@@ -53,6 +54,15 @@ class Creator {
.map(({ object }) => object.$id);
const { window } = new JSDOM(note.content);
+ const mentions = [];
+
+ for (const { href, type } of note.tags) {
+ switch (type) {
+ case 'Mention':
+ mentions.push(resolvePerson(resolver, href));
+ break;
+ }
+ }
const inserted = await createPost({
channelId: undefined,
@@ -69,7 +79,7 @@ class Creator {
viaMobile: false,
geo: undefined,
uri: note.id
- }, null, null, []);
+ }, null, null, await Promise.all(mentions));
const promises = [];
diff --git a/src/remote/activitypub/resolve-person.ts b/src/remote/activitypub/resolve-person.ts
index 2cf3ad32d8..7ed01e3222 100644
--- a/src/remote/activitypub/resolve-person.ts
+++ b/src/remote/activitypub/resolve-person.ts
@@ -4,14 +4,13 @@ import User, { validateUsername, isValidName, isValidDescription } from '../../m
import { createHttp } from '../../queue';
import webFinger from '../webfinger';
import create from './create';
-import Resolver from './resolver';
async function isCollection(collection) {
return ['Collection', 'OrderedCollection'].includes(collection.type);
}
-export default async (value, verifier?: string) => {
- const { resolver, object } = await new Resolver().resolveOne(value);
+export default async (parentResolver, value, verifier?: string) => {
+ const { resolver, object } = parentResolver.resolveOne(value);
if (
object === null ||
diff --git a/src/remote/resolve-user.ts b/src/remote/resolve-user.ts
index 48219e8cb3..097ed66738 100644
--- a/src/remote/resolve-user.ts
+++ b/src/remote/resolve-user.ts
@@ -1,6 +1,7 @@
import { toUnicode, toASCII } from 'punycode';
import User from '../models/user';
import resolvePerson from './activitypub/resolve-person';
+import Resolver from './activitypub/resolver';
import webFinger from './webfinger';
export default async (username, host, option) => {
@@ -19,7 +20,7 @@ export default async (username, host, option) => {
throw new Error();
}
- user = await resolvePerson(self.href, acctLower);
+ user = await resolvePerson(new Resolver(), self.href, acctLower);
}
return user;