Fixed 267U.pre2
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
import probeImageSize from "probe-image-size";
|
||||
import { Mutex } from "redis-semaphore";
|
||||
import { FILE_TYPE_BROWSERSAFE } from "../const.js";
|
||||
import Logger from "../services/logger.js";
|
||||
import { Cache } from "./cache.js";
|
||||
import { redisClient } from "../db/redis.js";
|
||||
const cache = new Cache("emojiMeta", 60 * 10); // once every 10 minutes for the same url
|
||||
const logger = new Logger("emoji");
|
||||
export async function getEmojiSize(url) {
|
||||
let attempted = true;
|
||||
const lock = new Mutex(redisClient, "getEmojiSize");
|
||||
await lock.acquire();
|
||||
try {
|
||||
attempted = await cache.get(url) === true;
|
||||
if (!attempted) {
|
||||
await cache.set(url, true);
|
||||
}
|
||||
} finally{
|
||||
await lock.release();
|
||||
}
|
||||
if (attempted) {
|
||||
logger.warn(`Attempt limit exceeded: ${url}`);
|
||||
throw new Error("Too many attempts");
|
||||
}
|
||||
try {
|
||||
logger.debug(`Retrieving emoji size from ${url}`);
|
||||
const { width, height, mime } = await probeImageSize(url, {
|
||||
timeout: 5000
|
||||
});
|
||||
if (!(mime.startsWith("image/") && FILE_TYPE_BROWSERSAFE.includes(mime))) {
|
||||
throw new Error("Unsupported image type");
|
||||
}
|
||||
return {
|
||||
width,
|
||||
height
|
||||
};
|
||||
} catch (e) {
|
||||
throw new Error(`Unable to retrieve metadata: ${e}`);
|
||||
}
|
||||
}
|
||||
export function getNormalSize({ width, height }, orientation) {
|
||||
return (orientation || 0) >= 5 ? {
|
||||
width: height,
|
||||
height: width
|
||||
} : {
|
||||
width,
|
||||
height
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user