From 70050afb5fe74ce9da1463e3bc81fc60d7e662bb Mon Sep 17 00:00:00 2001 From: diced Date: Sun, 7 Jul 2024 11:02:53 -0700 Subject: [PATCH] fix: ratelimit positioning --- src/components/pages/Upload/File.tsx | 3 +- src/pages/api/upload.ts | 78 ++++++++++++++-------------- 2 files changed, 41 insertions(+), 40 deletions(-) diff --git a/src/components/pages/Upload/File.tsx b/src/components/pages/Upload/File.tsx index 19ad57f8..146a8dd4 100644 --- a/src/components/pages/Upload/File.tsx +++ b/src/components/pages/Upload/File.tsx @@ -364,7 +364,8 @@ export default function File({ chunks: chunks_config }) { diff --git a/src/pages/api/upload.ts b/src/pages/api/upload.ts index 008b82e8..a94d9b89 100644 --- a/src/pages/api/upload.ts +++ b/src/pages/api/upload.ts @@ -30,6 +30,45 @@ async function handler(req: NextApiReq, res: NextApiRes) { if (!user) return res.forbidden('authorization incorrect'); + if (user.ratelimit && !req.headers['content-range']) { + const remaining = user.ratelimit.getTime() - Date.now(); + logger.debug(`${user.id} encountered ratelimit, ${remaining}ms remaining`); + if (remaining <= 0) { + await prisma.user.update({ + where: { + id: user.id, + }, + data: { + ratelimit: null, + }, + }); + } else { + return res.ratelimited(remaining); + } + } else if (!user.ratelimit && !req.headers['content-range']) { + if (user.administrator && zconfig.ratelimit.admin > 0) { + await prisma.user.update({ + where: { + id: user.id, + }, + data: { + ratelimit: new Date(Date.now() + zconfig.ratelimit.admin * 1000), + }, + }); + } else if (!user.administrator && zconfig.ratelimit.user > 0) { + if (user.administrator && zconfig.ratelimit.user > 0) { + await prisma.user.update({ + where: { + id: user.id, + }, + data: { + ratelimit: new Date(Date.now() + zconfig.ratelimit.user * 1000), + }, + }); + } + } + } + await new Promise((resolve, reject) => { uploader.array('file')(req as never, res as never, (result: unknown) => { if (result instanceof Error) reject(result.message); @@ -197,23 +236,6 @@ async function handler(req: NextApiReq, res: NextApiRes) { }); } - if (user.ratelimit) { - const remaining = user.ratelimit.getTime() - Date.now(); - logger.debug(`${user.id} encountered ratelimit, ${remaining}ms remaining`); - if (remaining <= 0) { - await prisma.user.update({ - where: { - id: user.id, - }, - data: { - ratelimit: null, - }, - }); - } else { - return res.ratelimited(remaining); - } - } - if (!req.files) return res.badRequest('no files'); if (req.files && req.files.length === 0) return res.badRequest('no files'); @@ -340,28 +362,6 @@ async function handler(req: NextApiReq, res: NextApiRes) { } } - if (user.administrator && zconfig.ratelimit.admin > 0) { - await prisma.user.update({ - where: { - id: user.id, - }, - data: { - ratelimit: new Date(Date.now() + zconfig.ratelimit.admin * 1000), - }, - }); - } else if (!user.administrator && zconfig.ratelimit.user > 0) { - if (user.administrator && zconfig.ratelimit.user > 0) { - await prisma.user.update({ - where: { - id: user.id, - }, - data: { - ratelimit: new Date(Date.now() + zconfig.ratelimit.user * 1000), - }, - }); - } - } - if (req.headers['no-json']) { res.setHeader('Content-Type', 'text/plain'); return res.end(response.files.join(','));