summaryrefslogtreecommitdiff
path: root/packages/backend/src/server/api
diff options
context:
space:
mode:
authorsyuilo <4439005+syuilo@users.noreply.github.com>2024-08-14 20:29:06 +0900
committersyuilo <4439005+syuilo@users.noreply.github.com>2024-08-14 20:29:06 +0900
commit86dd4abadcb19c3fa4e082b7ab2dc80c5d93618b (patch)
tree8db3cc54b91c361eee2a5b5149b73110004a8175 /packages/backend/src/server/api
parentenhance(backend): 凍結されたアカウントのフォローリクエス... (diff)
downloadsharkey-86dd4abadcb19c3fa4e082b7ab2dc80c5d93618b.tar.gz
sharkey-86dd4abadcb19c3fa4e082b7ab2dc80c5d93618b.tar.bz2
sharkey-86dd4abadcb19c3fa4e082b7ab2dc80c5d93618b.zip
Revert "enhance(backend): 凍結されたアカウントのフォローリクエストを表示しないように"
This reverts commit cd210001e6ffd6232678cbc74f06f8e6d05a1d15.
Diffstat (limited to 'packages/backend/src/server/api')
-rw-r--r--packages/backend/src/server/api/endpoints/admin/suspend-user.ts51
-rw-r--r--packages/backend/src/server/api/endpoints/admin/unsuspend-user.ts14
2 files changed, 61 insertions, 4 deletions
diff --git a/packages/backend/src/server/api/endpoints/admin/suspend-user.ts b/packages/backend/src/server/api/endpoints/admin/suspend-user.ts
index 9f7378945e..8a946405cc 100644
--- a/packages/backend/src/server/api/endpoints/admin/suspend-user.ts
+++ b/packages/backend/src/server/api/endpoints/admin/suspend-user.ts
@@ -3,13 +3,18 @@
* SPDX-License-Identifier: AGPL-3.0-only
*/
-import { } from 'typeorm';
+import { IsNull, Not } from 'typeorm';
import { Inject, Injectable } from '@nestjs/common';
import { Endpoint } from '@/server/api/endpoint-base.js';
-import type { UsersRepository } from '@/models/_.js';
+import type { UsersRepository, FollowingsRepository } from '@/models/_.js';
+import type { MiUser } from '@/models/User.js';
+import type { RelationshipJobData } from '@/queue/types.js';
+import { ModerationLogService } from '@/core/ModerationLogService.js';
import { UserSuspendService } from '@/core/UserSuspendService.js';
import { DI } from '@/di-symbols.js';
+import { bindThis } from '@/decorators.js';
import { RoleService } from '@/core/RoleService.js';
+import { QueueService } from '@/core/QueueService.js';
export const meta = {
tags: ['admin'],
@@ -33,8 +38,13 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
@Inject(DI.usersRepository)
private usersRepository: UsersRepository,
+ @Inject(DI.followingsRepository)
+ private followingsRepository: FollowingsRepository,
+
private userSuspendService: UserSuspendService,
private roleService: RoleService,
+ private moderationLogService: ModerationLogService,
+ private queueService: QueueService,
) {
super(meta, paramDef, async (ps, me) => {
const user = await this.usersRepository.findOneBy({ id: ps.userId });
@@ -47,7 +57,42 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
throw new Error('cannot suspend moderator account');
}
- await this.userSuspendService.suspend(user, me);
+ await this.usersRepository.update(user.id, {
+ isSuspended: true,
+ });
+
+ this.moderationLogService.log(me, 'suspend', {
+ userId: user.id,
+ userUsername: user.username,
+ userHost: user.host,
+ });
+
+ (async () => {
+ await this.userSuspendService.doPostSuspend(user).catch(e => {});
+ await this.unFollowAll(user).catch(e => {});
+ })();
+ });
+ }
+
+ @bindThis
+ private async unFollowAll(follower: MiUser) {
+ const followings = await this.followingsRepository.find({
+ where: {
+ followerId: follower.id,
+ followeeId: Not(IsNull()),
+ },
});
+
+ const jobs: RelationshipJobData[] = [];
+ for (const following of followings) {
+ if (following.followeeId && following.followerId) {
+ jobs.push({
+ from: { id: following.followerId },
+ to: { id: following.followeeId },
+ silent: true,
+ });
+ }
+ }
+ this.queueService.createUnfollowJob(jobs);
}
}
diff --git a/packages/backend/src/server/api/endpoints/admin/unsuspend-user.ts b/packages/backend/src/server/api/endpoints/admin/unsuspend-user.ts
index b52c638cdb..2c2b1bf6f5 100644
--- a/packages/backend/src/server/api/endpoints/admin/unsuspend-user.ts
+++ b/packages/backend/src/server/api/endpoints/admin/unsuspend-user.ts
@@ -6,6 +6,7 @@
import { Inject, Injectable } from '@nestjs/common';
import { Endpoint } from '@/server/api/endpoint-base.js';
import type { UsersRepository } from '@/models/_.js';
+import { ModerationLogService } from '@/core/ModerationLogService.js';
import { UserSuspendService } from '@/core/UserSuspendService.js';
import { DI } from '@/di-symbols.js';
@@ -32,6 +33,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
private usersRepository: UsersRepository,
private userSuspendService: UserSuspendService,
+ private moderationLogService: ModerationLogService,
) {
super(meta, paramDef, async (ps, me) => {
const user = await this.usersRepository.findOneBy({ id: ps.userId });
@@ -40,7 +42,17 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
throw new Error('user not found');
}
- await this.userSuspendService.unsuspend(user, me);
+ await this.usersRepository.update(user.id, {
+ isSuspended: false,
+ });
+
+ this.moderationLogService.log(me, 'unsuspend', {
+ userId: user.id,
+ userUsername: user.username,
+ userHost: user.host,
+ });
+
+ this.userSuspendService.doPostUnsuspend(user);
});
}
}