summaryrefslogtreecommitdiff
path: root/src/services
diff options
context:
space:
mode:
authormei23 <m@m544.net>2018-09-01 20:17:30 +0900
committermei23 <m@m544.net>2018-09-01 20:23:01 +0900
commit57a63d38aaae33331c0272cbcbc3f5d254cfd93d (patch)
treed46e619743c4a3710855afd2df978565143ef4b1 /src/services
parentReceive Update activity (diff)
downloadsharkey-57a63d38aaae33331c0272cbcbc3f5d254cfd93d.tar.gz
sharkey-57a63d38aaae33331c0272cbcbc3f5d254cfd93d.tar.bz2
sharkey-57a63d38aaae33331c0272cbcbc3f5d254cfd93d.zip
Send Update activity
Diffstat (limited to 'src/services')
-rw-r--r--src/services/i/update.ts38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/services/i/update.ts b/src/services/i/update.ts
new file mode 100644
index 0000000000..25b55b0355
--- /dev/null
+++ b/src/services/i/update.ts
@@ -0,0 +1,38 @@
+import * as mongo from 'mongodb';
+import User, { isLocalUser, isRemoteUser } from '../../models/user';
+import Following from '../../models/following';
+import renderPerson from '../../remote/activitypub/renderer/person';
+import renderUpdate from '../../remote/activitypub/renderer/update';
+import packAp from '../../remote/activitypub/renderer';
+import { deliver } from '../../queue';
+
+export async function publishToFollowers(userId: mongo.ObjectID) {
+ const user = await User.findOne({
+ _id: userId
+ });
+
+ const followers = await Following.find({
+ followeeId: user._id
+ });
+
+ const queue: string[] = [];
+
+ // フォロワーがリモートユーザーかつ投稿者がローカルユーザーならUpdateを配信
+ if (isLocalUser(user)) {
+ followers.map(following => {
+ const follower = following._follower;
+
+ if (isRemoteUser(follower)) {
+ const inbox = follower.sharedInbox || follower.inbox;
+ if (!queue.includes(inbox)) queue.push(inbox);
+ }
+ });
+
+ if (queue.length > 0) {
+ const content = packAp(renderUpdate(await renderPerson(user), user));
+ queue.forEach(inbox => {
+ deliver(user, content, inbox);
+ });
+ }
+ }
+}