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.js58
1 files changed, 58 insertions, 0 deletions
diff --git a/server/lib/external-backends/backendhelper.js b/server/lib/external-backends/backendhelper.js
new file mode 100644
index 0000000..0905c48
--- /dev/null
+++ b/server/lib/external-backends/backendhelper.js
@@ -0,0 +1,58 @@
+/* global __appdir */
+const path = require('path')
+const ExternalBackends = require(path.join(__appdir, 'lib', 'external-backends'))
+var db = require(path.join(__appdir, 'lib', 'sequelize'))
+
+module.exports = {
+ addClient: 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))
+
+ // 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
+ }
+
+ // 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
+ }
+
+ // 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
+ })
+ })
+ },
+
+ deleteClients: function (objectIds) {
+ // Get all backends and call deleteClient for each instance.
+ db.backend.findAll({ include: ['mappedClients'] }).then(backends => {
+ backends.forEach(backend => {
+ const ba = new ExternalBackends()
+ const instance = ba.getInstance(backend.type)
+ var objectsToDelete = []
+ objectIds.forEach(oid => {
+ var element = backend.mappedClients.find(x => x.id === parseInt(oid))
+ if (element) objectsToDelete.push(element.backend_x_client.externalId)
+ })
+ // If there are objects to delete -> delete them.
+ if (objectsToDelete.length > 0) instance.deleteObjects(backend.credentials, objectsToDelete)
+ })
+ })
+ }
+}