summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFineArchs <133759614+FineArchs@users.noreply.github.com>2024-02-25 18:06:26 +0900
committerGitHub <noreply@github.com>2024-02-25 18:06:26 +0900
commitdd48366ed8130617df2563508369e3d4d63ed2a2 (patch)
tree7ae4328562ff790b027590483afb45b5e6e8407a
parentfix: 古いキャッシュを使うのを修正 (#13453) (diff)
downloadmisskey-dd48366ed8130617df2563508369e3d4d63ed2a2.tar.gz
misskey-dd48366ed8130617df2563508369e3d4d63ed2a2.tar.bz2
misskey-dd48366ed8130617df2563508369e3d4d63ed2a2.zip
admin/emoji/updateの必須項目を減らす 等 (#13449)
* admin/emoji/update enhancement * add CustomEmojiService.getEmojiByName * update endpoint * fix * Update update.ts * Update autogen files * type assertion * Update CHANGELOG.md
-rw-r--r--CHANGELOG.md4
-rw-r--r--packages/backend/src/core/CustomEmojiService.ts5
-rw-r--r--packages/backend/src/server/api/endpoints/admin/emoji/update.ts27
-rw-r--r--packages/misskey-js/src/autogen/types.ts6
4 files changed, 30 insertions, 12 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index a939fa7621..ebbe22f2f6 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -28,6 +28,10 @@
- Fix: nodeinfoにenableMcaptchaとenableTurnstileが無いのを修正
- エンドポイント`flash/update`の`flashId`以外のパラメータは必須ではなくなりました
- Fix: 禁止キーワードを含むノートがDelayed Queueに追加されて再処理される問題を修正
+- エンドポイント`admin/emoji/update`の各種修正
+ - 必須パラメータを`id`または`name`のいずれかのみに
+ - `id`の代わりに`name`で絵文字を指定可能に(`id`・`name`両指定時は従来通り`name`を変更する挙動)
+ - `category`および`licence`が指定なしの時勝手にnullに上書きされる挙動を修正
## 2024.2.0
diff --git a/packages/backend/src/core/CustomEmojiService.ts b/packages/backend/src/core/CustomEmojiService.ts
index 64a8c1acdf..edb9335b6e 100644
--- a/packages/backend/src/core/CustomEmojiService.ts
+++ b/packages/backend/src/core/CustomEmojiService.ts
@@ -394,6 +394,11 @@ export class CustomEmojiService implements OnApplicationShutdown {
}
@bindThis
+ public getEmojiByName(name: string): Promise<MiEmoji | null> {
+ return this.emojisRepository.findOneBy({ name, host: IsNull() });
+ }
+
+ @bindThis
public dispose(): void {
this.cache.dispose();
}
diff --git a/packages/backend/src/server/api/endpoints/admin/emoji/update.ts b/packages/backend/src/server/api/endpoints/admin/emoji/update.ts
index a9ff4236d2..22609a16a3 100644
--- a/packages/backend/src/server/api/endpoints/admin/emoji/update.ts
+++ b/packages/backend/src/server/api/endpoints/admin/emoji/update.ts
@@ -57,7 +57,10 @@ export const paramDef = {
type: 'string',
} },
},
- required: ['id', 'name', 'aliases'],
+ anyOf: [
+ { required: ['id'] },
+ { required: ['name'] },
+ ],
} as const;
@Injectable()
@@ -70,27 +73,33 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
) {
super(meta, paramDef, async (ps, me) => {
let driveFile;
-
if (ps.fileId) {
driveFile = await this.driveFilesRepository.findOneBy({ id: ps.fileId });
if (driveFile == null) throw new ApiError(meta.errors.noSuchFile);
}
- const emoji = await this.customEmojiService.getEmojiById(ps.id);
- if (emoji != null) {
- if (ps.name !== emoji.name) {
+
+ let emojiId;
+ if (ps.id) {
+ emojiId = ps.id;
+ const emoji = await this.customEmojiService.getEmojiById(ps.id);
+ if (!emoji) throw new ApiError(meta.errors.noSuchEmoji);
+ if (ps.name && (ps.name !== emoji.name)) {
const isDuplicate = await this.customEmojiService.checkDuplicate(ps.name);
if (isDuplicate) throw new ApiError(meta.errors.sameNameEmojiExists);
}
} else {
- throw new ApiError(meta.errors.noSuchEmoji);
+ if (!ps.name) throw new Error('Invalid Params unexpectedly passed. This is a BUG. Please report it to the development team.');
+ const emoji = await this.customEmojiService.getEmojiByName(ps.name);
+ if (!emoji) throw new ApiError(meta.errors.noSuchEmoji);
+ emojiId = emoji.id;
}
- await this.customEmojiService.update(ps.id, {
+ await this.customEmojiService.update(emojiId, {
driveFile,
name: ps.name,
- category: ps.category ?? null,
+ category: ps.category,
aliases: ps.aliases,
- license: ps.license ?? null,
+ license: ps.license,
isSensitive: ps.isSensitive,
localOnly: ps.localOnly,
roleIdsThatCanBeUsedThisEmojiAsReaction: ps.roleIdsThatCanBeUsedThisEmojiAsReaction,
diff --git a/packages/misskey-js/src/autogen/types.ts b/packages/misskey-js/src/autogen/types.ts
index 18bc45b983..07edf19c94 100644
--- a/packages/misskey-js/src/autogen/types.ts
+++ b/packages/misskey-js/src/autogen/types.ts
@@ -7089,13 +7089,13 @@ export type operations = {
content: {
'application/json': {
/** Format: misskey:id */
- id: string;
- name: string;
+ id?: string;
+ name?: string;
/** Format: misskey:id */
fileId?: string;
/** @description Use `null` to reset the category. */
category?: string | null;
- aliases: string[];
+ aliases?: string[];
license?: string | null;
isSensitive?: boolean;
localOnly?: boolean;