From e63f884bc6ba89902e2efd20f1c6d8939f7c4270 Mon Sep 17 00:00:00 2001 From: syuilo Date: Sun, 8 Apr 2018 15:15:22 +0900 Subject: Use id in uri instead of username --- src/remote/activitypub/act/follow.ts | 16 +++++++--------- src/remote/activitypub/act/undo/follow.ts | 18 ++++++++---------- src/remote/activitypub/renderer/follow.ts | 2 +- src/remote/activitypub/renderer/key.ts | 4 ++-- src/remote/activitypub/renderer/like.ts | 12 +++++------- src/remote/activitypub/renderer/note.ts | 2 +- src/remote/activitypub/renderer/person.ts | 2 +- src/remote/activitypub/resolve-person.ts | 6 ++---- src/remote/activitypub/resolver.ts | 2 +- 9 files changed, 28 insertions(+), 36 deletions(-) (limited to 'src/remote') diff --git a/src/remote/activitypub/act/follow.ts b/src/remote/activitypub/act/follow.ts index 236886dc60..6a8b5a1bec 100644 --- a/src/remote/activitypub/act/follow.ts +++ b/src/remote/activitypub/act/follow.ts @@ -1,25 +1,23 @@ -import parseAcct from '../../../acct/parse'; import User, { IRemoteUser } from '../../../models/user'; import config from '../../../config'; import follow from '../../../services/following/create'; import { IFollow } from '../type'; export default async (actor: IRemoteUser, activity: IFollow): Promise => { - const prefix = config.url + '/@'; const id = typeof activity.object == 'string' ? activity.object : activity.object.id; - if (!id.startsWith(prefix)) { + if (!id.startsWith(config.url + '/')) { return null; } - const { username, host } = parseAcct(id.slice(prefix.length)); - if (host !== null) { - throw new Error(); - } + const followee = await User.findOne({ _id: id.split('/').pop() }); - const followee = await User.findOne({ username, host }); if (followee === null) { - throw new Error(); + throw new Error('followee not found'); + } + + if (followee.host != null) { + throw new Error('フォローしようとしているユーザーはローカルユーザーではありません'); } await follow(actor, followee, activity); diff --git a/src/remote/activitypub/act/undo/follow.ts b/src/remote/activitypub/act/undo/follow.ts index fcf27c9507..a85cb0305d 100644 --- a/src/remote/activitypub/act/undo/follow.ts +++ b/src/remote/activitypub/act/undo/follow.ts @@ -1,25 +1,23 @@ -import parseAcct from '../../../../acct/parse'; import User, { IRemoteUser } from '../../../../models/user'; import config from '../../../../config'; import unfollow from '../../../../services/following/delete'; import { IFollow } from '../../type'; export default async (actor: IRemoteUser, activity: IFollow): Promise => { - const prefix = config.url + '/@'; - const id = typeof activity == 'string' ? activity : activity.id; + const id = typeof activity.object == 'string' ? activity.object : activity.object.id; - if (!id.startsWith(prefix)) { + if (!id.startsWith(config.url + '/')) { return null; } - const { username, host } = parseAcct(id.slice(prefix.length)); - if (host !== null) { - throw new Error(); - } + const followee = await User.findOne({ _id: id.split('/').pop() }); - const followee = await User.findOne({ username, host }); if (followee === null) { - throw new Error(); + throw new Error('followee not found'); + } + + if (followee.host != null) { + throw new Error('フォロー解除しようとしているユーザーはローカルユーザーではありません'); } await unfollow(actor, followee, activity); diff --git a/src/remote/activitypub/renderer/follow.ts b/src/remote/activitypub/renderer/follow.ts index 89993d9458..bf8eeff06b 100644 --- a/src/remote/activitypub/renderer/follow.ts +++ b/src/remote/activitypub/renderer/follow.ts @@ -3,6 +3,6 @@ import { IRemoteUser, ILocalUser } from '../../../models/user'; export default (follower: ILocalUser, followee: IRemoteUser) => ({ type: 'Follow', - actor: `${config.url}/@${follower.username}`, + actor: `${config.url}/users/${follower._id}`, object: followee.uri }); diff --git a/src/remote/activitypub/renderer/key.ts b/src/remote/activitypub/renderer/key.ts index 76e2f13bcc..0d5e52557c 100644 --- a/src/remote/activitypub/renderer/key.ts +++ b/src/remote/activitypub/renderer/key.ts @@ -3,8 +3,8 @@ import { extractPublic } from '../../../crypto_key'; import { ILocalUser } from '../../../models/user'; export default (user: ILocalUser) => ({ - id: `${config.url}/@${user.username}/publickey`, + id: `${config.url}/users/${user._id}/publickey`, type: 'Key', - owner: `${config.url}/@${user.username}`, + owner: `${config.url}/users/${user._id}`, publicKeyPem: extractPublic(user.keypair) }); diff --git a/src/remote/activitypub/renderer/like.ts b/src/remote/activitypub/renderer/like.ts index 744896cc41..061a10ba84 100644 --- a/src/remote/activitypub/renderer/like.ts +++ b/src/remote/activitypub/renderer/like.ts @@ -1,10 +1,8 @@ import config from '../../../config'; import { ILocalUser } from '../../../models/user'; -export default (user: ILocalUser, note) => { - return { - type: 'Like', - actor: `${config.url}/@${user.username}`, - object: note.uri ? note.uri : `${config.url}/notes/${note._id}` - }; -}; +export default (user: ILocalUser, note) => ({ + type: 'Like', + actor: `${config.url}/users/${user._id}`, + object: note.uri ? note.uri : `${config.url}/notes/${note._id}` +}); diff --git a/src/remote/activitypub/renderer/note.ts b/src/remote/activitypub/renderer/note.ts index 48799af084..7cc388dc33 100644 --- a/src/remote/activitypub/renderer/note.ts +++ b/src/remote/activitypub/renderer/note.ts @@ -34,7 +34,7 @@ export default async (note: INote) => { _id: note.userId }); - const attributedTo = `${config.url}/@${user.username}`; + const attributedTo = `${config.url}/users/${user._id}`; return { id: `${config.url}/notes/${note._id}`, diff --git a/src/remote/activitypub/renderer/person.ts b/src/remote/activitypub/renderer/person.ts index 7ea6f532fb..82e261029c 100644 --- a/src/remote/activitypub/renderer/person.ts +++ b/src/remote/activitypub/renderer/person.ts @@ -3,7 +3,7 @@ import renderKey from './key'; import config from '../../../config'; export default user => { - const id = `${config.url}/@${user.username}`; + const id = `${config.url}/users/${user._id}`; return { type: 'Person', diff --git a/src/remote/activitypub/resolve-person.ts b/src/remote/activitypub/resolve-person.ts index 7d7989a01f..0140811f0a 100644 --- a/src/remote/activitypub/resolve-person.ts +++ b/src/remote/activitypub/resolve-person.ts @@ -1,6 +1,5 @@ import { JSDOM } from 'jsdom'; import { toUnicode } from 'punycode'; -import parseAcct from '../../acct/parse'; import config from '../../config'; import User, { validateUsername, isValidName, isValidDescription, IUser } from '../../models/user'; import webFinger from '../webfinger'; @@ -10,10 +9,9 @@ import { isCollectionOrOrderedCollection, IObject } from './type'; export default async (value: string | IObject, verifier?: string): Promise => { const id = typeof value == 'string' ? value : value.id; - const localPrefix = config.url + '/@'; - if (id.startsWith(localPrefix)) { - return await User.findOne(parseAcct(id.substr(localPrefix.length))); + if (id.startsWith(config.url + '/')) { + return await User.findOne({ _id: id.split('/').pop() }); } const resolver = new Resolver(); diff --git a/src/remote/activitypub/resolver.ts b/src/remote/activitypub/resolver.ts index 1466139c48..7d45783b47 100644 --- a/src/remote/activitypub/resolver.ts +++ b/src/remote/activitypub/resolver.ts @@ -50,7 +50,7 @@ export default class Resolver { //#region resolve local objects // TODO - //if (value.startsWith(`${config.url}/@`)) { + //if (value.startsWith(`${config.url}/`)) { //#endregion const object = await request({ -- cgit v1.2.3-freya