summaryrefslogtreecommitdiffstats
path: root/server/lib/external-backends/backendhelper.js
diff options
context:
space:
mode:
Diffstat (limited to 'server/lib/external-backends/backendhelper.js')
-rw-r--r--server/lib/external-backends/backendhelper.js91
1 files changed, 60 insertions, 31 deletions
diff --git a/server/lib/external-backends/backendhelper.js b/server/lib/external-backends/backendhelper.js
index 89a9658..077d573 100644
--- a/server/lib/external-backends/backendhelper.js
+++ b/server/lib/external-backends/backendhelper.js
@@ -4,50 +4,79 @@ const ExternalBackends = require(path.join(__appdir, 'lib', 'external-backends')
var db = require(path.join(__appdir, 'lib', 'sequelize'))
module.exports = {
- addClient: function (client) {
+ addClient: async function (client) {
// Get all backends and call addClient for each instance.
- return db.backend.findAll({ include: ['mappedGroups', 'mappedClients'] }).then(backends => {
- var promises = []
- var backendids = []
- backends.forEach(backend => {
- const ba = new ExternalBackends()
- const instance = ba.getInstance(backend.type)
- var tmpClient = JSON.parse(JSON.stringify(client))
+ var backends = await db.backend.findAll({ include: ['mappedGroups', 'mappedClients'] })
+ var result = []
- // If the client id is set we need to get the external id.
- if (client.id) {
- var exid = backend.mappedClients.find(y => y.id === parseInt(client.id))
- if (exid) tmpClient.id = exid.backend_x_client.externalId
- }
+ for (var b in backends) {
+ var backend = backends[b]
+ const ba = new ExternalBackends()
+ const instance = ba.getInstance(backend.type)
+ var tmpClient = JSON.parse(JSON.stringify(client))
- // Convert the parent group id to the external backend parentId.
- if (client.parentId) {
- var element = backend.mappedGroups.find(x => x.id === parseInt(client.parentId))
- if (element) tmpClient['parentId'] = element.backend_x_group.externalId
+ // If the client id is set we need to get the external id.
+ if (client.id) {
+ var exid = backend.mappedClients.find(y => y.id === parseInt(client.id))
+ if (exid) tmpClient.id = exid.backend_x_client.externalId
+ } else {
+ // If we don't already have the client id, we need to check if there is already a client with the provided uuid in the backend.
+ var cl = await instance.getClient(backend.credentials, { uuid: tmpClient.uuid })
+ if (cl.succes) {
+ tmpClient.id = cl.data
}
+ }
- // TODO: Stuff to do if client already exists
- backendids.push(backend.id)
- promises.push(instance.addClient(backend.credentials, tmpClient))
- })
- return Promise.all(promises).then(result => {
- result.forEach(object => {
- object.backendId = backendids.shift()
- })
- return result
- })
- })
+ // Convert the parent group id to the external backend parentId.
+ if (client.parentId) {
+ var element = backend.mappedGroups.find(x => x.id === parseInt(client.parentId))
+ if (element) tmpClient['parentId'] = element.backend_x_group.externalId
+ }
+
+ var client = await instance.addClient(backend.credentials, tmpClient)
+ client.backendId = backend.id
+ result.push(client)
+ }
+ return result
+ },
+
+ updateClient: async function (client) {
+ // Get all backends and call addClient for each instance.
+ var backends = await db.backend.findAll({ include: ['mappedGroups', 'mappedClients'] })
+ var result = []
+
+ for (var b in backends) {
+ var backend = backends[b]
+ const ba = new ExternalBackends()
+ const instance = ba.getInstance(backend.type)
+ var tmpClient = JSON.parse(JSON.stringify(client))
+
+ // Get the external clientid.
+ var exid = backend.mappedClients.find(y => y.id === parseInt(client.id))
+ if (exid) tmpClient.id = exid.backend_x_client.externalId
+
+ // Convert the parent group id to the external backend parentId.
+ if (client.parentId) {
+ var element = backend.mappedGroups.find(x => x.id === parseInt(client.parentId))
+ if (element) tmpClient['parentId'] = element.backend_x_group.externalId
+ }
+
+ var client = await instance.updateClient(backend.credentials, tmpClient)
+ client.backendId = backend.id
+ result.push(client)
+ }
+ return result
},
- deleteClients: function () {
+ deleteClients: function (clientids) {
// Get all backends and call deleteClient for each instance.
- db.backend.findAll({ include: ['clientMappings'] }).then(backends => {
+ return db.backend.findAll({ where: { '$clientMappings.clientid$': clientids }, include: ['clientMappings'] }).then(backends => {
backends.forEach(backend => {
const ba = new ExternalBackends()
const instance = ba.getInstance(backend.type)
var objectsToDelete = []
backend.clientMappings.forEach(mapping => {
- if (mapping.clientId === null) objectsToDelete.push(mapping.externalId)
+ objectsToDelete.push(mapping.externalId)
})
// If there are objects to delete -> delete them.
if (objectsToDelete.length > 0) instance.deleteObjects(backend.credentials, objectsToDelete)