chore (backend): to be on the safe side

This commit is contained in:
naskya 2024-04-26 01:04:40 +09:00
parent 0b7385e16a
commit 320f933e9d
No known key found for this signature in database
GPG key ID: 712D413B3A9FED5C
3 changed files with 37 additions and 15 deletions

View file

@ -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,
},
);

View file

@ -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"]);

View file

@ -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"]);