summaryrefslogtreecommitdiff
path: root/src/services/following/requests
diff options
context:
space:
mode:
authorsyuilo <syuilotan@yahoo.co.jp>2018-06-02 00:15:17 +0900
committersyuilo <syuilotan@yahoo.co.jp>2018-06-02 00:15:17 +0900
commit484d17f53f26ff3e8961d86f03ef94f62f8f62ed (patch)
tree5d010a52387c3bedf69bdee4ab872c39c25e5bd0 /src/services/following/requests
parentMerge branch 'master' into locked-account (diff)
downloadmisskey-484d17f53f26ff3e8961d86f03ef94f62f8f62ed.tar.gz
misskey-484d17f53f26ff3e8961d86f03ef94f62f8f62ed.tar.bz2
misskey-484d17f53f26ff3e8961d86f03ef94f62f8f62ed.zip
wip
Diffstat (limited to 'src/services/following/requests')
-rw-r--r--src/services/following/requests/accept-all.ts24
-rw-r--r--src/services/following/requests/accept.ts64
-rw-r--r--src/services/following/requests/reject.ts24
3 files changed, 112 insertions, 0 deletions
diff --git a/src/services/following/requests/accept-all.ts b/src/services/following/requests/accept-all.ts
new file mode 100644
index 0000000000..9708d9e658
--- /dev/null
+++ b/src/services/following/requests/accept-all.ts
@@ -0,0 +1,24 @@
+import User, { IUser } from "../../../models/user";
+import FollowRequest from "../../../models/follow-request";
+import accept from './accept';
+
+/**
+ * 指定したユーザー宛てのフォローリクエストをすべて承認
+ * @param user ユーザー
+ */
+export default async function(user: IUser) {
+ const requests = await FollowRequest.find({
+ followeeId: user._id
+ });
+
+ requests.forEach(async request => {
+ const follower = await User.findOne({ _id: request.followerId });
+ accept(user, follower);
+ });
+
+ User.update({ _id: user._id }, {
+ $set: {
+ pendingReceivedFollowRequestsCount: 0
+ }
+ });
+}
diff --git a/src/services/following/requests/accept.ts b/src/services/following/requests/accept.ts
new file mode 100644
index 0000000000..2dff9b01fe
--- /dev/null
+++ b/src/services/following/requests/accept.ts
@@ -0,0 +1,64 @@
+import User, { IUser, isRemoteUser, ILocalUser } from "../../../models/user";
+import FollowRequest from "../../../models/follow-request";
+import pack from '../../../remote/activitypub/renderer';
+import renderFollow from '../../../remote/activitypub/renderer/follow';
+import renderAccept from '../../../remote/activitypub/renderer/accept';
+import { deliver } from '../../../queue';
+import Following from "../../../models/following";
+import FollowingLog from "../../../models/following-log";
+import FollowedLog from "../../../models/followed-log";
+
+export default async function(followee: IUser, follower: IUser) {
+ const following = await Following.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
+ }
+ });
+
+ if (isRemoteUser(follower)) {
+ const content = pack(renderAccept(renderFollow(follower, followee)));
+ deliver(followee as ILocalUser, content, follower.inbox);
+ }
+
+ FollowRequest.remove({
+ followeeId: followee._id,
+ followerId: follower._id
+ });
+
+ //#region Increment following count
+ User.update({ _id: follower._id }, {
+ $inc: {
+ followingCount: 1
+ }
+ });
+
+ FollowingLog.insert({
+ createdAt: following.createdAt,
+ userId: follower._id,
+ count: follower.followingCount + 1
+ });
+ //#endregion
+
+ //#region Increment followers count
+ User.update({ _id: followee._id }, {
+ $inc: {
+ followersCount: 1
+ }
+ });
+ FollowedLog.insert({
+ createdAt: following.createdAt,
+ userId: followee._id,
+ count: followee.followersCount + 1
+ });
+ //#endregion
+}
diff --git a/src/services/following/requests/reject.ts b/src/services/following/requests/reject.ts
new file mode 100644
index 0000000000..acd419d0ee
--- /dev/null
+++ b/src/services/following/requests/reject.ts
@@ -0,0 +1,24 @@
+import User, { IUser, isRemoteUser, ILocalUser } from "../../../models/user";
+import FollowRequest from "../../../models/follow-request";
+import pack from '../../../remote/activitypub/renderer';
+import renderFollow from '../../../remote/activitypub/renderer/follow';
+import renderReject from '../../../remote/activitypub/renderer/reject';
+import { deliver } from '../../../queue';
+
+export default async function(followee: IUser, follower: IUser) {
+ if (isRemoteUser(follower)) {
+ const content = pack(renderReject(renderFollow(follower, followee)));
+ deliver(followee as ILocalUser, content, follower.inbox);
+ }
+
+ await FollowRequest.remove({
+ followeeId: followee._id,
+ followerId: follower._id
+ });
+
+ User.update({ _id: followee._id }, {
+ $inc: {
+ pendingReceivedFollowRequestsCount: -1
+ }
+ });
+}