summaryrefslogtreecommitdiff
path: root/src/remote/activitypub/kernel/reject
diff options
context:
space:
mode:
authorsyuilo <syuilotan@yahoo.co.jp>2018-06-01 00:42:37 +0900
committersyuilo <syuilotan@yahoo.co.jp>2018-06-01 00:42:37 +0900
commit35115607bc7eb1ff974c7f7c4d9f14bc8377ee6e (patch)
treecd5e818d8a0bb619db02c42f3ca62b9ba77fcc5b /src/remote/activitypub/kernel/reject
parentwip (diff)
downloadsharkey-35115607bc7eb1ff974c7f7c4d9f14bc8377ee6e.tar.gz
sharkey-35115607bc7eb1ff974c7f7c4d9f14bc8377ee6e.tar.bz2
sharkey-35115607bc7eb1ff974c7f7c4d9f14bc8377ee6e.zip
wip
Diffstat (limited to 'src/remote/activitypub/kernel/reject')
-rw-r--r--src/remote/activitypub/kernel/reject/follow.ts27
-rw-r--r--src/remote/activitypub/kernel/reject/index.ts35
2 files changed, 62 insertions, 0 deletions
diff --git a/src/remote/activitypub/kernel/reject/follow.ts b/src/remote/activitypub/kernel/reject/follow.ts
new file mode 100644
index 0000000000..862f3def3b
--- /dev/null
+++ b/src/remote/activitypub/kernel/reject/follow.ts
@@ -0,0 +1,27 @@
+import * as mongo from 'mongodb';
+import User, { IRemoteUser } from '../../../../models/user';
+import config from '../../../../config';
+import reject from '../../../../services/user/reject-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 reject(actor, follower);
+};
diff --git a/src/remote/activitypub/kernel/reject/index.ts b/src/remote/activitypub/kernel/reject/index.ts
new file mode 100644
index 0000000000..a82c3fd61e
--- /dev/null
+++ b/src/remote/activitypub/kernel/reject/index.ts
@@ -0,0 +1,35 @@
+import * as debug from 'debug';
+
+import Resolver from '../../resolver';
+import { IRemoteUser } from '../../../../models/user';
+import rejectFollow from './follow';
+import { IReject } from '../../type';
+
+const log = debug('misskey:activitypub');
+
+export default async (actor: IRemoteUser, activity: IReject): Promise<void> => {
+ const uri = activity.id || activity;
+
+ log(`Reject: ${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':
+ rejectFollow(actor, object);
+ break;
+
+ default:
+ console.warn(`Unknown reject type: ${object.type}`);
+ break;
+ }
+};