diff --git a/src/routes/getLockCategoriesByHash.ts b/src/routes/getLockCategoriesByHash.ts index 227f68a..1aee441 100644 --- a/src/routes/getLockCategoriesByHash.ts +++ b/src/routes/getLockCategoriesByHash.ts @@ -44,14 +44,25 @@ const mergeLocks = (source: DBLock[], actionTypes: ActionType[]): LockResultByHa export async function getLockCategoriesByHash(req: Request, res: Response): Promise { let hashPrefix = req.params.prefix as VideoIDHash; - const actionTypes: ActionType[] = req.query.actionTypes - ? JSON.parse(req.query.actionTypes as string) - : req.query.actionType - ? Array.isArray(req.query.actionType) - ? req.query.actionType - : [req.query.actionType] - : [ActionType.Skip, ActionType.Mute]; + let actionTypes: ActionType[] = []; + try { + actionTypes = req.query.actionTypes + ? JSON.parse(req.query.actionTypes as string) + : req.query.actionType + ? Array.isArray(req.query.actionType) + ? req.query.actionType + : [req.query.actionType] + : [ActionType.Skip, ActionType.Mute]; + if (!Array.isArray(actionTypes)) { + //invalid request + return res.sendStatus(400); + } + } catch (err) { + //invalid request + return res.status(400).send("Invalid request: JSON parse error (actionTypes)"); + } if (!hashPrefixTester(req.params.prefix)) { + return res.status(400).send("Hash prefix does not match format requirements."); // Exit early on faulty prefix } hashPrefix = hashPrefix.toLowerCase() as VideoIDHash; @@ -62,7 +73,7 @@ export async function getLockCategoriesByHash(req: Request, res: Response): Prom if (lockedRows.length === 0 || !lockedRows[0]) return res.sendStatus(404); // merge all locks return res.send(mergeLocks(lockedRows, actionTypes)); - } catch (err) { + } catch (err) /* istanbul ignore next */ { Logger.error(err as string); return res.sendStatus(500); } diff --git a/src/routes/getLockReason.ts b/src/routes/getLockReason.ts index ef4e5a3..59ab528 100644 --- a/src/routes/getLockReason.ts +++ b/src/routes/getLockReason.ts @@ -32,18 +32,24 @@ export async function getLockReason(req: Request, res: Response): Promise possibleCategories.includes(x)); - if (!videoID || !Array.isArray(actionTypes)) { - //invalid request - return res.sendStatus(400); - } - try { // Get existing lock categories markers const row = await db.prepare("all", 'SELECT "category", "reason", "actionType", "userID" from "lockCategories" where "videoID" = ?', [videoID]) as {category: Category, reason: string, actionType: ActionType, userID: string }[]; @@ -115,7 +116,7 @@ export async function getLockReason(req: Request, res: Response): Promise