add uniform parsing and catching for arrays, remove redundant check

This commit is contained in:
Michael C
2022-09-25 03:30:33 -04:00
parent 506b6570f3
commit a469f2f382
3 changed files with 37 additions and 30 deletions

View File

@@ -44,14 +44,25 @@ const mergeLocks = (source: DBLock[], actionTypes: ActionType[]): LockResultByHa
export async function getLockCategoriesByHash(req: Request, res: Response): Promise<Response> { export async function getLockCategoriesByHash(req: Request, res: Response): Promise<Response> {
let hashPrefix = req.params.prefix as VideoIDHash; let hashPrefix = req.params.prefix as VideoIDHash;
const actionTypes: ActionType[] = req.query.actionTypes let actionTypes: ActionType[] = [];
? JSON.parse(req.query.actionTypes as string) try {
: req.query.actionType actionTypes = req.query.actionTypes
? Array.isArray(req.query.actionType) ? JSON.parse(req.query.actionTypes as string)
? req.query.actionType : req.query.actionType
: [req.query.actionType] ? Array.isArray(req.query.actionType)
: [ActionType.Skip, ActionType.Mute]; ? 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)) { if (!hashPrefixTester(req.params.prefix)) {
return res.status(400).send("Hash prefix does not match format requirements."); // Exit early on faulty prefix return res.status(400).send("Hash prefix does not match format requirements."); // Exit early on faulty prefix
} }
hashPrefix = hashPrefix.toLowerCase() as VideoIDHash; 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); if (lockedRows.length === 0 || !lockedRows[0]) return res.sendStatus(404);
// merge all locks // merge all locks
return res.send(mergeLocks(lockedRows, actionTypes)); return res.send(mergeLocks(lockedRows, actionTypes));
} catch (err) { } catch (err) /* istanbul ignore next */ {
Logger.error(err as string); Logger.error(err as string);
return res.sendStatus(500); return res.sendStatus(500);
} }

View File

@@ -32,18 +32,24 @@ export async function getLockReason(req: Request, res: Response): Promise<Respon
return res.status(400).send("No videoID provided"); return res.status(400).send("No videoID provided");
} }
let categories: Category[] = []; let categories: Category[] = [];
const actionTypes: ActionType[] = req.query.actionTypes let actionTypes: ActionType[] = [];
? JSON.parse(req.query.actionTypes as string) try {
: req.query.actionType actionTypes = req.query.actionTypes
? Array.isArray(req.query.actionType) ? JSON.parse(req.query.actionTypes as string)
? req.query.actionType : req.query.actionType
: [req.query.actionType] ? Array.isArray(req.query.actionType)
: [ActionType.Skip, ActionType.Mute]; ? req.query.actionType
const possibleCategories = filterActionType(actionTypes); : [req.query.actionType]
if (!Array.isArray(actionTypes)) { : [ActionType.Skip, ActionType.Mute];
//invalid request if (!Array.isArray(actionTypes)) {
return res.status(400).send("actionTypes parameter does not match format requirements"); //invalid request
return res.status(400).send("actionTypes parameter does not match format requirements");
}
} catch (error) {
return res.status(400).send("Bad parameter: actionTypes (invalid JSON)");
} }
const possibleCategories = filterActionType(actionTypes);
try { try {
categories = req.query.categories categories = req.query.categories
? JSON.parse(req.query.categories as string) ? JSON.parse(req.query.categories as string)
@@ -64,11 +70,6 @@ export async function getLockReason(req: Request, res: Response): Promise<Respon
: categories.filter(x => : categories.filter(x =>
possibleCategories.includes(x)); possibleCategories.includes(x));
if (!videoID || !Array.isArray(actionTypes)) {
//invalid request
return res.sendStatus(400);
}
try { try {
// Get existing lock categories markers // 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 }[]; 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<Respon
} }
return res.send(results); return res.send(results);
} catch (err) { } catch (err) /* istanbul ignore next */ {
Logger.error(err as string); Logger.error(err as string);
return res.sendStatus(500); return res.sendStatus(500);
} }

View File

@@ -73,11 +73,6 @@ export async function getTopUsers(req: Request, res: Response): Promise<Response
const sortType = parseInt(req.query.sortType as string); const sortType = parseInt(req.query.sortType as string);
const categoryStatsEnabled = req.query.categoryStats; const categoryStatsEnabled = req.query.categoryStats;
if (sortType == undefined) {
//invalid request
return res.sendStatus(400);
}
//setup which sort type to use //setup which sort type to use
let sortBy = ""; let sortBy = "";
if (sortType == 0) { if (sortType == 0) {