summaryrefslogtreecommitdiff
path: root/src/services/following/requests/create.ts
diff options
context:
space:
mode:
authorsyuilo <syuilotan@yahoo.co.jp>2018-06-02 00:38:31 +0900
committersyuilo <syuilotan@yahoo.co.jp>2018-06-02 00:38:31 +0900
commitf14571dc42532c269e606f810ec2af03a3baeba5 (patch)
tree04d86f4be12e93502665d4fcbf129f14be184956 /src/services/following/requests/create.ts
parentwip (diff)
downloadmisskey-f14571dc42532c269e606f810ec2af03a3baeba5.tar.gz
misskey-f14571dc42532c269e606f810ec2af03a3baeba5.tar.bz2
misskey-f14571dc42532c269e606f810ec2af03a3baeba5.zip
wip
Diffstat (limited to 'src/services/following/requests/create.ts')
-rw-r--r--src/services/following/requests/create.ts46
1 files changed, 46 insertions, 0 deletions
diff --git a/src/services/following/requests/create.ts b/src/services/following/requests/create.ts
new file mode 100644
index 0000000000..1285c21ea8
--- /dev/null
+++ b/src/services/following/requests/create.ts
@@ -0,0 +1,46 @@
+import User, { isLocalUser, isRemoteUser, pack as packUser, IUser } from '../../../models/user';
+import event from '../../../publishers/stream';
+import notify from '../../../publishers/notify';
+import pack from '../../../remote/activitypub/renderer';
+import renderFollow from '../../../remote/activitypub/renderer/follow';
+import { deliver } from '../../../queue';
+import FollowRequest from '../../../models/follow-request';
+
+export default async function(follower: IUser, followee: IUser) {
+ if (!followee.isLocked) throw '対象のアカウントは鍵アカウントではありません';
+
+ await FollowRequest.insert({
+ createdAt: new Date(),
+ followerId: follower._id,
+ followeeId: followee._id,
+
+ // 非正規化
+ _follower: {
+ host: follower.host,
+ inbox: isRemoteUser(follower) ? follower.inbox : undefined
+ },
+ _followee: {
+ host: followee.host,
+ inbox: isRemoteUser(followee) ? followee.inbox : undefined
+ }
+ });
+
+ User.update({ _id: followee._id }, {
+ $inc: {
+ pendingReceivedFollowRequestsCount: 1
+ }
+ });
+
+ // Publish reciveRequest event
+ if (isLocalUser(followee)) {
+ packUser(follower, followee).then(packed => event(followee._id, 'reciveRequest', packed)),
+
+ // 通知を作成
+ notify(followee._id, follower._id, 'reciveRequest');
+ }
+
+ if (isLocalUser(follower) && isRemoteUser(followee)) {
+ const content = pack(renderFollow(follower, followee));
+ deliver(follower, content, followee.inbox);
+ }
+}