From 7dc06b3d4383321ef85fa9bf2a1bc1d16ecab8c2 Mon Sep 17 00:00:00 2001 From: syuilo Date: Sat, 7 Apr 2018 15:54:11 +0900 Subject: [PATCH] Refactor --- src/remote/activitypub/act/undo/follow.ts | 25 +++++++++++++++++++ .../act/{undo.ts => undo/index.ts} | 2 +- 2 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 src/remote/activitypub/act/undo/follow.ts rename src/remote/activitypub/act/{undo.ts => undo/index.ts} (89%) diff --git a/src/remote/activitypub/act/undo/follow.ts b/src/remote/activitypub/act/undo/follow.ts new file mode 100644 index 000000000..b1c462a3b --- /dev/null +++ b/src/remote/activitypub/act/undo/follow.ts @@ -0,0 +1,25 @@ +import parseAcct from '../../../../acct/parse'; +import User from '../../../../models/user'; +import config from '../../../../config'; +import unfollow from '../../../../services/following/delete'; + +export default async (actor, activity): Promise => { + const prefix = config.url + '/@'; + const id = activity.object.id || activity.object; + + if (!id.startsWith(prefix)) { + return null; + } + + const { username, host } = parseAcct(id.slice(prefix.length)); + if (host !== null) { + throw new Error(); + } + + const followee = await User.findOne({ username, host }); + if (followee === null) { + throw new Error(); + } + + await unfollow(actor, followee, activity); +}; diff --git a/src/remote/activitypub/act/undo.ts b/src/remote/activitypub/act/undo/index.ts similarity index 89% rename from src/remote/activitypub/act/undo.ts rename to src/remote/activitypub/act/undo/index.ts index 9d9f6b035..ecd9944b4 100644 --- a/src/remote/activitypub/act/undo.ts +++ b/src/remote/activitypub/act/undo/index.ts @@ -1,4 +1,4 @@ -import unfollow from './unfollow'; +import unfollow from './follow'; export default async (actor, activity): Promise => { if ('actor' in activity && actor.account.uri !== activity.actor) {