diff --git a/src/pages/api/cron.ts b/src/pages/api/cron.ts index 3d07453..073ebe7 100644 --- a/src/pages/api/cron.ts +++ b/src/pages/api/cron.ts @@ -12,7 +12,7 @@ import { } from '@/db'; import { localNow } from '@/utils/timezone'; import logger from '@/logger'; -import { unauthorized } from '@/utils/helpers'; +import { parseBoolean, unauthorized } from '@/utils/helpers'; type ResponseData = { diff: number; @@ -87,11 +87,7 @@ export default async function handler( try { let result; - if ( - process.env.NODE_ENV === 'production' && - // TODO: Proper boolean parsing - (req.query.report ?? 'true') === 'true' - ) + if (process.env.NODE_ENV === 'production' && parseBoolean(req.query.report)) result = await monitorAsync(innerFunction); else result = await innerFunction(); diff --git a/src/utils/helpers.ts b/src/utils/helpers.ts new file mode 100644 index 0000000..59dc9be --- /dev/null +++ b/src/utils/helpers.ts @@ -0,0 +1,24 @@ +import { env } from '@/env/server.mjs'; +import logger from '@/logger'; +import { NextApiRequest, NextApiResponse } from 'next'; + +export function unauthorized( + req: NextApiRequest, + res: NextApiResponse +): boolean { + if (req.query.key != env.API_KEY) { + logger.debug('Unauthorized request'); + res.status(401).json({ status: 'unauthorized' }); + return true; + } + return false; +} + +export function parseBoolean( + value: string | string[] | undefined | null +): boolean { + if (value == undefined) return false; + if (Array.isArray(value)) return false; + value = value.toLowerCase(); + return value === 'true' || value === '1' || value === 'yes'; +}