diff --git a/packages/backend/src/server/api/endpoints/admin/approve-user.ts b/packages/backend/src/server/api/endpoints/admin/approve-user.ts index 53002a71fd..85beb49e8e 100644 --- a/packages/backend/src/server/api/endpoints/admin/approve-user.ts +++ b/packages/backend/src/server/api/endpoints/admin/approve-user.ts @@ -42,6 +42,8 @@ export default class extends Endpoint { // eslint- const profile = await this.userProfilesRepository.findOneBy({ userId: ps.userId }); + if (user.approved) return; + await this.usersRepository.update(user.id, { approved: true, }); diff --git a/packages/backend/src/server/api/endpoints/admin/cw-user.ts b/packages/backend/src/server/api/endpoints/admin/cw-user.ts index bdcfa6a0d9..07f7027756 100644 --- a/packages/backend/src/server/api/endpoints/admin/cw-user.ts +++ b/packages/backend/src/server/api/endpoints/admin/cw-user.ts @@ -44,16 +44,6 @@ export default class extends Endpoint { // eslint- // Skip if there's nothing to do if (user.mandatoryCW === ps.cw) return; - // Log event first. - // This ensures that we don't "lose" the log if an error occurs - await this.moderationLogService.log(me, 'setMandatoryCW', { - newCW: ps.cw, - oldCW: user.mandatoryCW, - userId: user.id, - userUsername: user.username, - userHost: user.host, - }); - await this.usersRepository.update(ps.userId, { // Collapse empty strings to null // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing @@ -62,6 +52,14 @@ export default class extends Endpoint { // eslint- // Synchronize caches and other processes this.globalEventService.publishInternalEvent('localUserUpdated', { id: ps.userId }); + + await this.moderationLogService.log(me, 'setMandatoryCW', { + newCW: ps.cw, + oldCW: user.mandatoryCW, + userId: user.id, + userUsername: user.username, + userHost: user.host, + }); }); } } diff --git a/packages/backend/src/server/api/endpoints/admin/nsfw-user.ts b/packages/backend/src/server/api/endpoints/admin/nsfw-user.ts index f6c4f0b635..1a5f36115d 100644 --- a/packages/backend/src/server/api/endpoints/admin/nsfw-user.ts +++ b/packages/backend/src/server/api/endpoints/admin/nsfw-user.ts @@ -35,18 +35,22 @@ export default class extends Endpoint { // eslint- private readonly cacheService: CacheService, ) { super(meta, paramDef, async (ps, me) => { + const profile = await this.cacheService.userProfileCache.fetch(ps.userId); + + if (profile.alwaysMarkNsfw) return; + const user = await this.cacheService.findUserById(ps.userId); + await this.userProfilesRepository.update(user.id, { + alwaysMarkNsfw: true, + }); + await this.moderationLogService.log(me, 'nsfwUser', { userId: ps.userId, userUsername: user.username, userHost: user.host, }); - await this.userProfilesRepository.update(user.id, { - alwaysMarkNsfw: true, - }); - await this.cacheService.userProfileCache.delete(ps.userId); }); } diff --git a/packages/backend/src/server/api/endpoints/admin/reject-quotes.ts b/packages/backend/src/server/api/endpoints/admin/reject-quotes.ts index 78f94ceeff..743a90a95b 100644 --- a/packages/backend/src/server/api/endpoints/admin/reject-quotes.ts +++ b/packages/backend/src/server/api/endpoints/admin/reject-quotes.ts @@ -44,20 +44,18 @@ export default class extends Endpoint { // eslint- // Skip if there's nothing to do if (user.rejectQuotes === ps.rejectQuotes) return; - // Log event first. - // This ensures that we don't "lose" the log if an error occurs - await this.moderationLogService.log(me, ps.rejectQuotes ? 'rejectQuotesUser' : 'acceptQuotesUser', { - userId: user.id, - userUsername: user.username, - userHost: user.host, - }); - await this.usersRepository.update(ps.userId, { rejectQuotes: ps.rejectQuotes, }); // Synchronize caches and other processes this.globalEventService.publishInternalEvent('localUserUpdated', { id: ps.userId }); + + await this.moderationLogService.log(me, ps.rejectQuotes ? 'rejectQuotesUser' : 'acceptQuotesUser', { + userId: user.id, + userUsername: user.username, + userHost: user.host, + }); }); } } diff --git a/packages/backend/src/server/api/endpoints/admin/silence-user.ts b/packages/backend/src/server/api/endpoints/admin/silence-user.ts index eed21c6576..e69c46e55a 100644 --- a/packages/backend/src/server/api/endpoints/admin/silence-user.ts +++ b/packages/backend/src/server/api/endpoints/admin/silence-user.ts @@ -45,11 +45,7 @@ export default class extends Endpoint { // eslint- throw new Error('cannot silence moderator account'); } - await this.moderationLogService.log(me, 'silenceUser', { - userId: ps.userId, - userUsername: user.username, - userHost: user.host, - }); + if (user.isSilenced) return; await this.usersRepository.update(user.id, { isSilenced: true, @@ -58,6 +54,12 @@ export default class extends Endpoint { // eslint- this.globalEventService.publishInternalEvent(user.host == null ? 'localUserUpdated' : 'remoteUserUpdated', { id: user.id, }); + + await this.moderationLogService.log(me, 'silenceUser', { + userId: ps.userId, + userUsername: user.username, + userHost: user.host, + }); }); } } diff --git a/packages/backend/src/server/api/endpoints/admin/unnsfw-user.ts b/packages/backend/src/server/api/endpoints/admin/unnsfw-user.ts index 52a0c076be..4d9b764a9f 100644 --- a/packages/backend/src/server/api/endpoints/admin/unnsfw-user.ts +++ b/packages/backend/src/server/api/endpoints/admin/unnsfw-user.ts @@ -35,17 +35,21 @@ export default class extends Endpoint { // eslint- private readonly userProfilesRepository: UserProfilesRepository, ) { super(meta, paramDef, async (ps, me) => { + const profile = await this.cacheService.userProfileCache.fetch(ps.userId); + + if (!profile.alwaysMarkNsfw) return; + const user = await this.cacheService.findUserById(ps.userId); + await this.userProfilesRepository.update(user.id, { + alwaysMarkNsfw: false, + }); + await this.moderationLogService.log(me, 'unNsfwUser', { userId: ps.userId, userUsername: user.username, userHost: user.host, }); - - await this.userProfilesRepository.update(user.id, { - alwaysMarkNsfw: false, - }); }); } } diff --git a/packages/backend/src/server/api/endpoints/admin/unsilence-user.ts b/packages/backend/src/server/api/endpoints/admin/unsilence-user.ts index 9318943785..f511859c2c 100644 --- a/packages/backend/src/server/api/endpoints/admin/unsilence-user.ts +++ b/packages/backend/src/server/api/endpoints/admin/unsilence-user.ts @@ -39,11 +39,7 @@ export default class extends Endpoint { // eslint- super(meta, paramDef, async (ps, me) => { const user = await this.cacheService.findUserById(ps.userId); - await this.moderationLogService.log(me, 'unSilenceUser', { - userId: ps.userId, - userUsername: user.username, - userHost: user.host, - }); + if (!user.isSilenced) return; await this.usersRepository.update(user.id, { isSilenced: false, @@ -52,6 +48,12 @@ export default class extends Endpoint { // eslint- this.globalEventService.publishInternalEvent(user.host == null ? 'localUserUpdated' : 'remoteUserUpdated', { id: user.id, }); + + await this.moderationLogService.log(me, 'unSilenceUser', { + userId: ps.userId, + userUsername: user.username, + userHost: user.host, + }); }); } } 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..fdda0d0a3d 100644 --- a/packages/backend/src/server/api/endpoints/admin/unsuspend-user.ts +++ b/packages/backend/src/server/api/endpoints/admin/unsuspend-user.ts @@ -40,6 +40,8 @@ export default class extends Endpoint { // eslint- throw new Error('user not found'); } + if (!user.isSuspended) return; + await this.userSuspendService.unsuspend(user, me); }); }