directus
1import { ForbiddenError } from '@directus/errors';
2import type { PrimaryKey, SchemaOverview } from '@directus/types';
3import { isValidUuid } from './is-valid-uuid.js';
4
5/**
6* Validate keys based on its type
7*/
8export function validateKeys(
9schema: SchemaOverview,
10collection: string,
11keyField: string,
12keys: PrimaryKey | PrimaryKey[],
13) {
14if (Array.isArray(keys)) {
15for (const key of keys) {
16validateKeys(schema, collection, keyField, key);
17}
18} else {
19const primaryKeyFieldType = schema.collections[collection]?.fields[keyField]?.type;
20
21if (primaryKeyFieldType === 'uuid' && !isValidUuid(String(keys))) {
22throw new ForbiddenError();
23} else if (primaryKeyFieldType === 'integer' && !Number.isInteger(Number(keys))) {
24throw new ForbiddenError();
25}
26}
27}
28