Add typeguard for node data passed in requests.

This commit is contained in:
baldo 2022-07-28 13:56:47 +02:00
parent d783bb634f
commit 779c072ac7

View file

@ -10,9 +10,13 @@ import {Request, Response} from "express";
import {
CreateOrUpdateNode,
DomainSpecificNodeResponse,
isCreateOrUpdateNode,
isNodeSortField,
isString,
isToken,
isUndefined,
JSONObject,
JSONValue,
MAC,
NodeResponse,
NodeStateData,
@ -25,19 +29,27 @@ import {
const nodeFields = ['hostname', 'key', 'email', 'nickname', 'mac', 'coords', 'monitoring'];
// TODO: Rename
function getNormalizedNodeData(reqData: any): CreateOrUpdateNode {
function getNormalizedNodeData(reqData: JSONObject): CreateOrUpdateNode {
const node: { [key: string]: any } = {};
for (const field of nodeFields) {
let value = normalizeString(reqData[field]);
let value: JSONValue | undefined = reqData[field];
if (isString(value)) {
value = normalizeString(value);
if (field === 'mac') {
value = normalizeMac(value as MAC);
}
node[field] = value;
}
// TODO: Add typeguard before cast.
return node as CreateOrUpdateNode;
if (!isUndefined(value)) {
node[field] = value;
}
}
if (isCreateOrUpdateNode(node)) {
return node;
}
throw {data: "Invalid node data.", type: ErrorTypes.badRequest};
}
const isValidNode = forConstraints(Constraints.node, false);