summaryrefslogtreecommitdiff
path: root/src/services
diff options
context:
space:
mode:
Diffstat (limited to 'src/services')
-rw-r--r--src/services/blocking/create.ts18
-rw-r--r--src/services/note/create.ts4
-rw-r--r--src/services/note/polls/vote.ts13
-rw-r--r--src/services/note/reaction/create.ts13
4 files changed, 43 insertions, 5 deletions
diff --git a/src/services/blocking/create.ts b/src/services/blocking/create.ts
index be2a62692b..d92856689c 100644
--- a/src/services/blocking/create.ts
+++ b/src/services/blocking/create.ts
@@ -6,7 +6,7 @@ import renderBlock from '../../remote/activitypub/renderer/block';
import { deliver } from '../../queue';
import renderReject from '../../remote/activitypub/renderer/reject';
import { User } from '../../models/entities/user';
-import { Blockings, Users, FollowRequests, Followings } from '../../models';
+import { Blockings, Users, FollowRequests, Followings, UserListJoinings, UserLists } from '../../models';
import { perUserFollowingChart } from '../chart';
import { genId } from '@/misc/gen-id';
@@ -15,7 +15,8 @@ export default async function(blocker: User, blockee: User) {
cancelRequest(blocker, blockee),
cancelRequest(blockee, blocker),
unFollow(blocker, blockee),
- unFollow(blockee, blocker)
+ unFollow(blockee, blocker),
+ removeFromList(blockee, blocker),
]);
await Blockings.insert({
@@ -112,3 +113,16 @@ async function unFollow(follower: User, followee: User) {
deliver(follower, content, followee.inbox);
}
}
+
+async function removeFromList(listOwner: User, user: User) {
+ const userLists = await UserLists.find({
+ userId: listOwner.id,
+ });
+
+ for (const userList of userLists) {
+ await UserListJoinings.delete({
+ userListId: userList.id,
+ userId: user.id,
+ });
+ }
+}
diff --git a/src/services/note/create.ts b/src/services/note/create.ts
index b9b39d25e4..13d612cf80 100644
--- a/src/services/note/create.ts
+++ b/src/services/note/create.ts
@@ -16,7 +16,7 @@ import { extractMentions } from '@/misc/extract-mentions';
import { extractCustomEmojisFromMfm } from '@/misc/extract-custom-emojis-from-mfm';
import { extractHashtags } from '@/misc/extract-hashtags';
import { Note, IMentionedRemoteUsers } from '../../models/entities/note';
-import { Mutings, Users, NoteWatchings, Notes, Instances, UserProfiles, Antennas, Followings, MutedNotes, Channels, ChannelFollowings } from '../../models';
+import { Mutings, Users, NoteWatchings, Notes, Instances, UserProfiles, Antennas, Followings, MutedNotes, Channels, ChannelFollowings, Blockings } from '../../models';
import { DriveFile } from '../../models/entities/drive-file';
import { App } from '../../models/entities/app';
import { Not, getConnection, In } from 'typeorm';
@@ -265,8 +265,10 @@ export default async (user: { id: User['id']; username: User['username']; host:
.andWhere(`following.followeeId = :userId`, { userId: note.userId })
.getMany()
.then(async followings => {
+ const blockings = await Blockings.find({ blockerId: user.id }); // TODO: キャッシュしたい
const followers = followings.map(f => f.followerId);
for (const antenna of (await getAntennas())) {
+ if (blockings.some(blocking => blocking.blockeeId === antenna.userId)) continue; // この処理は checkHitAntenna 内でやるようにしてもいいかも
checkHitAntenna(antenna, note, user, followers).then(hit => {
if (hit) {
addNoteToAntenna(antenna, note, user);
diff --git a/src/services/note/polls/vote.ts b/src/services/note/polls/vote.ts
index aea157e558..d3cf9f2117 100644
--- a/src/services/note/polls/vote.ts
+++ b/src/services/note/polls/vote.ts
@@ -1,7 +1,7 @@
import { publishNoteStream } from '../../stream';
import { User } from '../../../models/entities/user';
import { Note } from '../../../models/entities/note';
-import { PollVotes, NoteWatchings, Polls } from '../../../models';
+import { PollVotes, NoteWatchings, Polls, Blockings } from '../../../models';
import { Not } from 'typeorm';
import { genId } from '@/misc/gen-id';
import { createNotification } from '../../create-notification';
@@ -14,6 +14,17 @@ export default async function(user: User, note: Note, choice: number) {
// Check whether is valid choice
if (poll.choices[choice] == null) throw new Error('invalid choice param');
+ // Check blocking
+ if (note.userId !== user.id) {
+ const block = await Blockings.findOne({
+ blockerId: note.userId,
+ blockeeId: user.id,
+ });
+ if (block) {
+ throw new Error('blocked');
+ }
+ }
+
// if already voted
const exist = await PollVotes.find({
noteId: note.id,
diff --git a/src/services/note/reaction/create.ts b/src/services/note/reaction/create.ts
index ce6ae08b30..b8a8d172f1 100644
--- a/src/services/note/reaction/create.ts
+++ b/src/services/note/reaction/create.ts
@@ -5,7 +5,7 @@ import { renderActivity } from '../../../remote/activitypub/renderer';
import { toDbReaction, decodeReaction } from '@/misc/reaction-lib';
import { User, IRemoteUser } from '../../../models/entities/user';
import { Note } from '../../../models/entities/note';
-import { NoteReactions, Users, NoteWatchings, Notes, Emojis } from '../../../models';
+import { NoteReactions, Users, NoteWatchings, Notes, Emojis, Blockings } from '../../../models';
import { Not } from 'typeorm';
import { perUserReactionsChart } from '../../chart';
import { genId } from '@/misc/gen-id';
@@ -16,6 +16,17 @@ import { NoteReaction } from '../../../models/entities/note-reaction';
import { IdentifiableError } from '@/misc/identifiable-error';
export default async (user: { id: User['id']; host: User['host']; }, note: Note, reaction?: string) => {
+ // Check blocking
+ if (note.userId !== user.id) {
+ const block = await Blockings.findOne({
+ blockerId: note.userId,
+ blockeeId: user.id,
+ });
+ if (block) {
+ throw new IdentifiableError('e70412a4-7197-4726-8e74-f3e0deb92aa7');
+ }
+ }
+
// TODO: cache
reaction = await toDbReaction(reaction, user.host);