mirror of
https://activitypub.software/TransFem-org/Sharkey.git
synced 2025-08-31 22:50:43 +00:00
add various checks to avoid duplicate mod actions
This commit is contained in:
parent
d023fb3389
commit
eca81b6494
8 changed files with 48 additions and 36 deletions
|
@ -42,6 +42,8 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
|
||||||
|
|
||||||
const profile = await this.userProfilesRepository.findOneBy({ userId: ps.userId });
|
const profile = await this.userProfilesRepository.findOneBy({ userId: ps.userId });
|
||||||
|
|
||||||
|
if (user.approved) return;
|
||||||
|
|
||||||
await this.usersRepository.update(user.id, {
|
await this.usersRepository.update(user.id, {
|
||||||
approved: true,
|
approved: true,
|
||||||
});
|
});
|
||||||
|
|
|
@ -44,16 +44,6 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
|
||||||
// Skip if there's nothing to do
|
// Skip if there's nothing to do
|
||||||
if (user.mandatoryCW === ps.cw) return;
|
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, {
|
await this.usersRepository.update(ps.userId, {
|
||||||
// Collapse empty strings to null
|
// Collapse empty strings to null
|
||||||
// eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
|
// eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
|
||||||
|
@ -62,6 +52,14 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
|
||||||
|
|
||||||
// Synchronize caches and other processes
|
// Synchronize caches and other processes
|
||||||
this.globalEventService.publishInternalEvent('localUserUpdated', { id: ps.userId });
|
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,
|
||||||
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,18 +35,22 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
|
||||||
private readonly cacheService: CacheService,
|
private readonly cacheService: CacheService,
|
||||||
) {
|
) {
|
||||||
super(meta, paramDef, async (ps, me) => {
|
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);
|
const user = await this.cacheService.findUserById(ps.userId);
|
||||||
|
|
||||||
|
await this.userProfilesRepository.update(user.id, {
|
||||||
|
alwaysMarkNsfw: true,
|
||||||
|
});
|
||||||
|
|
||||||
await this.moderationLogService.log(me, 'nsfwUser', {
|
await this.moderationLogService.log(me, 'nsfwUser', {
|
||||||
userId: ps.userId,
|
userId: ps.userId,
|
||||||
userUsername: user.username,
|
userUsername: user.username,
|
||||||
userHost: user.host,
|
userHost: user.host,
|
||||||
});
|
});
|
||||||
|
|
||||||
await this.userProfilesRepository.update(user.id, {
|
|
||||||
alwaysMarkNsfw: true,
|
|
||||||
});
|
|
||||||
|
|
||||||
await this.cacheService.userProfileCache.delete(ps.userId);
|
await this.cacheService.userProfileCache.delete(ps.userId);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,20 +44,18 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
|
||||||
// Skip if there's nothing to do
|
// Skip if there's nothing to do
|
||||||
if (user.rejectQuotes === ps.rejectQuotes) return;
|
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, {
|
await this.usersRepository.update(ps.userId, {
|
||||||
rejectQuotes: ps.rejectQuotes,
|
rejectQuotes: ps.rejectQuotes,
|
||||||
});
|
});
|
||||||
|
|
||||||
// Synchronize caches and other processes
|
// Synchronize caches and other processes
|
||||||
this.globalEventService.publishInternalEvent('localUserUpdated', { id: ps.userId });
|
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,
|
||||||
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,11 +45,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
|
||||||
throw new Error('cannot silence moderator account');
|
throw new Error('cannot silence moderator account');
|
||||||
}
|
}
|
||||||
|
|
||||||
await this.moderationLogService.log(me, 'silenceUser', {
|
if (user.isSilenced) return;
|
||||||
userId: ps.userId,
|
|
||||||
userUsername: user.username,
|
|
||||||
userHost: user.host,
|
|
||||||
});
|
|
||||||
|
|
||||||
await this.usersRepository.update(user.id, {
|
await this.usersRepository.update(user.id, {
|
||||||
isSilenced: true,
|
isSilenced: true,
|
||||||
|
@ -58,6 +54,12 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
|
||||||
this.globalEventService.publishInternalEvent(user.host == null ? 'localUserUpdated' : 'remoteUserUpdated', {
|
this.globalEventService.publishInternalEvent(user.host == null ? 'localUserUpdated' : 'remoteUserUpdated', {
|
||||||
id: user.id,
|
id: user.id,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
await this.moderationLogService.log(me, 'silenceUser', {
|
||||||
|
userId: ps.userId,
|
||||||
|
userUsername: user.username,
|
||||||
|
userHost: user.host,
|
||||||
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,17 +35,21 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
|
||||||
private readonly userProfilesRepository: UserProfilesRepository,
|
private readonly userProfilesRepository: UserProfilesRepository,
|
||||||
) {
|
) {
|
||||||
super(meta, paramDef, async (ps, me) => {
|
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);
|
const user = await this.cacheService.findUserById(ps.userId);
|
||||||
|
|
||||||
|
await this.userProfilesRepository.update(user.id, {
|
||||||
|
alwaysMarkNsfw: false,
|
||||||
|
});
|
||||||
|
|
||||||
await this.moderationLogService.log(me, 'unNsfwUser', {
|
await this.moderationLogService.log(me, 'unNsfwUser', {
|
||||||
userId: ps.userId,
|
userId: ps.userId,
|
||||||
userUsername: user.username,
|
userUsername: user.username,
|
||||||
userHost: user.host,
|
userHost: user.host,
|
||||||
});
|
});
|
||||||
|
|
||||||
await this.userProfilesRepository.update(user.id, {
|
|
||||||
alwaysMarkNsfw: false,
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,11 +39,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
|
||||||
super(meta, paramDef, async (ps, me) => {
|
super(meta, paramDef, async (ps, me) => {
|
||||||
const user = await this.cacheService.findUserById(ps.userId);
|
const user = await this.cacheService.findUserById(ps.userId);
|
||||||
|
|
||||||
await this.moderationLogService.log(me, 'unSilenceUser', {
|
if (!user.isSilenced) return;
|
||||||
userId: ps.userId,
|
|
||||||
userUsername: user.username,
|
|
||||||
userHost: user.host,
|
|
||||||
});
|
|
||||||
|
|
||||||
await this.usersRepository.update(user.id, {
|
await this.usersRepository.update(user.id, {
|
||||||
isSilenced: false,
|
isSilenced: false,
|
||||||
|
@ -52,6 +48,12 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
|
||||||
this.globalEventService.publishInternalEvent(user.host == null ? 'localUserUpdated' : 'remoteUserUpdated', {
|
this.globalEventService.publishInternalEvent(user.host == null ? 'localUserUpdated' : 'remoteUserUpdated', {
|
||||||
id: user.id,
|
id: user.id,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
await this.moderationLogService.log(me, 'unSilenceUser', {
|
||||||
|
userId: ps.userId,
|
||||||
|
userUsername: user.username,
|
||||||
|
userHost: user.host,
|
||||||
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,6 +40,8 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
|
||||||
throw new Error('user not found');
|
throw new Error('user not found');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!user.isSuspended) return;
|
||||||
|
|
||||||
await this.userSuspendService.unsuspend(user, me);
|
await this.userSuspendService.unsuspend(user, me);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue