summaryrefslogtreecommitdiff
path: root/src/remote
diff options
context:
space:
mode:
authorsyuilo <syuilotan@yahoo.co.jp>2018-04-05 01:22:41 +0900
committersyuilo <syuilotan@yahoo.co.jp>2018-04-05 01:22:41 +0900
commiteb304cb5fb588a3da8742f234cdf05ce6deeaa59 (patch)
tree1d877e189ab5dfb9f959db62ee30955da7897781 /src/remote
parentwip (diff)
downloadsharkey-eb304cb5fb588a3da8742f234cdf05ce6deeaa59.tar.gz
sharkey-eb304cb5fb588a3da8742f234cdf05ce6deeaa59.tar.bz2
sharkey-eb304cb5fb588a3da8742f234cdf05ce6deeaa59.zip
wip
Diffstat (limited to 'src/remote')
-rw-r--r--src/remote/activitypub/act/create.ts1
-rw-r--r--src/remote/activitypub/act/index.ts11
-rw-r--r--src/remote/activitypub/act/undo.ts15
-rw-r--r--src/remote/activitypub/act/undo/index.ts27
-rw-r--r--src/remote/activitypub/act/undo/unfollow.ts11
-rw-r--r--src/remote/activitypub/act/unfollow.ts25
6 files changed, 45 insertions, 45 deletions
diff --git a/src/remote/activitypub/act/create.ts b/src/remote/activitypub/act/create.ts
index 957900900f..c486571fc1 100644
--- a/src/remote/activitypub/act/create.ts
+++ b/src/remote/activitypub/act/create.ts
@@ -1,5 +1,4 @@
import { JSDOM } from 'jsdom';
-const createDOMPurify = require('dompurify');
import Resolver from '../resolver';
import DriveFile from '../../../models/drive-file';
diff --git a/src/remote/activitypub/act/index.ts b/src/remote/activitypub/act/index.ts
index d78335f16e..f22500acef 100644
--- a/src/remote/activitypub/act/index.ts
+++ b/src/remote/activitypub/act/index.ts
@@ -2,25 +2,24 @@ import create from './create';
import performDeleteActivity from './delete';
import follow from './follow';
import undo from './undo';
-import Resolver from '../resolver';
import { IObject } from '../type';
-export default async (parentResolver: Resolver, actor, activity: IObject): Promise<void> => {
+export default async (actor, activity: IObject): Promise<void> => {
switch (activity.type) {
case 'Create':
- await create(parentResolver, actor, activity);
+ await create(actor, activity);
break;
case 'Delete':
- await performDeleteActivity(parentResolver, actor, activity);
+ await performDeleteActivity(actor, activity);
break;
case 'Follow':
- await follow(parentResolver, actor, activity);
+ await follow(actor, activity);
break;
case 'Undo':
- await undo(parentResolver, actor, activity);
+ await undo(actor, activity);
break;
default:
diff --git a/src/remote/activitypub/act/undo.ts b/src/remote/activitypub/act/undo.ts
new file mode 100644
index 0000000000..b3b83777d1
--- /dev/null
+++ b/src/remote/activitypub/act/undo.ts
@@ -0,0 +1,15 @@
+import unfollow from './unfollow';
+
+export default async (actor, activity): Promise<void> => {
+ if ('actor' in activity && actor.account.uri !== activity.actor) {
+ throw new Error('invalid actor');
+ }
+
+ switch (activity.object.type) {
+ case 'Follow':
+ unfollow(activity.object);
+ break;
+ }
+
+ return null;
+};
diff --git a/src/remote/activitypub/act/undo/index.ts b/src/remote/activitypub/act/undo/index.ts
deleted file mode 100644
index aa60d3a4fa..0000000000
--- a/src/remote/activitypub/act/undo/index.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-import act from '../../act';
-import deleteObject from '../../delete';
-import unfollow from './unfollow';
-import Resolver from '../../resolver';
-
-export default async (resolver: Resolver, actor, activity): Promise<void> => {
- if ('actor' in activity && actor.account.uri !== activity.actor) {
- throw new Error();
- }
-
- const results = await act(resolver, actor, activity.object);
-
- await Promise.all(results.map(async promisedResult => {
- const result = await promisedResult;
-
- if (result === null || await deleteObject(result) !== null) {
- return;
- }
-
- switch (result.object.$ref) {
- case 'following':
- await unfollow(result.object);
- }
- }));
-
- return null;
-};
diff --git a/src/remote/activitypub/act/undo/unfollow.ts b/src/remote/activitypub/act/undo/unfollow.ts
deleted file mode 100644
index c17e06e8a9..0000000000
--- a/src/remote/activitypub/act/undo/unfollow.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import queue from '../../../../queue';
-
-export default ({ $id }) => new Promise((resolve, reject) => {
- queue.create('http', { type: 'unfollow', id: $id }).save(error => {
- if (error) {
- reject(error);
- } else {
- resolve();
- }
- });
-});
diff --git a/src/remote/activitypub/act/unfollow.ts b/src/remote/activitypub/act/unfollow.ts
new file mode 100644
index 0000000000..e3c9e1c1c8
--- /dev/null
+++ b/src/remote/activitypub/act/unfollow.ts
@@ -0,0 +1,25 @@
+import parseAcct from '../../../acct/parse';
+import User from '../../../models/user';
+import config from '../../../config';
+import unfollow from '../../../api/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);
+};