summaryrefslogtreecommitdiff
path: root/src/services/following/create.ts
diff options
context:
space:
mode:
authorMeiMei <30769358+mei23@users.noreply.github.com>2018-10-29 20:32:42 +0900
committersyuilo <Syuilotan@yahoo.co.jp>2018-10-29 20:32:42 +0900
commitd64dc458999afdc0bfd5f662a583bd1a0f6eebb3 (patch)
tree7bafd2682c100ef3badb7dd0d992dbf35930678a /src/services/following/create.ts
parentMerge branch 'develop' of https://github.com/syuilo/misskey into develop (diff)
downloadmisskey-d64dc458999afdc0bfd5f662a583bd1a0f6eebb3.tar.gz
misskey-d64dc458999afdc0bfd5f662a583bd1a0f6eebb3.tar.bz2
misskey-d64dc458999afdc0bfd5f662a583bd1a0f6eebb3.zip
User blocking (Following part) (#3035)
* block wip * UndoBlock * UnBlock * wip * follow * UI * fix
Diffstat (limited to 'src/services/following/create.ts')
-rw-r--r--src/services/following/create.ts30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/services/following/create.ts b/src/services/following/create.ts
index 87d13c444b..38367399e3 100644
--- a/src/services/following/create.ts
+++ b/src/services/following/create.ts
@@ -1,15 +1,45 @@
import User, { isLocalUser, isRemoteUser, pack as packUser, IUser } from '../../models/user';
import Following from '../../models/following';
+import Blocking from '../../models/blocking';
import { publishMainStream } from '../../stream';
import notify from '../../notify';
import pack from '../../remote/activitypub/renderer';
import renderFollow from '../../remote/activitypub/renderer/follow';
import renderAccept from '../../remote/activitypub/renderer/accept';
+import renderReject from '../../remote/activitypub/renderer/reject';
import { deliver } from '../../queue';
import createFollowRequest from './requests/create';
import perUserFollowingChart from '../../chart/per-user-following';
export default async function(follower: IUser, followee: IUser, requestId?: string) {
+ // check blocking
+ const [ blocking, blocked ] = await Promise.all([
+ Blocking.findOne({
+ blockerId: follower._id,
+ blockeeId: followee._id,
+ }),
+ Blocking.findOne({
+ blockerId: followee._id,
+ blockeeId: follower._id,
+ })
+ ]);
+
+ if (isRemoteUser(follower) && isLocalUser(followee) && blocked) {
+ // リモートフォローを受けてブロックしていた場合は、エラーにするのではなくRejectを送り返しておしまい。
+ const content = pack(renderReject(renderFollow(follower, followee, requestId), followee));
+ deliver(followee , content, follower.inbox);
+ return;
+ } else if (isRemoteUser(follower) && isLocalUser(followee) && blocking) {
+ // リモートフォローを受けてブロックされているはずの場合だったら、ブロック解除しておく。
+ await Blocking.remove({
+ _id: blocking._id
+ });
+ } else {
+ // それ以外は単純に例外
+ if (blocking != null) throw new Error('blocking');
+ if (blocked != null) throw new Error('blocked');
+ }
+
// フォロー対象が鍵アカウントである or
// フォロワーがBotであり、フォロー対象がBotからのフォローに慎重である or
// フォロワーがローカルユーザーであり、フォロー対象がリモートユーザーである