/* global __appdir */ var path = require('path') var db = require(path.join(__appdir, 'lib', 'sequelize')) var groupHelper = require(path.join(__appdir, 'lib', 'grouphelper')) var express = require('express') const { decorateApp } = require('@awaitjs/express') var router = decorateApp(express.Router()) const zmq = require('zeromq') const socket = zmq.socket('push') socket.connect('ipc:///tmp/bas_zeromq_events') // ############################################################################ // ########################### GET requests ################################# /* * @return: Returns event of given id. */ router.getAsync('/:id', async (req, res) => { var event = await db.event.findOne({ where: { id: req.params.id }, include: ['config', 'clients', 'groups'] }) if (event) res.send(event) else res.status(404).end() }) /* * @return: Returns a list of all events in the database. */ router.getAsync('', async (req, res) => { var events = await db.event.findAll({ include: ['config', 'clients', 'groups'] }) if (events) res.status(200).send(events) else res.status(404).end() }) // ############################################################################ // ########################## POST requests ################################# /* * @return: Returns a list of all childs of the given groups * Is also used by the PermissionManager Frontend to get it's blacklist childs */ router.postAsync('/blacklist', async (req, res) => { if (req.body.groups) { var blacklist = await groupHelper.getAllChildren(req.body.groups) res.send(blacklist) } else res.status(404).end() }) // Create, Update or Delete POST router.postAsync(['', '/:id'], async (req, res) => { if (req.query.delete !== undefined && req.query.delete !== 'false') { await db.event.destroy({ where: { id: req.params.id || req.body.ids } }).then(count => { res.send({ count }) }) req.body.ids.forEach(id => { socket.send(id) }) } else { var promises = [] var promisesBlacklist = [] var eventDb if (req.body.config.length !== 1) req.body.config = null if (req.body.times.length === 0) req.body.times = null if (req.params.id > 0) { // Update existing role eventDb = await db.event.findOne({ where: { id: req.params.id } }) if (eventDb !== null) { promises.push(eventDb.update({ name: req.body.name, description: req.body.description, times: req.body.times, important: req.body.important, wakeonlan: req.body.wakeonlan, configId: req.body.config || null })) promises.push(eventDb.setGroups(req.body.groups, { through: { blacklist: 0 } })) promises.push(eventDb.setClients(req.body.clients, { through: { blacklist: 0 } })) await Promise.all(promises) promisesBlacklist.push(eventDb.addGroups(req.body.blacklistGroups, { through: { blacklist: 1 } })) promisesBlacklist.push(eventDb.addClients(req.body.blacklistClients, { through: { blacklist: 1 } })) await Promise.all(promisesBlacklist) socket.send(eventDb.id) res.send({ id: req.params.id }) } else { res.status(404).end() } } else if (req.params.id === undefined) { // Create new role eventDb = await db.event.create({ name: req.body.name, description: req.body.description, times: req.body.times, important: req.body.important, wakeonlan: req.body.wakeonlan, configId: req.body.config || null }) promises.push(eventDb.setGroups(req.body.groups, { through: { blacklist: 0 } })) promises.push(eventDb.setClients(req.body.clients, { through: { blacklist: 0 } })) await Promise.all(promises) promisesBlacklist.push(eventDb.addGroups(req.body.blacklistGroups, { through: { blacklist: 1 } })) promisesBlacklist.push(eventDb.addClients(req.body.blacklistClients, { through: { blacklist: 1 } })) await Promise.all(promisesBlacklist) socket.send(eventDb.id) res.send({ id: req.body.id }) } } }) // ############################################################################ // ############################################################################ module.exports.router = router