summaryrefslogtreecommitdiffstats
path: root/server/api
diff options
context:
space:
mode:
authorJannik Schönartz2019-04-01 02:43:48 +0200
committerJannik Schönartz2019-04-01 02:43:48 +0200
commitc10e0aab20ce8d49e6f7a8e31f1c4a3b4c86260d (patch)
treeffc41a353b03919a1ac148fa3e17931ebf68856d /server/api
parent[server/ipxeconfigs] add more responses (diff)
downloadbas-c10e0aab20ce8d49e6f7a8e31f1c4a3b4c86260d.tar.gz
bas-c10e0aab20ce8d49e6f7a8e31f1c4a3b4c86260d.tar.xz
bas-c10e0aab20ce8d49e6f7a8e31f1c4a3b4c86260d.zip
[server/external-backends] Add direct sync in idoit for some functions (create client, add/remove client to/from groups)
Diffstat (limited to 'server/api')
-rw-r--r--server/api/clients.js17
-rw-r--r--server/api/groups.js9
-rw-r--r--server/api/registration.js3
3 files changed, 27 insertions, 2 deletions
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)