summaryrefslogblamecommitdiffstats
path: root/server/lib/external-backends/index.js
blob: f16a1e19302bfe4230d7682875a9c606772e394a (plain) (tree)
1
2
3
4
5
6
7
8
                     

                            

                        


                                                          




                                                                                           









                                                                                                   
                     
                                                                                                                        

   




                                                  







                                                          
     



                                                                                                       
 

                                                                                     


                                 



                   
    






                                                                     
                                                                                                                   
   
 
    



                                                  
                                  
                                                                                                                    








                                                                                                      
                                                                                                                   


    





                                                
                                                                                                                      


    





                                                                             
                                             
                                                                                                                     


    



                                                                                               
                                   
                                                                                                                         
   
 



                                                                            


                                      






                                                                                                                                
                                                                                                   



                                                                                                                             


                                         
                                                                                                                    







                                            
                                                                                                                         






                                                                                                                                                    
                                            
                                                                                                                       

   
                                                      
                                                                                                                      
   

                                               
                                                                                                                      

                                                     
                                                                                                                  
   


                                                                                                                     











                                                                                                                 

 
                                 
/* global __appdir */
const fs = require('fs')
const path = require('path')

class ExternalBackends {
  /*
   * Returns a list of all backends which have a .js file.
   */
  getBackends () {
    var files = fs.readdirSync(path.join(__appdir, 'lib', 'external-backends', 'backends'))
    return files
  }

  /*
   * Returns the credential structure / fields, defined in the backends.
   *
   * If type === switch there can be child elements in the elements attribute.
   * Those elements are only shown, if the switch is set to true.
   * [{ type: 'text', id: 1, name: '<NAME>', icon: '<ICON_NAME>' },
   *  { type: 'password', id: 2, name: '<NAME>', icon: '<ICON_NAME>' },
   *  { type: 'switch', id: 3, name: '<NAME>', icon: '<ICON_NAME>' , elements: [ { type: ... } ] },
   *  { type: 'select', id: 4, name: '<NAME>', icon: '<ICON_NAME>' }, ...]
   */
  getCredentials () {
    return { error: 'NOT_IMPLEMENTED_EXCEPTION', message: 'The provided backend does not have a getCredentials method' }
  }

  /*
   * type: <BACKEND_TYPE>
   *
   * Returns the instance of a given backend type.
   */
  getInstance (type) {
    const bList = this.getBackends()
    const bType = type + '-backend.js'

    // Check if it's a valid backend type.
    if (bList.indexOf(bType) === -1) {
      console.log(bType + ' is not a valid backend type.')
      return null
    }

    const backend = new (require(path.join(__appdir, 'lib', 'external-backends', 'backends', bType)))()
    return backend
  }

  /*
   * Returns an empty array [] if the backends doesn't have the function implemented.
   *
   * return: ['<SYNC_TYPE>', ...]
   */
  getSyncTypes () {
    return []
  }

  /*
   * Get the client from the backend and returns their informationen.
   * credentials: <BACKEND_CREDENTIALS>
   * client: Information about the client (ip, mac, uuid)
   *
   * return:
   */
  async getClient (credentials, client) {
    return { error: 'NOT_IMPLEMENTED_EXCEPTION', message: 'The provided backend does not have a getClient method' }
  }

  /*
   * credendtials: <BACKEND_CREDENTIALS>
   *
   * Returns a list of all objects in the backend.
   */
  async getObjects (credentials) {
    return { error: 'NOT_IMPLEMENTED_EXCEPTION', message: 'The provided backend does not have a getObjects method' }
  }

  /*
   * credendtials: <BACKEND_CREDENTIALS>
   * oid: <OBJECT_ID>
   *
   * Call the API of the backend and returns the information to the object including a list of childs.
   */
  async getObject (credentials, oid) {
    return { error: 'NOT_IMPLEMENTED_EXCEPTION', message: 'The provided backend does not have a getObject method' }
  }

  /*
   * credendtials: <BACKEND_CREDENTIALS>
   * objectIds: [<OBJECT_ID>, <OBJECT_ID>, ...]
   *
   * Deletes the objecs from the backend.
   */
  async deleteObjects (credentials, objectIds) {
    return { error: 'NOT_IMPLEMENTED_EXCEPTION', message: 'The provided backend does not have a deleteObject method' }
  }

