Spoiler Fix #90

Manually merged
cadence merged 11 commits from Guzio/out-of-your-element:spoilerfix into main 2026-10-20 12:45:17 +00:00
Showing only changes of commit 45a105a304 - Show all commits

some renames

Guzio 2026-10-20 14:32:23 +02:00

View file

@ -15,7 +15,7 @@ const {discord, as, select, sync} = require("../../passthrough")
const webUtils = sync.require("../web-utils") const webUtils = sync.require("../web-utils")
const schema = { const schema = {
router: z.object({ params: z.object({
channel_id: z.string().regex(/^[0-9]+$/), channel_id: z.string().regex(/^[0-9]+$/),
attachment_id: z.string().regex(/^[0-9]+$/), attachment_id: z.string().regex(/^[0-9]+$/),
file_name: z.string().regex(/^[-A-Za-z0-9_.,]+$/) file_name: z.string().regex(/^[-A-Za-z0-9_.,]+$/)
@ -51,12 +51,12 @@ function timeUntilExpiry(url) {
*/ */
function defineMediaProxyHandler(domain) { function defineMediaProxyHandler(domain) {
return defineEventHandler(async event => { return defineEventHandler(async event => {
const routerParams = await getValidatedRouterParams(event, schema.router.parse) const params = await getValidatedRouterParams(event, schema.params.parse)
const queryParams = await getValidatedQuery(event, schema.query.parse) const query = await getValidatedQuery(event, schema.query.parse)
if (queryParams.spoiler) webUtils.rejectUrlPreviewer(event) if (query.spoiler) webUtils.rejectUrlPreviewer(event)
const unsignedHash = hasher.h64(routerParams.attachment_id) const unsignedHash = hasher.h64(params.attachment_id)
const signedHash = unsignedHash - 0x8000000000000000n // shifting down to signed 64-bit range const signedHash = unsignedHash - 0x8000000000000000n // shifting down to signed 64-bit range
const row = select("media_proxy", "permitted_hash", {permitted_hash: signedHash}).get() const row = select("media_proxy", "permitted_hash", {permitted_hash: signedHash}).get()
@ -67,7 +67,7 @@ function defineMediaProxyHandler(domain) {
}) })
} }
const url = `https://${domain}/attachments/${routerParams.channel_id}/${routerParams.attachment_id}/${routerParams.file_name}` const url = `https://${domain}/attachments/${params.channel_id}/${params.attachment_id}/${params.file_name}`
let promise = cache.get(url) let promise = cache.get(url)
/** @type {string | undefined} */ /** @type {string | undefined} */
let refreshed let refreshed