diff options
| author | MeiMei <30769358+mei23@users.noreply.github.com> | 2018-10-29 20:32:42 +0900 |
|---|---|---|
| committer | syuilo <Syuilotan@yahoo.co.jp> | 2018-10-29 20:32:42 +0900 |
| commit | d64dc458999afdc0bfd5f662a583bd1a0f6eebb3 (patch) | |
| tree | 7bafd2682c100ef3badb7dd0d992dbf35930678a /src/services/following/create.ts | |
| parent | Merge branch 'develop' of https://github.com/syuilo/misskey into develop (diff) | |
| download | misskey-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.ts | 30 |
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 // フォロワーがローカルユーザーであり、フォロー対象がリモートユーザーである |