From c10e0aab20ce8d49e6f7a8e31f1c4a3b4c86260d Mon Sep 17 00:00:00 2001 From: Jannik Schönartz Date: Mon, 1 Apr 2019 00:43:48 +0000 Subject: [server/external-backends] Add direct sync in idoit for some functions (create client, add/remove client to/from groups) --- server/api/clients.js | 17 +++++++++++++++++ server/api/groups.js | 9 +++++++++ server/api/registration.js | 3 +-- 3 files changed, 27 insertions(+), 2 deletions(-) (limited to 'server/api') diff --git a/server/api/clients.js b/server/api/clients.js index 32b845d..3152e10 100644 --- a/server/api/clients.js +++ b/server/api/clients.js @@ -35,14 +35,31 @@ router.postAsync(['', '/:id'], async (req, res) => { } else { let client let action = 'updated' + + let backendClient = { + id: req.params.id, + name: req.body.data.name, + type: 'CLIENT', + uuid: req.body.data.uuid, + parents: req.body.groupIds, + networks: [ + { ip: req.body.data.ip, mac: req.body.data.mac } + ] + } + if (req.params.id === undefined) { client = await db.client.create(req.body.data) action = 'created' io.in('broadcast newClient').emit('notifications newAlert', { type: 'info', text: 'New client!' }) + + // Add client to the backends + backendClient.id = client.id + backendHelper.addClient(backendClient) } else if (req.params.id > 0) { client = await db.client.findOne({ where: { id: req.params.id } }) if (!client) return HttpResponse.notFound(req.params.id).send(res) else await client.update(req.body.data) + backendHelper.updateClient(backendClient) } else { return HttpResponse.invalidId().send(res) } diff --git a/server/api/groups.js b/server/api/groups.js index e3683bf..7cab3d8 100644 --- a/server/api/groups.js +++ b/server/api/groups.js @@ -7,6 +7,7 @@ const express = require('express') const { decorateApp } = require('@awaitjs/express') const router = decorateApp(express.Router()) const HttpResponse = require(path.join(__appdir, 'lib', 'httpresponse')) +const backendHelper = require(path.join(__appdir, 'lib', 'external-backends', 'backendhelper')) // ############################################################################ // ########################### GET requests ################################# @@ -120,12 +121,20 @@ router.postAsync('/:id/clients', async (req, res) => { if (!(req.params.id > 0)) return HttpResponse.invalidId().send(res) const group = await db.group.findOne({ where: { id: req.params.id } }) if (group) { + let groupid = null if (req.query.delete !== undefined && req.query.delete !== 'false') { const count = await group.removeClients(req.body.ids) HttpResponse.successBatch('removed', 'client', count).send(res) } else { const count = await group.addClients(req.body.ids) HttpResponse.successBatch('added', 'client', count).send(res) + groupid = group.id + } + + // Update each client backend + for (let index in req.body.ids) { + const id = req.body.ids[index] + backendHelper.updateClient({ id: id, parents: [groupid] }) } } else { HttpResponse.notFound(req.params.id).send(res) diff --git a/server/api/registration.js b/server/api/registration.js index 0a9a4cb..e3ca350 100644 --- a/server/api/registration.js +++ b/server/api/registration.js @@ -129,7 +129,6 @@ noAuthRouter.postAsync('/clients', async (req, res) => { // Client does not exist. if (!client.parents) client.parents = [] // TODO: Save all IPs? Maybe only primary ip? - // const createClient = { name: client.name, description: client.type, ip: client.network.ip, mac: client.network.mac, uuid: client.uuid } const createClient = { name: client.name, description: client.type, ip: client.networks[0].ip, mac: client.networks[0].mac, uuid: client.uuid } if (client.type === 'CLIENT') createClient.registrationState = await getNextHookScript(client.parents) const newClient = await db.client.create(createClient) @@ -138,7 +137,7 @@ noAuthRouter.postAsync('/clients', async (req, res) => { // Add groups to the client. if (client.parents.length === 0) client.parents = await ipHelper.getGroups(client.networks[0].ip) client.parents.forEach(pid => { newClient.addGroup(pid) }) - log({ category: 'CLIENT_REGISTRATION', description: 'Client added successfully.', clientId: newClient.id }) + log({ category: 'REGISTRATION', description: 'Client added successfully.', clientId: newClient.id }) // Add the client to the backends. const result = await backendHelper.addClient(client) -- cgit v1.2.3-55-g7522