summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2023-11-19 10:18:57 +0900
committersyuilo <Syuilotan@yahoo.co.jp>2023-11-19 10:18:57 +0900
commitb65fd349812fe3c89b5face6ec5c12823459d7df (patch)
tree4346c1b2c4502cab80ef37e47c8a1bbd23492a3d
parentUpdate CHANGELOG.md (diff)
downloadmisskey-b65fd349812fe3c89b5face6ec5c12823459d7df.tar.gz
misskey-b65fd349812fe3c89b5face6ec5c12823459d7df.tar.bz2
misskey-b65fd349812fe3c89b5face6ec5c12823459d7df.zip
tweak of 2b6f789a5b
-rw-r--r--locales/en-US.yml8
-rw-r--r--locales/index.d.ts10
-rw-r--r--locales/ja-JP.yml10
-rw-r--r--packages/backend/src/server/api/EndpointsModule.ts16
-rw-r--r--packages/backend/src/server/api/endpoints.ts8
-rw-r--r--packages/backend/src/server/api/endpoints/admin/unset-user-avatar.ts (renamed from packages/backend/src/server/api/endpoints/admin/delete-user-avatar.ts)12
-rw-r--r--packages/backend/src/server/api/endpoints/admin/unset-user-banner.ts (renamed from packages/backend/src/server/api/endpoints/admin/delete-user-banner.ts)12
-rw-r--r--packages/backend/src/types.ts14
-rw-r--r--packages/frontend/src/pages/admin-user.vue16
-rw-r--r--packages/misskey-js/etc/misskey-js.api.md4
-rw-r--r--packages/misskey-js/src/api.types.ts4
-rw-r--r--packages/misskey-js/src/consts.ts14
-rw-r--r--packages/misskey-js/src/entities.ts6
13 files changed, 98 insertions, 36 deletions
diff --git a/locales/en-US.yml b/locales/en-US.yml
index 2aba028e45..b14592b20a 100644
--- a/locales/en-US.yml
+++ b/locales/en-US.yml
@@ -564,10 +564,10 @@ output: "Output"
script: "Script"
disablePagesScript: "Disable AiScript on Pages"
updateRemoteUser: "Update remote user information"
-deleteUserAvatar: "Delete user icon"
-deleteUserAvatarConfirm: "Are you sure that you want to delete this user's icon?"
-deleteUserBanner: "Delete user banner"
-deleteUserBannerConfirm: "Are you sure that you want to delete this user's banner?"
+unsetUserAvatar: "Delete user icon"
+unsetUserAvatarConfirm: "Are you sure that you want to delete this user's icon?"
+unsetUserBanner: "Delete user banner"
+unsetUserBannerConfirm: "Are you sure that you want to delete this user's banner?"
deleteAllFiles: "Delete all files"
deleteAllFilesConfirm: "Are you sure that you want to delete all files?"
removeAllFollowing: "Unfollow all followed users"
diff --git a/locales/index.d.ts b/locales/index.d.ts
index 6fd6d3641a..39fbb57799 100644
--- a/locales/index.d.ts
+++ b/locales/index.d.ts
@@ -567,10 +567,10 @@ export interface Locale {
"script": string;
"disablePagesScript": string;
"updateRemoteUser": string;
- "deleteUserAvatar": string;
- "deleteUserAvatarConfirm": string;
- "deleteUserBanner": string;
- "deleteUserBannerConfirm": string;
+ "unsetUserAvatar": string;
+ "unsetUserAvatarConfirm": string;
+ "unsetUserBanner": string;
+ "unsetUserBannerConfirm": string;
"deleteAllFiles": string;
"deleteAllFilesConfirm": string;
"removeAllFollowing": string;
@@ -2417,6 +2417,8 @@ export interface Locale {
"createAvatarDecoration": string;
"updateAvatarDecoration": string;
"deleteAvatarDecoration": string;
+ "unsetUserAvatar": string;
+ "unsetUserBanner": string;
};
"_fileViewer": {
"title": string;
diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index 9685e9c5a5..3757715c0f 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -564,10 +564,10 @@ output: "出力"
script: "スクリプト"
disablePagesScript: "Pagesのスクリプトを無効にする"
updateRemoteUser: "リモートユーザー情報の更新"
-deleteUserAvatar: "アイコンを削除"
-deleteUserAvatarConfirm: "アイコンを削除しますか?"
-deleteUserBanner: "バナーを削除"
-deleteUserBannerConfirm: "バナーを削除しますか?"
+unsetUserAvatar: "アイコンを解除"
+unsetUserAvatarConfirm: "アイコンを解除しますか?"
+unsetUserBanner: "バナーを解除"
+unsetUserBannerConfirm: "バナーを解除しますか?"
deleteAllFiles: "すべてのファイルを削除"
deleteAllFilesConfirm: "すべてのファイルを削除しますか?"
removeAllFollowing: "フォローを全解除"
@@ -2318,6 +2318,8 @@ _moderationLogTypes:
createAvatarDecoration: "アイコンデコレーションを作成"
updateAvatarDecoration: "アイコンデコレーションを更新"
deleteAvatarDecoration: "アイコンデコレーションを削除"
+ unsetUserAvatar: "ユーザーのアイコンを解除"
+ unsetUserBanner: "ユーザーのバナーを解除"
_fileViewer:
title: "ファイルの詳細"
diff --git a/packages/backend/src/server/api/EndpointsModule.ts b/packages/backend/src/server/api/EndpointsModule.ts
index 3797b46d04..86a64d7121 100644
--- a/packages/backend/src/server/api/EndpointsModule.ts
+++ b/packages/backend/src/server/api/EndpointsModule.ts
@@ -24,8 +24,8 @@ import * as ep___admin_avatarDecorations_delete from './endpoints/admin/avatar-d
import * as ep___admin_avatarDecorations_list from './endpoints/admin/avatar-decorations/list.js';
import * as ep___admin_avatarDecorations_update from './endpoints/admin/avatar-decorations/update.js';
import * as ep___admin_deleteAllFilesOfAUser from './endpoints/admin/delete-all-files-of-a-user.js';
-import * as ep___admin_deleteUserAvatar from './endpoints/admin/delete-user-avatar.js';
-import * as ep___admin_deleteUserBanner from './endpoints/admin/delete-user-banner.js';
+import * as ep___admin_unsetUserAvatar from './endpoints/admin/unset-user-avatar.js';
+import * as ep___admin_unsetUserBanner from './endpoints/admin/unset-user-banner.js';
import * as ep___admin_drive_cleanRemoteFiles from './endpoints/admin/drive/clean-remote-files.js';
import * as ep___admin_drive_cleanup from './endpoints/admin/drive/cleanup.js';
import * as ep___admin_drive_files from './endpoints/admin/drive/files.js';
@@ -385,8 +385,8 @@ const $admin_avatarDecorations_delete: Provider = { provide: 'ep:admin/avatar-de
const $admin_avatarDecorations_list: Provider = { provide: 'ep:admin/avatar-decorations/list', useClass: ep___admin_avatarDecorations_list.default };
const $admin_avatarDecorations_update: Provider = { provide: 'ep:admin/avatar-decorations/update', useClass: ep___admin_avatarDecorations_update.default };
const $admin_deleteAllFilesOfAUser: Provider = { provide: 'ep:admin/delete-all-files-of-a-user', useClass: ep___admin_deleteAllFilesOfAUser.default };
-const $admin_deleteUserAvatar: Provider = { provide: 'ep:admin/delete-user-avatar', useClass: ep___admin_deleteUserAvatar.default };
-const $admin_deleteUserBanner: Provider = { provide: 'ep:admin/delete-user-banner', useClass: ep___admin_deleteUserBanner.default };
+const $admin_unsetUserAvatar: Provider = { provide: 'ep:admin/unset-user-avatar', useClass: ep___admin_unsetUserAvatar.default };
+const $admin_unsetUserBanner: Provider = { provide: 'ep:admin/unset-user-banner', useClass: ep___admin_unsetUserBanner.default };
const $admin_drive_cleanRemoteFiles: Provider = { provide: 'ep:admin/drive/clean-remote-files', useClass: ep___admin_drive_cleanRemoteFiles.default };
const $admin_drive_cleanup: Provider = { provide: 'ep:admin/drive/cleanup', useClass: ep___admin_drive_cleanup.default };
const $admin_drive_files: Provider = { provide: 'ep:admin/drive/files', useClass: ep___admin_drive_files.default };
@@ -750,8 +750,8 @@ const $retention: Provider = { provide: 'ep:retention', useClass: ep___retention
$admin_avatarDecorations_list,
$admin_avatarDecorations_update,
$admin_deleteAllFilesOfAUser,
- $admin_deleteUserAvatar,
- $admin_deleteUserBanner,
+ $admin_unsetUserAvatar,
+ $admin_unsetUserBanner,
$admin_drive_cleanRemoteFiles,
$admin_drive_cleanup,
$admin_drive_files,
@@ -1109,8 +1109,8 @@ const $retention: Provider = { provide: 'ep:retention', useClass: ep___retention
$admin_avatarDecorations_list,
$admin_avatarDecorations_update,
$admin_deleteAllFilesOfAUser,
- $admin_deleteUserAvatar,
- $admin_deleteUserBanner,
+ $admin_unsetUserAvatar,
+ $admin_unsetUserBanner,
$admin_drive_cleanRemoteFiles,
$admin_drive_cleanup,
$admin_drive_files,
diff --git a/packages/backend/src/server/api/endpoints.ts b/packages/backend/src/server/api/endpoints.ts
index 4162ace337..e458d720ab 100644
--- a/packages/backend/src/server/api/endpoints.ts
+++ b/packages/backend/src/server/api/endpoints.ts
@@ -24,8 +24,8 @@ import * as ep___admin_avatarDecorations_delete from './endpoints/admin/avatar-d
import * as ep___admin_avatarDecorations_list from './endpoints/admin/avatar-decorations/list.js';
import * as ep___admin_avatarDecorations_update from './endpoints/admin/avatar-decorations/update.js';
import * as ep___admin_deleteAllFilesOfAUser from './endpoints/admin/delete-all-files-of-a-user.js';
-import * as ep___admin_deleteUserAvatar from './endpoints/admin/delete-user-avatar.js';
-import * as ep___admin_deleteUserBanner from './endpoints/admin/delete-user-banner.js';
+import * as ep___admin_unsetUserAvatar from './endpoints/admin/unset-user-avatar.js';
+import * as ep___admin_unsetUserBanner from './endpoints/admin/unset-user-banner.js';
import * as ep___admin_drive_cleanRemoteFiles from './endpoints/admin/drive/clean-remote-files.js';
import * as ep___admin_drive_cleanup from './endpoints/admin/drive/cleanup.js';
import * as ep___admin_drive_files from './endpoints/admin/drive/files.js';
@@ -383,8 +383,8 @@ const eps = [
['admin/avatar-decorations/list', ep___admin_avatarDecorations_list],
['admin/avatar-decorations/update', ep___admin_avatarDecorations_update],
['admin/delete-all-files-of-a-user', ep___admin_deleteAllFilesOfAUser],
- ['admin/delete-user-avatar', ep___admin_deleteUserAvatar],
- ['admin/delete-user-banner', ep___admin_deleteUserBanner],
+ ['admin/unset-user-avatar', ep___admin_unsetUserAvatar],
+ ['admin/unset-user-banner', ep___admin_unsetUserBanner],
['admin/drive/clean-remote-files', ep___admin_drive_cleanRemoteFiles],
['admin/drive/cleanup', ep___admin_drive_cleanup],
['admin/drive/files', ep___admin_drive_files],
diff --git a/packages/backend/src/server/api/endpoints/admin/delete-user-avatar.ts b/packages/backend/src/server/api/endpoints/admin/unset-user-avatar.ts
index d3c78d7fb6..ac10f1b6fd 100644
--- a/packages/backend/src/server/api/endpoints/admin/delete-user-avatar.ts
+++ b/packages/backend/src/server/api/endpoints/admin/unset-user-avatar.ts
@@ -7,6 +7,7 @@ import { Inject, Injectable } from '@nestjs/common';
import type { UsersRepository } from '@/models/_.js';
import { Endpoint } from '@/server/api/endpoint-base.js';
import { DI } from '@/di-symbols.js';
+import { ModerationLogService } from '@/core/ModerationLogService.js';
export const meta = {
tags: ['admin'],
@@ -29,6 +30,8 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
constructor(
@Inject(DI.usersRepository)
private usersRepository: UsersRepository,
+
+ private moderationLogService: ModerationLogService,
) {
super(meta, paramDef, async (ps, me) => {
const user = await this.usersRepository.findOneBy({ id: ps.userId });
@@ -36,6 +39,8 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
if (user == null) {
throw new Error('user not found');
}
+
+ if (user.avatarId == null) return;
await this.usersRepository.update(user.id, {
avatar: null,
@@ -43,6 +48,13 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
avatarUrl: null,
avatarBlurhash: null,
});
+
+ this.moderationLogService.log(me, 'unsetUserAvatar', {
+ userId: user.id,
+ userUsername: user.username,
+ userHost: user.host,
+ fileId: user.avatarId,
+ });
});
}
}
diff --git a/packages/backend/src/server/api/endpoints/admin/delete-user-banner.ts b/packages/backend/src/server/api/endpoints/admin/unset-user-banner.ts
index e076cdcfc1..66acd367df 100644
--- a/packages/backend/src/server/api/endpoints/admin/delete-user-banner.ts
+++ b/packages/backend/src/server/api/endpoints/admin/unset-user-banner.ts
@@ -7,6 +7,7 @@ import { Inject, Injectable } from '@nestjs/common';
import type { UsersRepository } from '@/models/_.js';
import { Endpoint } from '@/server/api/endpoint-base.js';
import { DI } from '@/di-symbols.js';
+import { ModerationLogService } from '@/core/ModerationLogService.js';
export const meta = {
tags: ['admin'],
@@ -29,6 +30,8 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
constructor(
@Inject(DI.usersRepository)
private usersRepository: UsersRepository,
+
+ private moderationLogService: ModerationLogService,
) {
super(meta, paramDef, async (ps, me) => {
const user = await this.usersRepository.findOneBy({ id: ps.userId });
@@ -37,12 +40,21 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
throw new Error('user not found');
}
+ if (user.bannerId == null) return;
+
await this.usersRepository.update(user.id, {
banner: null,
bannerId: null,
bannerUrl: null,
bannerBlurhash: null,
});
+
+ this.moderationLogService.log(me, 'unsetUserBanner', {
+ userId: user.id,
+ userUsername: user.username,
+ userHost: user.host,
+ fileId: user.bannerId,
+ });
});
}
}
diff --git a/packages/backend/src/types.ts b/packages/backend/src/types.ts
index e6dfeb6f8c..1fb3d6a6ce 100644
--- a/packages/backend/src/types.ts
+++ b/packages/backend/src/types.ts
@@ -63,6 +63,8 @@ export const moderationLogTypes = [
'createAvatarDecoration',
'updateAvatarDecoration',
'deleteAvatarDecoration',
+ 'unsetUserAvatar',
+ 'unsetUserBanner',
] as const;
export type ModerationLogPayloads = {
@@ -237,6 +239,18 @@ export type ModerationLogPayloads = {
avatarDecorationId: string;
avatarDecoration: any;
};
+ unsetUserAvatar: {
+ userId: string;
+ userUsername: string;
+ userHost: string | null;
+ fileId: string;
+ };
+ unsetUserBanner: {
+ userId: string;
+ userUsername: string;
+ userHost: string | null;
+ fileId: string;
+ };
};
export type Serialized<T> = {
diff --git a/packages/frontend/src/pages/admin-user.vue b/packages/frontend/src/pages/admin-user.vue
index 9f4975e888..87ebedc296 100644
--- a/packages/frontend/src/pages/admin-user.vue
+++ b/packages/frontend/src/pages/admin-user.vue
@@ -123,8 +123,8 @@ SPDX-License-Identifier: AGPL-3.0-only
</MkFolder>
<div>
- <MkButton v-if="iAmModerator" inline danger style="margin-right: 8px;" @click="deleteUserAvatar"><i class="ti ti-user-circle"></i> {{ i18n.ts.deleteUserAvatar }}</MkButton>
- <MkButton v-if="iAmModerator" inline danger @click="deleteUserBanner"><i class="ti ti-photo"></i> {{ i18n.ts.deleteUserBanner }}</MkButton>
+ <MkButton v-if="iAmModerator" inline danger style="margin-right: 8px;" @click="unsetUserAvatar"><i class="ti ti-user-circle"></i> {{ i18n.ts.unsetUserAvatar }}</MkButton>
+ <MkButton v-if="iAmModerator" inline danger @click="unsetUserBanner"><i class="ti ti-photo"></i> {{ i18n.ts.unsetUserBanner }}</MkButton>
</div>
<MkButton v-if="$i.isAdmin" inline danger @click="deleteAccount">{{ i18n.ts.deleteAccount }}</MkButton>
</div>
@@ -324,14 +324,14 @@ async function toggleSuspend(v) {
}
}
-async function deleteUserAvatar() {
+async function unsetUserAvatar() {
const confirm = await os.confirm({
type: 'warning',
- text: i18n.ts.deleteUserAvatarConfirm,
+ text: i18n.ts.unsetUserAvatarConfirm,
});
if (confirm.canceled) return;
const process = async () => {
- await os.api('admin/delete-user-avatar', { userId: user.id });
+ await os.api('admin/unset-user-avatar', { userId: user.id });
os.success();
};
await process().catch(err => {
@@ -343,14 +343,14 @@ async function deleteUserAvatar() {
refreshUser();
}
-async function deleteUserBanner() {
+async function unsetUserBanner() {
const confirm = await os.confirm({
type: 'warning',
- text: i18n.ts.deleteUserBannerConfirm,
+ text: i18n.ts.unsetUserBannerConfirm,
});
if (confirm.canceled) return;
const process = async () => {
- await os.api('admin/delete-user-banner', { userId: user.id });
+ await os.api('admin/unset-user-banner', { userId: user.id });
os.success();
};
await process().catch(err => {
diff --git a/packages/misskey-js/etc/misskey-js.api.md b/packages/misskey-js/etc/misskey-js.api.md
index f4bcaa8066..85907de665 100644
--- a/packages/misskey-js/etc/misskey-js.api.md
+++ b/packages/misskey-js/etc/misskey-js.api.md
@@ -345,13 +345,13 @@ export type Endpoints = {
};
res: null;
};
- 'admin/delete-user-avatar': {
+ 'admin/unset-user-avatar': {
req: {
userId: User['id'];
};
res: null;
};
- 'admin/delete-user-banner': {
+ 'admin/unset-user-banner': {
req: {
userId: User['id'];
};
diff --git a/packages/misskey-js/src/api.types.ts b/packages/misskey-js/src/api.types.ts
index e3f28c644e..1a75b7cf57 100644
--- a/packages/misskey-js/src/api.types.ts
+++ b/packages/misskey-js/src/api.types.ts
@@ -15,8 +15,8 @@ export type Endpoints = {
// admin
'admin/abuse-user-reports': { req: TODO; res: TODO; };
'admin/delete-all-files-of-a-user': { req: { userId: User['id']; }; res: null; };
- 'admin/delete-user-avatar': { req: { userId: User['id']; }; res: null; };
- 'admin/delete-user-banner': { req: { userId: User['id']; }; res: null; };
+ 'admin/unset-user-avatar': { req: { userId: User['id']; }; res: null; };
+ 'admin/unset-user-banner': { req: { userId: User['id']; }; res: null; };
'admin/delete-logs': { req: NoParams; res: null; };
'admin/get-index-stats': { req: TODO; res: TODO; };
'admin/get-table-stats': { req: TODO; res: TODO; };
diff --git a/packages/misskey-js/src/consts.ts b/packages/misskey-js/src/consts.ts
index 48a36a31d6..a8f0b96d5d 100644
--- a/packages/misskey-js/src/consts.ts
+++ b/packages/misskey-js/src/consts.ts
@@ -81,6 +81,8 @@ export const moderationLogTypes = [
'createAvatarDecoration',
'updateAvatarDecoration',
'deleteAvatarDecoration',
+ 'unsetUserAvatar',
+ 'unsetUserBanner',
] as const;
export type ModerationLogPayloads = {
@@ -255,4 +257,16 @@ export type ModerationLogPayloads = {
avatarDecorationId: string;
avatarDecoration: any;
};
+ unsetUserAvatar: {
+ userId: string;
+ userUsername: string;
+ userHost: string | null;
+ fileId: string;
+ };
+ unsetUserBanner: {
+ userId: string;
+ userUsername: string;
+ userHost: string | null;
+ fileId: string;
+ };
};
diff --git a/packages/misskey-js/src/entities.ts b/packages/misskey-js/src/entities.ts
index a0d0b7528d..a51315b13b 100644
--- a/packages/misskey-js/src/entities.ts
+++ b/packages/misskey-js/src/entities.ts
@@ -727,4 +727,10 @@ export type ModerationLog = {
} | {
type: 'resolveAbuseReport';
info: ModerationLogPayloads['resolveAbuseReport'];
+} | {
+ type: 'unsetUserAvatar';
+ info: ModerationLogPayloads['unsetUserAvatar'];
+} | {
+ type: 'unsetUserBanner';
+ info: ModerationLogPayloads['unsetUserBanner'];
});