summaryrefslogtreecommitdiff
path: root/src/remote/activitypub/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'src/remote/activitypub/kernel')
-rw-r--r--src/remote/activitypub/kernel/announce/note.ts15
-rw-r--r--src/remote/activitypub/kernel/delete/note.ts1
-rw-r--r--src/remote/activitypub/kernel/follow.ts5
-rw-r--r--src/remote/activitypub/kernel/like.ts15
-rw-r--r--src/remote/activitypub/kernel/undo/follow.ts5
5 files changed, 32 insertions, 9 deletions
diff --git a/src/remote/activitypub/kernel/announce/note.ts b/src/remote/activitypub/kernel/announce/note.ts
index a288dd499a..fe645b07b5 100644
--- a/src/remote/activitypub/kernel/announce/note.ts
+++ b/src/remote/activitypub/kernel/announce/note.ts
@@ -5,6 +5,7 @@ import post from '../../../../services/note/create';
import { IRemoteUser } from '../../../../models/user';
import { IAnnounce, INote } from '../../type';
import { fetchNote, resolveNote } from '../../models/note';
+import { resolvePerson } from '../../models/person';
const log = debug('misskey:activitypub');
@@ -30,16 +31,22 @@ export default async function(resolver: Resolver, actor: IRemoteUser, activity:
//#region Visibility
let visibility = 'public';
- if (!activity.to.includes('https://www.w3.org/ns/activitystreams#Public')) visibility = 'unlisted';
- if (activity.cc.length == 0) visibility = 'private';
- // TODO
- if (visibility != 'public') throw new Error('unspported visibility');
+ let visibleUsers = [];
+ if (!note.to.includes('https://www.w3.org/ns/activitystreams#Public')) {
+ if (note.cc.includes('https://www.w3.org/ns/activitystreams#Public')) {
+ visibility = 'home';
+ } else {
+ visibility = 'specified';
+ visibleUsers = await Promise.all(note.to.map(uri => resolvePerson(uri)));
+ }
+ } if (activity.cc.length == 0) visibility = 'followers';
//#endergion
await post(actor, {
createdAt: new Date(activity.published),
renote,
visibility,
+ visibleUsers,
uri
});
}
diff --git a/src/remote/activitypub/kernel/delete/note.ts b/src/remote/activitypub/kernel/delete/note.ts
index 64c342d39b..b2868f69a3 100644
--- a/src/remote/activitypub/kernel/delete/note.ts
+++ b/src/remote/activitypub/kernel/delete/note.ts
@@ -22,7 +22,6 @@ export default async function(actor: IRemoteUser, uri: string): Promise<void> {
$set: {
deletedAt: new Date(),
text: null,
- textHtml: null,
mediaIds: [],
poll: null
}
diff --git a/src/remote/activitypub/kernel/follow.ts b/src/remote/activitypub/kernel/follow.ts
index 6a8b5a1bec..7e31eb32ea 100644
--- a/src/remote/activitypub/kernel/follow.ts
+++ b/src/remote/activitypub/kernel/follow.ts
@@ -1,3 +1,4 @@
+import * as mongo from 'mongodb';
import User, { IRemoteUser } from '../../../models/user';
import config from '../../../config';
import follow from '../../../services/following/create';
@@ -10,7 +11,9 @@ export default async (actor: IRemoteUser, activity: IFollow): Promise<void> => {
return null;
}
- const followee = await User.findOne({ _id: id.split('/').pop() });
+ const followee = await User.findOne({
+ _id: new mongo.ObjectID(id.split('/').pop())
+ });
if (followee === null) {
throw new Error('followee not found');
diff --git a/src/remote/activitypub/kernel/like.ts b/src/remote/activitypub/kernel/like.ts
index 4941608588..17ec73f12b 100644
--- a/src/remote/activitypub/kernel/like.ts
+++ b/src/remote/activitypub/kernel/like.ts
@@ -1,7 +1,9 @@
+import * as mongo from 'mongodb';
import Note from '../../../models/note';
import { IRemoteUser } from '../../../models/user';
import { ILike } from '../type';
import create from '../../../services/note/reaction/create';
+import { validateReaction } from '../../../models/note-reaction';
export default async (actor: IRemoteUser, activity: ILike) => {
const id = typeof activity.object == 'string' ? activity.object : activity.object.id;
@@ -9,12 +11,21 @@ export default async (actor: IRemoteUser, activity: ILike) => {
// Transform:
// https://misskey.ex/notes/xxxx to
// xxxx
- const noteId = id.split('/').pop();
+ const noteId = new mongo.ObjectID(id.split('/').pop());
const note = await Note.findOne({ _id: noteId });
if (note === null) {
throw new Error();
}
- await create(actor, note, 'pudding');
+ let reaction = 'pudding';
+
+ // 他のMisskeyインスタンスからのリアクション
+ if (activity._misskey_reaction) {
+ if (validateReaction.ok(activity._misskey_reaction)) {
+ reaction = activity._misskey_reaction;
+ }
+ }
+
+ await create(actor, note, reaction);
};
diff --git a/src/remote/activitypub/kernel/undo/follow.ts b/src/remote/activitypub/kernel/undo/follow.ts
index a85cb0305d..c0b10c1898 100644
--- a/src/remote/activitypub/kernel/undo/follow.ts
+++ b/src/remote/activitypub/kernel/undo/follow.ts
@@ -1,3 +1,4 @@
+import * as mongo from 'mongodb';
import User, { IRemoteUser } from '../../../../models/user';
import config from '../../../../config';
import unfollow from '../../../../services/following/delete';
@@ -10,7 +11,9 @@ export default async (actor: IRemoteUser, activity: IFollow): Promise<void> => {
return null;
}
- const followee = await User.findOne({ _id: id.split('/').pop() });
+ const followee = await User.findOne({
+ _id: new mongo.ObjectID(id.split('/').pop())
+ });
if (followee === null) {
throw new Error('followee not found');