summaryrefslogtreecommitdiff
path: root/src/server/api
diff options
context:
space:
mode:
authorsyuilo <syuilotan@yahoo.co.jp>2019-02-07 21:59:18 +0900
committersyuilo <syuilotan@yahoo.co.jp>2019-02-07 21:59:18 +0900
commite43c9c0e2181831a0b6244989355d3d7de6493f0 (patch)
treeb1606ee8ae617ff6592d1cac82dafe127136dbd4 /src/server/api
parent10.82.4 (diff)
downloadsharkey-e43c9c0e2181831a0b6244989355d3d7de6493f0.tar.gz
sharkey-e43c9c0e2181831a0b6244989355d3d7de6493f0.tar.bz2
sharkey-e43c9c0e2181831a0b6244989355d3d7de6493f0.zip
特定インスタンスからのフォローを全解除できるように
Diffstat (limited to 'src/server/api')
-rw-r--r--src/server/api/endpoints/admin/federation/remove-all-following.ts41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/server/api/endpoints/admin/federation/remove-all-following.ts b/src/server/api/endpoints/admin/federation/remove-all-following.ts
new file mode 100644
index 0000000000..1021965b1e
--- /dev/null
+++ b/src/server/api/endpoints/admin/federation/remove-all-following.ts
@@ -0,0 +1,41 @@
+import $ from 'cafy';
+import define from '../../../define';
+import Instance from '../../../../../models/instance';
+import Following from '../../../../../models/following';
+import User from '../../../../../models/user';
+import deleteFollowing from '../../../../../services/following/delete';
+
+export const meta = {
+ requireCredential: true,
+ requireModerator: true,
+
+ params: {
+ host: {
+ validator: $.str
+ }
+ }
+};
+
+export default define(meta, (ps, me) => new Promise(async (res, rej) => {
+ const instance = await Instance
+ .findOne({ host: ps.host });
+
+ if (instance == null) {
+ return rej('instance not found');
+ }
+
+ const followings = await Following.find({
+ '_follower.host': { $ne: null }
+ });
+
+ const pairs = await Promise.all(followings.map(f => Promise.all([
+ User.findOne({ _id: f.followerId }),
+ User.findOne({ _id: f.followeeId })
+ ])));
+
+ for (const pair of pairs) {
+ deleteFollowing(pair[0], pair[1]);
+ }
+
+ res();
+}));