|
|
|
@ -7,13 +7,16 @@ const { |
|
|
|
} = require("@budibase/backend-core/permissions") |
|
|
|
const Joi = require("joi") |
|
|
|
|
|
|
|
const OPTIONAL_STRING = Joi.string().optional().allow(null).allow("") |
|
|
|
const OPTIONAL_NUMBER = Joi.number().optional().allow(null) |
|
|
|
|
|
|
|
exports.tableValidator = () => { |
|
|
|
// prettier-ignore
|
|
|
|
return joiValidator.body(Joi.object({ |
|
|
|
_id: Joi.string(), |
|
|
|
_rev: Joi.string(), |
|
|
|
type: Joi.string().valid("table", "internal", "external"), |
|
|
|
primaryDisplay: Joi.string(), |
|
|
|
_id: OPTIONAL_STRING, |
|
|
|
_rev: OPTIONAL_STRING, |
|
|
|
type: OPTIONAL_STRING.valid("table", "internal", "external"), |
|
|
|
primaryDisplay: OPTIONAL_STRING, |
|
|
|
schema: Joi.object().required(), |
|
|
|
name: Joi.string().required(), |
|
|
|
views: Joi.object(), |
|
|
|
@ -24,7 +27,7 @@ exports.tableValidator = () => { |
|
|
|
exports.nameValidator = () => { |
|
|
|
// prettier-ignore
|
|
|
|
return joiValidator.body(Joi.object({ |
|
|
|
name: Joi.string(), |
|
|
|
name: OPTIONAL_STRING, |
|
|
|
})) |
|
|
|
} |
|
|
|
|
|
|
|
@ -33,21 +36,17 @@ exports.datasourceValidator = () => { |
|
|
|
return joiValidator.body(Joi.object({ |
|
|
|
_id: Joi.string(), |
|
|
|
_rev: Joi.string(), |
|
|
|
// source: Joi.string().valid("POSTGRES_PLUS"),
|
|
|
|
type: Joi.string().allow("datasource_plus"), |
|
|
|
type: OPTIONAL_STRING.allow("datasource_plus"), |
|
|
|
relationships: Joi.array().items(Joi.object({ |
|
|
|
from: Joi.string().required(), |
|
|
|
to: Joi.string().required(), |
|
|
|
cardinality: Joi.valid("1:N", "1:1", "N:N").required() |
|
|
|
})), |
|
|
|
// entities: Joi.array().items(Joi.object({
|
|
|
|
// type: Joi.string().valid(...Object.values(FieldTypes)).required(),
|
|
|
|
// name: Joi.string().required(),
|
|
|
|
// })),
|
|
|
|
}).unknown(true)) |
|
|
|
} |
|
|
|
|
|
|
|
function filterObject() { |
|
|
|
// prettier-ignore
|
|
|
|
return Joi.object({ |
|
|
|
string: Joi.object().optional(), |
|
|
|
fuzzy: Joi.object().optional(), |
|
|
|
@ -57,20 +56,22 @@ function filterObject() { |
|
|
|
empty: Joi.object().optional(), |
|
|
|
notEmpty: Joi.object().optional(), |
|
|
|
oneOf: Joi.object().optional(), |
|
|
|
}) |
|
|
|
contains: Joi.object().optional(), |
|
|
|
notContains: Joi.object().optional(), |
|
|
|
}).unknown(true) |
|
|
|
} |
|
|
|
|
|
|
|
exports.internalSearchValidator = () => { |
|
|
|
// prettier-ignore
|
|
|
|
return joiValidator.body(Joi.object({ |
|
|
|
tableId: Joi.string(), |
|
|
|
tableId: OPTIONAL_STRING, |
|
|
|
query: filterObject(), |
|
|
|
limit: Joi.number().optional(), |
|
|
|
sort: Joi.string().optional(), |
|
|
|
sortOrder: Joi.string().optional(), |
|
|
|
sortType: Joi.string().optional(), |
|
|
|
paginate: Joi.boolean().optional(), |
|
|
|
bookmark: Joi.alternatives().try(Joi.string(), Joi.number()).optional(), |
|
|
|
limit: OPTIONAL_NUMBER, |
|
|
|
sort: OPTIONAL_STRING, |
|
|
|
sortOrder: OPTIONAL_STRING, |
|
|
|
sortType: OPTIONAL_STRING, |
|
|
|
paginate: Joi.boolean(), |
|
|
|
bookmark: Joi.alternatives().try(OPTIONAL_STRING, OPTIONAL_NUMBER).optional(), |
|
|
|
})) |
|
|
|
} |
|
|
|
|
|
|
|
@ -79,12 +80,14 @@ exports.externalSearchValidator = () => { |
|
|
|
Joi.object({ |
|
|
|
query: filterObject(), |
|
|
|
paginate: Joi.boolean().optional(), |
|
|
|
bookmark: Joi.alternatives().try(Joi.string(), Joi.number()).optional(), |
|
|
|
limit: Joi.number().optional(), |
|
|
|
bookmark: Joi.alternatives() |
|
|
|
.try(OPTIONAL_STRING, OPTIONAL_NUMBER) |
|
|
|
.optional(), |
|
|
|
limit: OPTIONAL_NUMBER, |
|
|
|
sort: Joi.object({ |
|
|
|
column: Joi.string(), |
|
|
|
order: Joi.string().optional().valid("ascending", "descending"), |
|
|
|
type: Joi.string().valid("string", "number"), |
|
|
|
order: OPTIONAL_STRING.valid("ascending", "descending"), |
|
|
|
type: OPTIONAL_STRING.valid("string", "number"), |
|
|
|
}).optional(), |
|
|
|
}) |
|
|
|
) |
|
|
|
@ -115,8 +118,8 @@ exports.webhookValidator = () => { |
|
|
|
// prettier-ignore
|
|
|
|
return joiValidator.body(Joi.object({ |
|
|
|
live: Joi.bool(), |
|
|
|
_id: Joi.string().optional(), |
|
|
|
_rev: Joi.string().optional(), |
|
|
|
_id: OPTIONAL_STRING, |
|
|
|
_rev: OPTIONAL_STRING, |
|
|
|
name: Joi.string().required(), |
|
|
|
bodySchema: Joi.object().optional(), |
|
|
|
action: Joi.object({ |
|
|
|
@ -130,15 +133,15 @@ exports.roleValidator = () => { |
|
|
|
const permLevelArray = Object.values(PermissionLevels) |
|
|
|
// prettier-ignore
|
|
|
|
return joiValidator.body(Joi.object({ |
|
|
|
_id: Joi.string().optional(), |
|
|
|
_rev: Joi.string().optional(), |
|
|
|
_id: OPTIONAL_STRING, |
|
|
|
_rev: OPTIONAL_STRING, |
|
|
|
name: Joi.string().required(), |
|
|
|
// this is the base permission ID (for now a built in)
|
|
|
|
permissionId: Joi.string().valid(...Object.values(BUILTIN_PERMISSION_IDS)).required(), |
|
|
|
permissions: Joi.object() |
|
|
|
.pattern(/.*/, [Joi.string().valid(...permLevelArray)]) |
|
|
|
.optional(), |
|
|
|
inherits: Joi.string().optional(), |
|
|
|
inherits: OPTIONAL_STRING, |
|
|
|
}).unknown(true)) |
|
|
|
} |
|
|
|
|
|
|
|
@ -166,9 +169,9 @@ exports.screenValidator = () => { |
|
|
|
_children: Joi.array().required(), |
|
|
|
_instanceName: Joi.string().required(), |
|
|
|
_styles: Joi.object().required(), |
|
|
|
type: Joi.string().optional(), |
|
|
|
table: Joi.string().optional(), |
|
|
|
layoutId: Joi.string().optional(), |
|
|
|
type: OPTIONAL_STRING, |
|
|
|
table: OPTIONAL_STRING, |
|
|
|
layoutId: OPTIONAL_STRING, |
|
|
|
}).required().unknown(true), |
|
|
|
}).unknown(true)) |
|
|
|
} |
|
|
|
@ -191,8 +194,8 @@ function generateStepSchema(allowStepTypes) { |
|
|
|
exports.automationValidator = (existing = false) => { |
|
|
|
// prettier-ignore
|
|
|
|
return joiValidator.body(Joi.object({ |
|
|
|
_id: existing ? Joi.string().required() : Joi.string(), |
|
|
|
_rev: existing ? Joi.string().required() : Joi.string(), |
|
|
|
_id: existing ? Joi.string().required() : OPTIONAL_STRING, |
|
|
|
_rev: existing ? Joi.string().required() : OPTIONAL_STRING, |
|
|
|
name: Joi.string().required(), |
|
|
|
type: Joi.string().valid("automation").required(), |
|
|
|
definition: Joi.object({ |
|
|
|
|