From 87b2a4ff0b71125d701939e920d7938065803d7b Mon Sep 17 00:00:00 2001 From: Jannik Schönartz Date: Thu, 7 May 2020 21:11:04 +0200 Subject: [server/external-backends] Add timeout to infoblox, skip not connected backends in getDhcp and add better check forthe iDoIT response --- server/lib/external-backends/backendhelper.js | 7 ++++++- .../external-backends/backends/idoit-backend.js | 4 +++- .../external-backends/backends/infoblox-backend.js | 23 ++++++++++++++++------ 3 files changed, 26 insertions(+), 8 deletions(-) diff --git a/server/lib/external-backends/backendhelper.js b/server/lib/external-backends/backendhelper.js index 485b5f6..27f746a 100644 --- a/server/lib/external-backends/backendhelper.js +++ b/server/lib/external-backends/backendhelper.js @@ -165,7 +165,12 @@ async function getDhcp () { const isDHCP = await instance.isDhcp(backend.credentials) if (isDHCP) { // Check weather the backend is active - const checkConnection = await instance.checkConnection(backend.credentials) + let checkConnection + try { + checkConnection = await instance.checkConnection(backend.credentials) + } catch (e) { + continue + } if (checkConnection.error) continue if (!dhcp) dhcp = { instance: instance, backend: backend } diff --git a/server/lib/external-backends/backends/idoit-backend.js b/server/lib/external-backends/backends/idoit-backend.js index c6e0ac7..713f17a 100644 --- a/server/lib/external-backends/backends/idoit-backend.js +++ b/server/lib/external-backends/backends/idoit-backend.js @@ -39,7 +39,9 @@ class IdoitBackend extends ExternalBackends { // Axios request const result = await this.axiosRequest(c.url, [body], headers) if (result.error) return { error: 'IDOIT_ERROR', message: result.message } - return true + // Check if it actually returned some legit idoit stuff and not just a valid response. + if (result.length === 1 && result[0].id === 'version_check') return true + else return { error: 'IDOIT_ERROR', message: 'The request returned an invalid response!' } } // Return the list of object types created in iDoIT. diff --git a/server/lib/external-backends/backends/infoblox-backend.js b/server/lib/external-backends/backends/infoblox-backend.js index 0571841..71f0a4b 100644 --- a/server/lib/external-backends/backends/infoblox-backend.js +++ b/server/lib/external-backends/backends/infoblox-backend.js @@ -32,13 +32,24 @@ class InfobloxBackend extends ExternalBackends { ip: c.url, apiVersion: c.version }) - const response = await ipam.login(c.username, c.password) - if (response) { - return true - } else { - return { error: 'LOGIN_FAILED', message: 'Login failed' } - } + // Add custom timeout to the infoblox login + return await Promise.race([ + new Promise(async (resolve, reject) => { + try { + const result = await ipam.login(c.username, c.password) + if (!result) resolve({ error: 'LOGIN_FAILED', message: 'Login failed' }) + else resolve(result) + } catch (e) { + resolve({ error: 'LOGIN_FAILED', message: e }) + } + }), + new Promise((resolve, reject) => { + let wait = setTimeout(() => { + clearTimeout(wait) + resolve({ error: 'LOGIN_FAILED', message: 'Timeout' }) + }, 15000) + })]) } /* -- cgit v1.2.3-55-g7522