From 7dc06b3d4383321ef85fa9bf2a1bc1d16ecab8c2 Mon Sep 17 00:00:00 2001
From: syuilo <syuilotan@yahoo.co.jp>
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 0000000000..b1c462a3b0
--- /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<void> => {
+	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 9d9f6b0359..ecd9944b42 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<void> => {
 	if ('actor' in activity && actor.account.uri !== activity.actor) {