summaryrefslogtreecommitdiff
path: root/src/remote/activitypub/kernel
diff options
context:
space:
mode:
authorMeiMei <30769358+mei23@users.noreply.github.com>2018-10-02 16:27:36 +0900
committersyuilo <Syuilotan@yahoo.co.jp>2018-10-02 16:27:36 +0900
commitc09a2a37fe3ab130969dd143b0ee65706871951f (patch)
tree92b3874cd806d135d920192be469a99a4cd4d6dd /src/remote/activitypub/kernel
parent:art: (diff)
downloadmisskey-c09a2a37fe3ab130969dd143b0ee65706871951f.tar.gz
misskey-c09a2a37fe3ab130969dd143b0ee65706871951f.tar.bz2
misskey-c09a2a37fe3ab130969dd143b0ee65706871951f.zip
リモートのピン留め投稿取得対応 (#2798)
* Fetch featured * Handle featured change * Fix typo
Diffstat (limited to 'src/remote/activitypub/kernel')
-rw-r--r--src/remote/activitypub/kernel/add/index.ts22
-rw-r--r--src/remote/activitypub/kernel/index.ts10
-rw-r--r--src/remote/activitypub/kernel/remove/index.ts22
3 files changed, 54 insertions, 0 deletions
diff --git a/src/remote/activitypub/kernel/add/index.ts b/src/remote/activitypub/kernel/add/index.ts
new file mode 100644
index 0000000000..eb2dba5b21
--- /dev/null
+++ b/src/remote/activitypub/kernel/add/index.ts
@@ -0,0 +1,22 @@
+import { IRemoteUser } from '../../../../models/user';
+import { IAdd } from '../../type';
+import { resolveNote } from '../../models/note';
+import { addPinned } from '../../../../services/i/pin';
+
+export default async (actor: IRemoteUser, activity: IAdd): Promise<void> => {
+ if ('actor' in activity && actor.uri !== activity.actor) {
+ throw new Error('invalid actor');
+ }
+
+ if (activity.target == null) {
+ throw new Error('target is null');
+ }
+
+ if (activity.target === actor.featured) {
+ const note = await resolveNote(activity.object);
+ await addPinned(actor, note._id);
+ return;
+ }
+
+ throw new Error(`unknown target: ${activity.target}`);
+};
diff --git a/src/remote/activitypub/kernel/index.ts b/src/remote/activitypub/kernel/index.ts
index 752a9bd2e2..52b0efc730 100644
--- a/src/remote/activitypub/kernel/index.ts
+++ b/src/remote/activitypub/kernel/index.ts
@@ -8,6 +8,8 @@ import like from './like';
import announce from './announce';
import accept from './accept';
import reject from './reject';
+import add from './add';
+import remove from './remove';
const self = async (actor: IRemoteUser, activity: Object): Promise<void> => {
switch (activity.type) {
@@ -31,6 +33,14 @@ const self = async (actor: IRemoteUser, activity: Object): Promise<void> => {
await reject(actor, activity);
break;
+ case 'Add':
+ await add(actor, activity).catch(err => console.log(err));
+ break;
+
+ case 'Remove':
+ await remove(actor, activity).catch(err => console.log(err));
+ break;
+
case 'Announce':
await announce(actor, activity);
break;
diff --git a/src/remote/activitypub/kernel/remove/index.ts b/src/remote/activitypub/kernel/remove/index.ts
new file mode 100644
index 0000000000..91b207c80d
--- /dev/null
+++ b/src/remote/activitypub/kernel/remove/index.ts
@@ -0,0 +1,22 @@
+import { IRemoteUser } from '../../../../models/user';
+import { IRemove } from '../../type';
+import { resolveNote } from '../../models/note';
+import { removePinned } from '../../../../services/i/pin';
+
+export default async (actor: IRemoteUser, activity: IRemove): Promise<void> => {
+ if ('actor' in activity && actor.uri !== activity.actor) {
+ throw new Error('invalid actor');
+ }
+
+ if (activity.target == null) {
+ throw new Error('target is null');
+ }
+
+ if (activity.target === actor.featured) {
+ const note = await resolveNote(activity.object);
+ await removePinned(actor, note._id);
+ return;
+ }
+
+ throw new Error(`unknown target: ${activity.target}`);
+};