  /*
   * credentials: <BACKEND_CREDENTIALS>
   * objects: [{ eid: <EXTERNAL_ID>, gid: <GROUP_ID> }, ...]
   * EXTERNAL_ID is the id of the objects in the external backend requestet.
   *
   * return: [{ gid: <GROUP_ID>, childs: [{ id: <EXTERNAL_ID>, }, ...]}, ...]
   */
  async getDataTree (credendtials, objects) {
    return { error: 'NOT_IMPLEMENTED_EXCEPTION', message: 'The provided backend does not have a getDataTree method' }
  }

  /*
   * Checks the connection of a given backend.
   *
   * return: { success: <boolean>, status: '<STATUS_CODE_IF_ERROR>', error: '<ERROR_MESSAGE>' }
   */
  async checkConnection (backend) {
    return { error: 'NOT_IMPLEMENTED_EXCEPTION', message: 'The provided backend does not have a checkConnection method' }
  }

  /* Returns an empty array [] if the backends doesn't have such a function.
   *
   * return: [{id: <id>, title: <title>}, ...]
   */
  async getObjectTypes (credentials) {
    return []
  }

  /*
   * Adds the client to the backend.
   *
   * credentials: <BACKEND_CREDENTIALS>
   * The client parameters are all optional. If the client has an id the object is not created but the categories of the object.
   * client: {
   *            id: <CLIENT_ID>, title: <CLIENT_TITLE>, parentId: <PARENT_ID>, uuid: <CLIENT_UUID>,
   *            network: { mac: <MAC_ADDRESS>, ip: <IP_ADDRESS> },
   *            location: { assembly: <Horizontal/Vertical>, insertion: <Back/Front/Front and Back>, position: <RU 1 - 46> },
   *            system: { model: <SYSTEM_MODEL>, manufacturer: <SYSTEM_MANUFACTURER>,  serialnumber: <SYSTEM_SERIALNUMBER> },
   *            formfactor: { formfactor: <e.g. 19">, rackunits: <integer> }
   *         }
   */
  async addClient (credentials, client) {
    return { error: 'NOT_IMPLEMENTED_EXCEPTION', message: 'The provided backend does not have an addClient method' }
  }

  /*
   * Updates the client in the backend.
   *
   * credentials: <BACKEND_CREDENTIALS>
   * The client parameters are all optional.
   * client: {
   *            id: <CLIENT_ID>, title: <CLIENT_TITLE>, parentId: <PARENT_ID>, uuid: <CLIENT_UUID>, type: <CLIENT/SERVER>
   *            system: { model: <SYSTEM_MODEL>, manufacturer: <SYSTEM_MANUFACTURER>,  serialnumber: <SYSTEM_SERIALNUMBER> },
   *            cpu: { model: <CPU_MODEL>, manufacturer: <CPU_MANUFACTURER>, type: <CPU_TYPE>, frequency: <CPU_FREQUENCY>, cores: <CPU_CORES> },
   *            ram: [{ model: <RAM_MODEL>, manufacturer: <RAM_MANUFACTURER>, type: <RAM_TYPE>,  capacity: <RAM_CAPACITY>, unit: <RAM_UNIT> }, ...],
   *            storage: {},
   *            network: { mac: <MAC_ADDRESS>, ip: <IP_ADDRESS> }
   *         }
   */
  async updateClient (credentials, client) {
    return { error: 'NOT_IMPLEMENTED_EXCEPTION', message: 'The provided backend does not have an updateClient method' }
  }

  async uploadFiles (credentials, externalId, files) {
    return { error: 'NOT_IMPLEMENTED_EXCEPTION', message: 'The provided backend does not have an uploadFiles method' }
  }

  async getFileList (credentials, externalId) {
    return { error: 'NOT_IMPLEMENTED_EXCEPTION', message: 'The provided backend does not have an getFileList method' }
  }
  async getFile (credentials, externalId, filename) {
    return { error: 'NOT_IMPLEMENTED_EXCEPTION', message: 'The provided backend does not have an getFile method' }
  }
  async checkDomain (credentials) {
    return { error: 'NOT_IMPLEMENTED_EXCEPTION', message: 'The provided backend does not have a checkDomain method' }
  }
  async checkIp (credentials, ipv4) {
    return { error: 'NOT_IMPLEMENTED_EXCEPTION', message: 'The provided backend does not have a checkIp method' }
  }
  async setIp (credentials, ipv4, mac) {
    return { error: 'NOT_IMPLEMENTED_EXCEPTION', message: 'The provided backend does not have a setIp method' }
  }
  /*
   * Only one dhcp backend should be configures or it causes problems in the registration.
   */
  isDhcp () {
    return false
  }
}

module.exports = ExternalBackends