summaryrefslogtreecommitdiff
path: root/packages/backend/src/core
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2023-09-25 10:29:12 +0900
committersyuilo <Syuilotan@yahoo.co.jp>2023-09-25 10:29:12 +0900
commit5318532a8d1208b4f286856e98ff199bfdeacb9c (patch)
tree9825d491cee6fc46dae57f548ee6a9f5ccff616b /packages/backend/src/core
parentAdd address bind config option (outgoingAddress) is feature of 2023.9 (#11894) (diff)
downloadmisskey-5318532a8d1208b4f286856e98ff199bfdeacb9c.tar.gz
misskey-5318532a8d1208b4f286856e98ff199bfdeacb9c.tar.bz2
misskey-5318532a8d1208b4f286856e98ff199bfdeacb9c.zip
enhance: improve moderation log
Diffstat (limited to 'packages/backend/src/core')
-rw-r--r--packages/backend/src/core/AnnouncementService.ts12
-rw-r--r--packages/backend/src/core/CustomEmojiService.ts7
-rw-r--r--packages/backend/src/core/DriveService.ts8
-rw-r--r--packages/backend/src/core/NoteDeleteService.ts3
-rw-r--r--packages/backend/src/core/RoleService.ts46
5 files changed, 71 insertions, 5 deletions
diff --git a/packages/backend/src/core/AnnouncementService.ts b/packages/backend/src/core/AnnouncementService.ts
index 2b4877788a..ddacc0936f 100644
--- a/packages/backend/src/core/AnnouncementService.ts
+++ b/packages/backend/src/core/AnnouncementService.ts
@@ -7,7 +7,7 @@ import { Inject, Injectable } from '@nestjs/common';
import { Brackets } from 'typeorm';
import { DI } from '@/di-symbols.js';
import type { MiUser } from '@/models/User.js';
-import type { AnnouncementReadsRepository, AnnouncementsRepository, MiAnnouncement, MiAnnouncementRead } from '@/models/_.js';
+import type { AnnouncementReadsRepository, AnnouncementsRepository, MiAnnouncement, MiAnnouncementRead, UsersRepository } from '@/models/_.js';
import { bindThis } from '@/decorators.js';
import { Packed } from '@/misc/json-schema.js';
import { IdService } from '@/core/IdService.js';
@@ -23,6 +23,9 @@ export class AnnouncementService {
@Inject(DI.announcementReadsRepository)
private announcementReadsRepository: AnnouncementReadsRepository,
+ @Inject(DI.usersRepository)
+ private usersRepository: UsersRepository,
+
private idService: IdService,
private globalEventService: GlobalEventService,
private moderationLogService: ModerationLogService,
@@ -83,10 +86,13 @@ export class AnnouncementService {
});
if (moderator) {
+ const user = await this.usersRepository.findOneByOrFail({ id: values.userId });
this.moderationLogService.log(moderator, 'createUserAnnouncement', {
announcementId: announcement.id,
announcement: announcement,
userId: values.userId,
+ userUsername: user.username,
+ userHost: user.host,
});
}
} else {
@@ -127,10 +133,14 @@ export class AnnouncementService {
if (moderator) {
if (announcement.userId) {
+ const user = await this.usersRepository.findOneByOrFail({ id: announcement.userId });
this.moderationLogService.log(moderator, 'updateUserAnnouncement', {
announcementId: announcement.id,
before: announcement,
after: after,
+ userId: announcement.userId,
+ userUsername: user.username,
+ userHost: user.host,
});
} else {
this.moderationLogService.log(moderator, 'updateGlobalAnnouncement', {
diff --git a/packages/backend/src/core/CustomEmojiService.ts b/packages/backend/src/core/CustomEmojiService.ts
index b14a8666e6..1b545a124e 100644
--- a/packages/backend/src/core/CustomEmojiService.ts
+++ b/packages/backend/src/core/CustomEmojiService.ts
@@ -134,11 +134,11 @@ export class CustomEmojiService implements OnApplicationShutdown {
this.localEmojisCache.refresh();
- const updated = await this.emojiEntityService.packDetailed(emoji.id);
+ const packed = await this.emojiEntityService.packDetailed(emoji.id);
if (emoji.name === data.name) {
this.globalEventService.publishBroadcastStream('emojiUpdated', {
- emojis: [updated],
+ emojis: [packed],
});
} else {
this.globalEventService.publishBroadcastStream('emojiDeleted', {
@@ -146,11 +146,12 @@ export class CustomEmojiService implements OnApplicationShutdown {
});
this.globalEventService.publishBroadcastStream('emojiAdded', {
- emoji: updated,
+ emoji: packed,
});
}
if (moderator) {
+ const updated = await this.emojisRepository.findOneByOrFail({ id: id });
this.moderationLogService.log(moderator, 'updateCustomEmoji', {
emojiId: emoji.id,
before: emoji,
diff --git a/packages/backend/src/core/DriveService.ts b/packages/backend/src/core/DriveService.ts
index 366205f586..cecbec9638 100644
--- a/packages/backend/src/core/DriveService.ts
+++ b/packages/backend/src/core/DriveService.ts
@@ -686,15 +686,20 @@ export class DriveService {
if (await this.roleService.isModerator(updater) && (file.userId !== updater.id)) {
if (values.isSensitive !== undefined && values.isSensitive !== file.isSensitive) {
+ const user = file.userId ? await this.usersRepository.findOneByOrFail({ id: file.userId }) : null;
if (values.isSensitive) {
this.moderationLogService.log(updater, 'markSensitiveDriveFile', {
fileId: file.id,
fileUserId: file.userId,
+ fileUserUsername: user?.username ?? null,
+ fileUserHost: user?.host ?? null,
});
} else {
this.moderationLogService.log(updater, 'unmarkSensitiveDriveFile', {
fileId: file.id,
fileUserId: file.userId,
+ fileUserUsername: user?.username ?? null,
+ fileUserHost: user?.host ?? null,
});
}
}
@@ -795,9 +800,12 @@ export class DriveService {
}
if (deleter && await this.roleService.isModerator(deleter) && (file.userId !== deleter.id)) {
+ const user = file.userId ? await this.usersRepository.findOneByOrFail({ id: file.userId }) : null;
this.moderationLogService.log(deleter, 'deleteDriveFile', {
fileId: file.id,
fileUserId: file.userId,
+ fileUserUsername: user?.username ?? null,
+ fileUserHost: user?.host ?? null,
});
}
}
diff --git a/packages/backend/src/core/NoteDeleteService.ts b/packages/backend/src/core/NoteDeleteService.ts
index c99f92b9cb..87979f22ac 100644
--- a/packages/backend/src/core/NoteDeleteService.ts
+++ b/packages/backend/src/core/NoteDeleteService.ts
@@ -135,9 +135,12 @@ export class NoteDeleteService {
});
if (deleter && (note.userId !== deleter.id)) {
+ const user = await this.usersRepository.findOneByOrFail({ id: note.userId });
this.moderationLogService.log(deleter, 'deleteNote', {
noteId: note.id,
noteUserId: note.userId,
+ noteUserUsername: user.username,
+ noteUserHost: user.host,
note: note,
});
}
diff --git a/packages/backend/src/core/RoleService.ts b/packages/backend/src/core/RoleService.ts
index dea6dc68cd..934b7d676b 100644
--- a/packages/backend/src/core/RoleService.ts
+++ b/packages/backend/src/core/RoleService.ts
@@ -412,10 +412,13 @@ export class RoleService implements OnApplicationShutdown {
this.globalEventService.publishInternalEvent('userRoleAssigned', created);
if (moderator) {
+ const user = await this.usersRepository.findOneByOrFail({ id: userId });
this.moderationLogService.log(moderator, 'assignRole', {
roleId: roleId,
roleName: role.name,
userId: userId,
+ userUsername: user.username,
+ userHost: user.host,
expiresAt: expiresAt ? expiresAt.toISOString() : null,
});
}
@@ -445,11 +448,16 @@ export class RoleService implements OnApplicationShutdown {
this.globalEventService.publishInternalEvent('userRoleUnassigned', existing);
if (moderator) {
- const role = await this.rolesRepository.findOneByOrFail({ id: roleId });
+ const [user, role] = await Promise.all([
+ this.usersRepository.findOneByOrFail({ id: userId }),
+ this.rolesRepository.findOneByOrFail({ id: roleId }),
+ ]);
this.moderationLogService.log(moderator, 'unassignRole', {
roleId: roleId,
roleName: role.name,
userId: userId,
+ userUsername: user.username,
+ userHost: user.host,
});
}
}
@@ -474,6 +482,42 @@ export class RoleService implements OnApplicationShutdown {
}
@bindThis
+ public async create(values: Partial<MiRole>, moderator?: MiUser): Promise<MiRole> {
+ const date = new Date();
+ const created = await this.rolesRepository.insert({
+ id: this.idService.genId(),
+ createdAt: date,
+ updatedAt: date,
+ lastUsedAt: date,
+ name: values.name,
+ description: values.description,
+ color: values.color,
+ iconUrl: values.iconUrl,
+ target: values.target,
+ condFormula: values.condFormula,
+ isPublic: values.isPublic,
+ isAdministrator: values.isAdministrator,
+ isModerator: values.isModerator,
+ isExplorable: values.isExplorable,
+ asBadge: values.asBadge,
+ canEditMembersByModerator: values.canEditMembersByModerator,
+ displayOrder: values.displayOrder,
+ policies: values.policies,
+ }).then(x => this.rolesRepository.findOneByOrFail(x.identifiers[0]));
+
+ this.globalEventService.publishInternalEvent('roleCreated', created);
+
+ if (moderator) {
+ this.moderationLogService.log(moderator, 'createRole', {
+ roleId: created.id,
+ role: created,
+ });
+ }
+
+ return created;
+ }
+
+ @bindThis
public async update(role: MiRole, params: Partial<MiRole>, moderator?: MiUser): Promise<void> {
const date = new Date();
await this.rolesRepository.update(role.id, {