2020-05-20 18:02:46 +02:00
|
|
|
const Router = require("@koa/router")
|
2020-09-21 14:49:34 +02:00
|
|
|
const controller = require("../controllers/automation")
|
2020-05-27 18:23:01 +02:00
|
|
|
const authorized = require("../../middleware/authorized")
|
2020-09-10 18:46:34 +02:00
|
|
|
const joiValidator = require("../../middleware/joi-validator")
|
2020-11-11 18:34:15 +01:00
|
|
|
const {
|
|
|
|
BUILDER,
|
|
|
|
PermissionLevels,
|
|
|
|
PermissionTypes,
|
|
|
|
} = require("../../utilities/security/permissions")
|
2020-09-10 18:46:34 +02:00
|
|
|
const Joi = require("joi")
|
2020-05-20 18:02:46 +02:00
|
|
|
|
|
|
|
const router = Router()
|
|
|
|
|
2020-09-10 18:46:34 +02:00
|
|
|
// prettier-ignore
|
|
|
|
function generateStepSchema(allowStepTypes) {
|
|
|
|
return Joi.object({
|
|
|
|
stepId: Joi.string().required(),
|
|
|
|
id: Joi.string().required(),
|
|
|
|
description: Joi.string().required(),
|
|
|
|
name: Joi.string().required(),
|
|
|
|
tagline: Joi.string().required(),
|
|
|
|
icon: Joi.string().required(),
|
|
|
|
params: Joi.object(),
|
|
|
|
// TODO: validate args a bit more deeply
|
|
|
|
args: Joi.object(),
|
|
|
|
type: Joi.string().required().valid(...allowStepTypes),
|
|
|
|
}).unknown(true)
|
|
|
|
}
|
|
|
|
|
2020-09-16 20:25:52 +02:00
|
|
|
function generateValidator(existing = false) {
|
|
|
|
// prettier-ignore
|
|
|
|
return joiValidator.body(Joi.object({
|
|
|
|
live: Joi.bool(),
|
2020-09-17 17:16:05 +02:00
|
|
|
_id: existing ? Joi.string().required() : Joi.string(),
|
|
|
|
_rev: existing ? Joi.string().required() : Joi.string(),
|
2020-09-16 20:25:52 +02:00
|
|
|
name: Joi.string().required(),
|
2020-09-21 14:49:34 +02:00
|
|
|
type: Joi.string().valid("automation").required(),
|
2020-09-16 20:25:52 +02:00
|
|
|
definition: Joi.object({
|
|
|
|
steps: Joi.array().required().items(generateStepSchema(["ACTION", "LOGIC"])),
|
2020-10-22 18:48:32 +02:00
|
|
|
trigger: generateStepSchema(["TRIGGER"]).allow(null),
|
2020-09-16 20:25:52 +02:00
|
|
|
}).required().unknown(true),
|
|
|
|
}).unknown(true))
|
|
|
|
}
|
2020-09-10 18:46:34 +02:00
|
|
|
|
2020-05-20 18:02:46 +02:00
|
|
|
router
|
2020-09-14 15:35:03 +02:00
|
|
|
.get(
|
2020-09-21 14:49:34 +02:00
|
|
|
"/api/automations/trigger/list",
|
2020-09-14 15:35:03 +02:00
|
|
|
authorized(BUILDER),
|
|
|
|
controller.getTriggerList
|
|
|
|
)
|
|
|
|
.get(
|
2020-09-21 14:49:34 +02:00
|
|
|
"/api/automations/action/list",
|
2020-09-14 15:35:03 +02:00
|
|
|
authorized(BUILDER),
|
|
|
|
controller.getActionList
|
|
|
|
)
|
|
|
|
.get(
|
2020-09-21 14:49:34 +02:00
|
|
|
"/api/automations/logic/list",
|
2020-09-14 15:35:03 +02:00
|
|
|
authorized(BUILDER),
|
|
|
|
controller.getLogicList
|
|
|
|
)
|
2020-09-14 16:34:09 +02:00
|
|
|
.get(
|
2020-09-21 14:49:34 +02:00
|
|
|
"/api/automations/definitions/list",
|
2020-09-14 16:34:09 +02:00
|
|
|
authorized(BUILDER),
|
|
|
|
controller.getDefinitionList
|
|
|
|
)
|
2020-09-21 14:49:34 +02:00
|
|
|
.get("/api/automations", authorized(BUILDER), controller.fetch)
|
|
|
|
.get("/api/automations/:id", authorized(BUILDER), controller.find)
|
2020-09-14 15:35:03 +02:00
|
|
|
.put(
|
2020-09-21 14:49:34 +02:00
|
|
|
"/api/automations",
|
2020-09-14 15:35:03 +02:00
|
|
|
authorized(BUILDER),
|
2020-09-16 20:25:52 +02:00
|
|
|
generateValidator(true),
|
2020-09-14 15:35:03 +02:00
|
|
|
controller.update
|
|
|
|
)
|
|
|
|
.post(
|
2020-09-21 14:49:34 +02:00
|
|
|
"/api/automations",
|
2020-09-14 15:35:03 +02:00
|
|
|
authorized(BUILDER),
|
2020-09-16 20:25:52 +02:00
|
|
|
generateValidator(false),
|
2020-09-14 15:35:03 +02:00
|
|
|
controller.create
|
|
|
|
)
|
2020-10-22 18:48:32 +02:00
|
|
|
.post(
|
|
|
|
"/api/automations/:id/trigger",
|
2020-11-11 18:34:15 +01:00
|
|
|
authorized(PermissionTypes.AUTOMATION, PermissionLevels.EXECUTE),
|
2020-10-22 18:48:32 +02:00
|
|
|
controller.trigger
|
|
|
|
)
|
2020-09-21 14:49:34 +02:00
|
|
|
.delete("/api/automations/:id/:rev", authorized(BUILDER), controller.destroy)
|
2020-05-20 18:02:46 +02:00
|
|
|
|
|
|
|
module.exports = router
|