diff options
| author | syuilo <syuilotan@yahoo.co.jp> | 2018-05-31 22:56:02 +0900 |
|---|---|---|
| committer | syuilo <syuilotan@yahoo.co.jp> | 2018-05-31 22:56:02 +0900 |
| commit | 51255bb4467d7f797686639d785edf0eede846ec (patch) | |
| tree | 7aaed0d73fd4d7f6183bbda5d98c05b7ed28d0ad /src/remote/activitypub/kernel | |
| parent | wip (diff) | |
| download | sharkey-51255bb4467d7f797686639d785edf0eede846ec.tar.gz sharkey-51255bb4467d7f797686639d785edf0eede846ec.tar.bz2 sharkey-51255bb4467d7f797686639d785edf0eede846ec.zip | |
wip
Diffstat (limited to 'src/remote/activitypub/kernel')
| -rw-r--r-- | src/remote/activitypub/kernel/accept/follow.ts | 27 | ||||
| -rw-r--r-- | src/remote/activitypub/kernel/accept/index.ts | 35 |
2 files changed, 62 insertions, 0 deletions
diff --git a/src/remote/activitypub/kernel/accept/follow.ts b/src/remote/activitypub/kernel/accept/follow.ts new file mode 100644 index 0000000000..9d425419ab --- /dev/null +++ b/src/remote/activitypub/kernel/accept/follow.ts @@ -0,0 +1,27 @@ +import * as mongo from 'mongodb'; +import User, { IRemoteUser } from '../../../../models/user'; +import config from '../../../../config'; +import accept from '../../../../services/user/accept-follow-request'; +import { IFollow } from '../../type'; + +export default async (actor: IRemoteUser, activity: IFollow): Promise<void> => { + const id = typeof activity.object == 'string' ? activity.object : activity.object.id; + + if (!id.startsWith(config.url + '/')) { + return null; + } + + const follower = await User.findOne({ + _id: new mongo.ObjectID(id.split('/').pop()) + }); + + if (follower === null) { + throw new Error('follower not found'); + } + + if (follower.host != null) { + throw new Error('フォローリクエストしたユーザーはローカルユーザーではありません'); + } + + await accept(actor, follower); +}; diff --git a/src/remote/activitypub/kernel/accept/index.ts b/src/remote/activitypub/kernel/accept/index.ts new file mode 100644 index 0000000000..b647df022e --- /dev/null +++ b/src/remote/activitypub/kernel/accept/index.ts @@ -0,0 +1,35 @@ +import * as debug from 'debug'; + +import Resolver from '../../resolver'; +import { IRemoteUser } from '../../../../models/user'; +import acceptFollow from './follow'; +import { IAccept } from '../../type'; + +const log = debug('misskey:activitypub'); + +export default async (actor: IRemoteUser, activity: IAccept): Promise<void> => { + const uri = activity.id || activity; + + log(`Accept: ${uri}`); + + const resolver = new Resolver(); + + let object; + + try { + object = await resolver.resolve(activity.object); + } catch (e) { + log(`Resolution failed: ${e}`); + throw e; + } + + switch (object.type) { + case 'Follow': + acceptFollow(resolver, actor, activity, object); + break; + + default: + console.warn(`Unknown accept type: ${object.type}`); + break; + } +}; |