summaryrefslogblamecommitdiffstats
path: root/server/lib/external-backends/backendhelper.js
blob: 0905c4823e385b26ffc358a218c36dbfcba08d50 (plain) (tree)

























































                                                                                                    
/* 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)
      })
    })
  }
}