From 320f933e9d5a7e15c87c14d66cfec2b858d4e66c Mon Sep 17 00:00:00 2001 From: naskya <m@naskya.net> Date: Fri, 26 Apr 2024 01:04:40 +0900 Subject: [PATCH] chore (backend): to be on the safe side --- .../src/remote/activitypub/models/note.ts | 19 ++++++++++++------- .../server/api/endpoints/admin/emoji/add.ts | 16 ++++++++++++---- .../server/api/endpoints/admin/emoji/copy.ts | 17 +++++++++++++---- 3 files changed, 37 insertions(+), 15 deletions(-) diff --git a/packages/backend/src/remote/activitypub/models/note.ts b/packages/backend/src/remote/activitypub/models/note.ts index 7f0c8c820d..2d847ef968 100644 --- a/packages/backend/src/remote/activitypub/models/note.ts +++ b/packages/backend/src/remote/activitypub/models/note.ts @@ -493,11 +493,16 @@ export async function extractEmojis( tag.icon!.url !== exists.originalUrl || !(exists.width && exists.height) ) { - let size: ImageSize = { width: 0, height: 0 }; - try { - size = await getImageSizeFromUrl(tag.icon!.url); - } catch { - /* skip if any error happens */ + let size: ImageSize | null = null; + if (tag.icon?.url != null) { + try { + size = await getImageSizeFromUrl(tag.icon.url); + } catch (err) { + apLogger.info( + `Failed to determine the size of the image: ${tag.icon.url}`, + ); + apLogger.debug(inspect(err)); + } } await Emojis.update( { @@ -509,8 +514,8 @@ export async function extractEmojis( originalUrl: tag.icon!.url, publicUrl: tag.icon!.url, updatedAt: new Date(), - width: size.width || null, - height: size.height || null, + width: size?.width || null, + height: size?.height || null, }, ); diff --git a/packages/backend/src/server/api/endpoints/admin/emoji/add.ts b/packages/backend/src/server/api/endpoints/admin/emoji/add.ts index 0224e19b04..5408c9dc7a 100644 --- a/packages/backend/src/server/api/endpoints/admin/emoji/add.ts +++ b/packages/backend/src/server/api/endpoints/admin/emoji/add.ts @@ -1,11 +1,13 @@ import define from "@/server/api/define.js"; import { Emojis, DriveFiles } from "@/models/index.js"; -import { genId, getImageSizeFromUrl } from "backend-rs"; +import { type ImageSize, genId, getImageSizeFromUrl } from "backend-rs"; import { insertModerationLog } from "@/services/insert-moderation-log.js"; import { ApiError } from "@/server/api/error.js"; import rndstr from "rndstr"; import { publishBroadcastStream } from "@/services/stream.js"; import { db } from "@/db/postgre.js"; +import { apiLogger } from "@/server/api/logger.js"; +import { inspect } from "node:util"; export const meta = { tags: ["admin", "emoji"], @@ -48,7 +50,13 @@ export default define(meta, paramDef, async (ps, me) => { ? file.name.split(".")[0] : `_${rndstr("a-z0-9", 8)}_`; - const size = await getImageSizeFromUrl(file.url); + let size: ImageSize | null = null; + try { + size = await getImageSizeFromUrl(file.url); + } catch (err) { + apiLogger.info(`Failed to determine the image size: ${file.url}`); + apiLogger.debug(inspect(err)); + } const emoji = await Emojis.insert({ id: genId(), @@ -61,8 +69,8 @@ export default define(meta, paramDef, async (ps, me) => { publicUrl: file.webpublicUrl ?? file.url, type: file.webpublicType ?? file.type, license: null, - width: size.width || null, - height: size.height || null, + width: size?.width || null, + height: size?.height || null, }).then((x) => Emojis.findOneByOrFail(x.identifiers[0])); await db.queryResultCache!.remove(["meta_emojis"]); diff --git a/packages/backend/src/server/api/endpoints/admin/emoji/copy.ts b/packages/backend/src/server/api/endpoints/admin/emoji/copy.ts index b5f67becdf..ded768f2cd 100644 --- a/packages/backend/src/server/api/endpoints/admin/emoji/copy.ts +++ b/packages/backend/src/server/api/endpoints/admin/emoji/copy.ts @@ -1,11 +1,13 @@ import define from "@/server/api/define.js"; import { Emojis } from "@/models/index.js"; -import { genId, getImageSizeFromUrl } from "backend-rs"; +import { type ImageSize, genId, getImageSizeFromUrl } from "backend-rs"; import { ApiError } from "@/server/api/error.js"; import type { DriveFile } from "@/models/entities/drive-file.js"; import { uploadFromUrl } from "@/services/drive/upload-from-url.js"; import { publishBroadcastStream } from "@/services/stream.js"; import { db } from "@/db/postgre.js"; +import { apiLogger } from "@/server/api/logger"; +import { inspect } from "node:util"; export const meta = { tags: ["admin", "emoji"], @@ -75,7 +77,14 @@ export default define(meta, paramDef, async (ps, me) => { throw new ApiError(); } - const size = await getImageSizeFromUrl(driveFile.url); + let size: ImageSize | null = null; + + try { + size = await getImageSizeFromUrl(driveFile.url); + } catch (err) { + apiLogger.info(`Failed to determine the image size: ${driveFile.url}`); + apiLogger.debug(inspect(err)); + } const copied = await Emojis.insert({ id: genId(), @@ -87,8 +96,8 @@ export default define(meta, paramDef, async (ps, me) => { publicUrl: driveFile.webpublicUrl ?? driveFile.url, type: driveFile.webpublicType ?? driveFile.type, license: emoji.license, - width: size.width || null, - height: size.height || null, + width: size?.width ?? null, + height: size?.height ?? null, }).then((x) => Emojis.findOneByOrFail(x.identifiers[0])); await db.queryResultCache!.remove(["meta_emojis"]);