summaryrefslogblamecommitdiffstats
path: root/server/lib/external-backends/backendhelper.js
blob: 077d573cf448e51e934f78e4ac96fe159f23ffd6 (plain) (tree)
1
2
3
4
5
6
7
8
9
10





                                                                                 
                                      
                                                             

                                                                                           
 




                                                        
 








                                                                                                                                       
         
       
 






































                                                                                           

    
                                       
                                                                
                                                                                                                                    



                                                     
                                                   
                                                  






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

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

      // 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 (clientids) {
    // Get all backends and call deleteClient for each instance.
    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 => {
          objectsToDelete.push(mapping.externalId)
        })
        // If there are objects to delete -> delete them.
        if (objectsToDelete.length > 0) instance.deleteObjects(backend.credentials, objectsToDelete)
      })
    })
  }
}