Skip to content

Commit a469f2f

Browse files
committed
add uniform parsing and catching for arrays, remove redundant check
1 parent 506b657 commit a469f2f

File tree

3 files changed

+37
-30
lines changed

3 files changed

+37
-30
lines changed

src/routes/getLockCategoriesByHash.ts

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -44,14 +44,25 @@ const mergeLocks = (source: DBLock[], actionTypes: ActionType[]): LockResultByHa
4444

4545
export async function getLockCategoriesByHash(req: Request, res: Response): Promise<Response> {
4646
let hashPrefix = req.params.prefix as VideoIDHash;
47-
const actionTypes: ActionType[] = req.query.actionTypes
48-
? JSON.parse(req.query.actionTypes as string)
49-
: req.query.actionType
50-
? Array.isArray(req.query.actionType)
51-
? req.query.actionType
52-
: [req.query.actionType]
53-
: [ActionType.Skip, ActionType.Mute];
47+
let actionTypes: ActionType[] = [];
48+
try {
49+
actionTypes = req.query.actionTypes
50+
? JSON.parse(req.query.actionTypes as string)
51+
: req.query.actionType
52+
? Array.isArray(req.query.actionType)
53+
? req.query.actionType
54+
: [req.query.actionType]
55+
: [ActionType.Skip, ActionType.Mute];
56+
if (!Array.isArray(actionTypes)) {
57+
//invalid request
58+
return res.sendStatus(400);
59+
}
60+
} catch (err) {
61+
//invalid request
62+
return res.status(400).send("Invalid request: JSON parse error (actionTypes)");
63+
}
5464
if (!hashPrefixTester(req.params.prefix)) {
65+
5566
return res.status(400).send("Hash prefix does not match format requirements."); // Exit early on faulty prefix
5667
}
5768
hashPrefix = hashPrefix.toLowerCase() as VideoIDHash;
@@ -62,7 +73,7 @@ export async function getLockCategoriesByHash(req: Request, res: Response): Prom
6273
if (lockedRows.length === 0 || !lockedRows[0]) return res.sendStatus(404);
6374
// merge all locks
6475
return res.send(mergeLocks(lockedRows, actionTypes));
65-
} catch (err) {
76+
} catch (err) /* istanbul ignore next */ {
6677
Logger.error(err as string);
6778
return res.sendStatus(500);
6879
}

src/routes/getLockReason.ts

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -32,18 +32,24 @@ export async function getLockReason(req: Request, res: Response): Promise<Respon
3232
return res.status(400).send("No videoID provided");
3333
}
3434
let categories: Category[] = [];
35-
const actionTypes: ActionType[] = req.query.actionTypes
36-
? JSON.parse(req.query.actionTypes as string)
37-
: req.query.actionType
38-
? Array.isArray(req.query.actionType)
39-
? req.query.actionType
40-
: [req.query.actionType]
41-
: [ActionType.Skip, ActionType.Mute];
42-
const possibleCategories = filterActionType(actionTypes);
43-
if (!Array.isArray(actionTypes)) {
44-
//invalid request
45-
return res.status(400).send("actionTypes parameter does not match format requirements");
35+
let actionTypes: ActionType[] = [];
36+
try {
37+
actionTypes = req.query.actionTypes
38+
? JSON.parse(req.query.actionTypes as string)
39+
: req.query.actionType
40+
? Array.isArray(req.query.actionType)
41+
? req.query.actionType
42+
: [req.query.actionType]
43+
: [ActionType.Skip, ActionType.Mute];
44+
if (!Array.isArray(actionTypes)) {
45+
//invalid request
46+
return res.status(400).send("actionTypes parameter does not match format requirements");
47+
}
48+
} catch (error) {
49+
return res.status(400).send("Bad parameter: actionTypes (invalid JSON)");
4650
}
51+
const possibleCategories = filterActionType(actionTypes);
52+
4753
try {
4854
categories = req.query.categories
4955
? JSON.parse(req.query.categories as string)
@@ -64,11 +70,6 @@ export async function getLockReason(req: Request, res: Response): Promise<Respon
6470
: categories.filter(x =>
6571
possibleCategories.includes(x));
6672

67-
if (!videoID || !Array.isArray(actionTypes)) {
68-
//invalid request
69-
return res.sendStatus(400);
70-
}
71-
7273
try {
7374
// Get existing lock categories markers
7475
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
115116
}
116117

117118
return res.send(results);
118-
} catch (err) {
119+
} catch (err) /* istanbul ignore next */ {
119120
Logger.error(err as string);
120121
return res.sendStatus(500);
121122
}

src/routes/getTopUsers.ts

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -73,11 +73,6 @@ export async function getTopUsers(req: Request, res: Response): Promise<Response
7373
const sortType = parseInt(req.query.sortType as string);
7474
const categoryStatsEnabled = req.query.categoryStats;
7575

76-
if (sortType == undefined) {
77-
//invalid request
78-
return res.sendStatus(400);
79-
}
80-
8176
//setup which sort type to use
8277
let sortBy = "";
8378
if (sortType == 0) {

0 commit comments

Comments
 (0)