summaryrefslogtreecommitdiff
path: root/packages/backend/src/core/UserSuspendService.ts
diff options
context:
space:
mode:
authordakkar <dakkar@thenautilus.net>2025-07-31 21:53:33 +0000
committerdakkar <dakkar@thenautilus.net>2025-07-31 21:53:33 +0000
commita2bc6603c244290707a7aadb661833fa74c69460 (patch)
tree4def24de3c615351ba6ab86390029b393a81fa2f /packages/backend/src/core/UserSuspendService.ts
parentmerge: disable outgoing mastodon quotes *FOR STABLE* (!1169) (diff)
parentmerge: Improve URL validation *FOR STABLE* (!1191) (diff)
downloadsharkey-a2bc6603c244290707a7aadb661833fa74c69460.tar.gz
sharkey-a2bc6603c244290707a7aadb661833fa74c69460.tar.bz2
sharkey-a2bc6603c244290707a7aadb661833fa74c69460.zip
merge: For 2025.4.4 (!1199)
View MR for information: https://activitypub.software/TransFem-org/Sharkey/-/merge_requests/1199 Approved-by: Hazelnoot <acomputerdog@gmail.com> Approved-by: Marie <github@yuugi.dev>
Diffstat (limited to 'packages/backend/src/core/UserSuspendService.ts')
-rw-r--r--packages/backend/src/core/UserSuspendService.ts42
1 files changed, 25 insertions, 17 deletions
diff --git a/packages/backend/src/core/UserSuspendService.ts b/packages/backend/src/core/UserSuspendService.ts
index ddadab7022..5868ba6678 100644
--- a/packages/backend/src/core/UserSuspendService.ts
+++ b/packages/backend/src/core/UserSuspendService.ts
@@ -4,7 +4,7 @@
*/
import { Inject, Injectable } from '@nestjs/common';
-import { Not, IsNull } from 'typeorm';
+import { Not, IsNull, DataSource } from 'typeorm';
import type { FollowingsRepository, FollowRequestsRepository, UsersRepository } from '@/models/_.js';
import { MiUser } from '@/models/User.js';
import { QueueService } from '@/core/QueueService.js';
@@ -21,6 +21,7 @@ import { LoggerService } from '@/core/LoggerService.js';
import type Logger from '@/logger.js';
import { renderInlineError } from '@/misc/render-inline-error.js';
import { trackPromise } from '@/misc/promise-tracker.js';
+import { InternalEventService } from '@/core/InternalEventService.js';
@Injectable()
export class UserSuspendService {
@@ -36,12 +37,16 @@ export class UserSuspendService {
@Inject(DI.followRequestsRepository)
private followRequestsRepository: FollowRequestsRepository,
+ @Inject(DI.db)
+ private db: DataSource,
+
private userEntityService: UserEntityService,
private queueService: QueueService,
private globalEventService: GlobalEventService,
private apRendererService: ApRendererService,
private moderationLogService: ModerationLogService,
private readonly cacheService: CacheService,
+ private readonly internalEventService: InternalEventService,
loggerService: LoggerService,
) {
@@ -56,6 +61,8 @@ export class UserSuspendService {
isSuspended: true,
});
+ await this.internalEventService.emit(user.host == null ? 'localUserUpdated' : 'remoteUserUpdated', { id: user.id });
+
await this.moderationLogService.log(moderator, 'suspend', {
userId: user.id,
userUsername: user.username,
@@ -74,6 +81,8 @@ export class UserSuspendService {
isSuspended: false,
});
+ await this.internalEventService.emit(user.host == null ? 'localUserUpdated' : 'remoteUserUpdated', { id: user.id });
+
await this.moderationLogService.log(moderator, 'unsuspend', {
userId: user.id,
userUsername: user.username,
@@ -178,30 +187,29 @@ export class UserSuspendService {
// Freeze follow relations with all remote users
await this.followingsRepository
.createQueryBuilder('following')
- .orWhere({
- followeeId: user.id,
- followerHost: Not(IsNull()),
- })
.update({
isFollowerHibernated: true,
})
+ .where({
+ followeeId: user.id,
+ followerHost: Not(IsNull()),
+ })
.execute();
}
@bindThis
private async unFreezeAll(user: MiUser): Promise<void> {
// Restore follow relations with all remote users
- await this.followingsRepository
- .createQueryBuilder('following')
- .innerJoin(MiUser, 'follower', 'user.id = following.followerId')
- .andWhere('follower.isHibernated = false') // Don't unfreeze if the follower is *actually* frozen
- .andWhere({
- followeeId: user.id,
- followerHost: Not(IsNull()),
- })
- .update({
- isFollowerHibernated: false,
- })
- .execute();
+
+ // TypeORM does not support UPDATE with JOIN: https://github.com/typeorm/typeorm/issues/564#issuecomment-310331468
+ await this.db.query(`
+ UPDATE "following"
+ SET "isFollowerHibernated" = false
+ FROM "user"
+ WHERE "user"."id" = "following"."followerId"
+ AND "user"."isHibernated" = false -- Don't unfreeze if the follower is *actually* frozen
+ AND "followeeId" = $1
+ AND "followeeHost" IS NOT NULL
+ `, [user.id]);
}
}