diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml index b396014ee2..47bbb0aa55 100644 --- a/locales/ja-JP.yml +++ b/locales/ja-JP.yml @@ -2175,3 +2175,6 @@ _moderationLogTypes: deleteNote: "ノートを削除" createGlobalAnnouncement: "全体のお知らせを作成" createUserAnnouncement: "ユーザーへお知らせを作成" + resetPassword: "パスワードをリセット" + suspendRemoteInstance: "リモートサーバーを停止" + unsuspendRemoteInstance: "リモートサーバーを再開" diff --git a/packages/backend/src/server/api/endpoints/admin/federation/update-instance.ts b/packages/backend/src/server/api/endpoints/admin/federation/update-instance.ts index fbb91837f2..357bf83e87 100644 --- a/packages/backend/src/server/api/endpoints/admin/federation/update-instance.ts +++ b/packages/backend/src/server/api/endpoints/admin/federation/update-instance.ts @@ -9,6 +9,7 @@ import type { InstancesRepository } from '@/models/_.js'; import { UtilityService } from '@/core/UtilityService.js'; import { DI } from '@/di-symbols.js'; import { FederatedInstanceService } from '@/core/FederatedInstanceService.js'; +import { ModerationLogService } from '@/core/ModerationLogService.js'; export const meta = { tags: ['admin'], @@ -34,6 +35,7 @@ export default class extends Endpoint { // eslint- private utilityService: UtilityService, private federatedInstanceService: FederatedInstanceService, + private moderationLogService: ModerationLogService, ) { super(meta, paramDef, async (ps, me) => { const instance = await this.instancesRepository.findOneBy({ host: this.utilityService.toPuny(ps.host) }); @@ -42,9 +44,23 @@ export default class extends Endpoint { // eslint- throw new Error('instance not found'); } - this.federatedInstanceService.update(instance.id, { + await this.federatedInstanceService.update(instance.id, { isSuspended: ps.isSuspended, }); + + if (instance.isSuspended !== ps.isSuspended) { + if (ps.isSuspended) { + this.moderationLogService.log(me, 'suspendRemoteInstance', { + id: instance.id, + host: instance.host, + }); + } else { + this.moderationLogService.log(me, 'unsuspendRemoteInstance', { + id: instance.id, + host: instance.host, + }); + } + } }); } } diff --git a/packages/backend/src/server/api/endpoints/admin/reset-password.ts b/packages/backend/src/server/api/endpoints/admin/reset-password.ts index 0dd4fb4126..6ce7583276 100644 --- a/packages/backend/src/server/api/endpoints/admin/reset-password.ts +++ b/packages/backend/src/server/api/endpoints/admin/reset-password.ts @@ -9,6 +9,7 @@ import { Endpoint } from '@/server/api/endpoint-base.js'; import type { UsersRepository, UserProfilesRepository } from '@/models/_.js'; import { DI } from '@/di-symbols.js'; import { secureRndstr } from '@/misc/secure-rndstr.js'; +import { ModerationLogService } from '@/core/ModerationLogService.js'; export const meta = { tags: ['admin'], @@ -46,8 +47,10 @@ export default class extends Endpoint { // eslint- @Inject(DI.userProfilesRepository) private userProfilesRepository: UserProfilesRepository, + + private moderationLogService: ModerationLogService, ) { - super(meta, paramDef, async (ps) => { + super(meta, paramDef, async (ps, me) => { const user = await this.usersRepository.findOneBy({ id: ps.userId }); if (user == null) { @@ -69,6 +72,10 @@ export default class extends Endpoint { // eslint- password: hash, }); + this.moderationLogService.log(me, 'resetPassword', { + targetId: user.id, + }); + return { password: passwd, }; diff --git a/packages/backend/src/types.ts b/packages/backend/src/types.ts index 7946e66b82..0a53e77b79 100644 --- a/packages/backend/src/types.ts +++ b/packages/backend/src/types.ts @@ -43,6 +43,9 @@ export const moderationLogTypes = [ 'deleteNote', 'createGlobalAnnouncement', 'createUserAnnouncement', + 'resetPassword', + 'suspendRemoteInstance', + 'unsuspendRemoteInstance', ] as const; export type ModerationLogPayloads = { @@ -104,4 +107,15 @@ export type ModerationLogPayloads = { announcement: any; userId: string; }; + resetPassword: { + targetId: string; + }; + suspendRemoteInstance: { + id: string; + host: string; + }; + unsuspendRemoteInstance: { + id: string; + host: string; + }; }; diff --git a/packages/misskey-js/etc/misskey-js.api.md b/packages/misskey-js/etc/misskey-js.api.md index 804733c066..adedea8755 100644 --- a/packages/misskey-js/etc/misskey-js.api.md +++ b/packages/misskey-js/etc/misskey-js.api.md @@ -2556,10 +2556,19 @@ type ModerationLog = { } | { type: 'promoteQueue'; info: ModerationLogPayloads['promoteQueue']; +} | { + type: 'resetPassword'; + info: ModerationLogPayloads['resetPassword']; +} | { + type: 'suspendRemoteInstance'; + info: ModerationLogPayloads['suspendRemoteInstance']; +} | { + type: 'unsuspendRemoteInstance'; + info: ModerationLogPayloads['unsuspendRemoteInstance']; }); // @public (undocumented) -export const moderationLogTypes: readonly ["updateServerSettings", "suspend", "unsuspend", "updateUserNote", "addCustomEmoji", "assignRole", "unassignRole", "updateRole", "deleteRole", "clearQueue", "promoteQueue", "deleteDriveFile", "deleteNote", "createGlobalAnnouncement", "createUserAnnouncement"]; +export const moderationLogTypes: readonly ["updateServerSettings", "suspend", "unsuspend", "updateUserNote", "addCustomEmoji", "assignRole", "unassignRole", "updateRole", "deleteRole", "clearQueue", "promoteQueue", "deleteDriveFile", "deleteNote", "createGlobalAnnouncement", "createUserAnnouncement", "resetPassword", "suspendRemoteInstance", "unsuspendRemoteInstance"]; // @public (undocumented) export const mutedNoteReasons: readonly ["word", "manual", "spam", "other"]; diff --git a/packages/misskey-js/src/consts.ts b/packages/misskey-js/src/consts.ts index 346affc6a5..a8962ab3d3 100644 --- a/packages/misskey-js/src/consts.ts +++ b/packages/misskey-js/src/consts.ts @@ -61,6 +61,9 @@ export const moderationLogTypes = [ 'deleteNote', 'createGlobalAnnouncement', 'createUserAnnouncement', + 'resetPassword', + 'suspendRemoteInstance', + 'unsuspendRemoteInstance', ] as const; export type ModerationLogPayloads = { @@ -122,4 +125,15 @@ export type ModerationLogPayloads = { announcement: any; userId: string; }; + resetPassword: { + targetId: string; + }; + suspendRemoteInstance: { + id: string; + host: string; + }; + unsuspendRemoteInstance: { + id: string; + host: string; + }; }; diff --git a/packages/misskey-js/src/entities.ts b/packages/misskey-js/src/entities.ts index 0e6604cbaa..a1fc8befb4 100644 --- a/packages/misskey-js/src/entities.ts +++ b/packages/misskey-js/src/entities.ts @@ -607,4 +607,13 @@ export type ModerationLog = { } | { type: 'promoteQueue'; info: ModerationLogPayloads['promoteQueue']; +} | { + type: 'resetPassword'; + info: ModerationLogPayloads['resetPassword']; +} | { + type: 'suspendRemoteInstance'; + info: ModerationLogPayloads['suspendRemoteInstance']; +} | { + type: 'unsuspendRemoteInstance'; + info: ModerationLogPayloads['unsuspendRemoteInstance']; });