summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJannik Schönartz2020-05-07 21:11:04 +0200
committerJannik Schönartz2020-05-07 21:11:04 +0200
commit87b2a4ff0b71125d701939e920d7938065803d7b (patch)
tree40a9b0e32165a6ceaae8625b5a2649ba126e66bf
parent[server] Load DFN certificates | npm install required (diff)
downloadbas-87b2a4ff0b71125d701939e920d7938065803d7b.tar.gz
bas-87b2a4ff0b71125d701939e920d7938065803d7b.tar.xz
bas-87b2a4ff0b71125d701939e920d7938065803d7b.zip
[server/external-backends] Add timeout to infoblox, skip not connected backends in getDhcp and add better check forthe iDoIT response
-rw-r--r--server/lib/external-backends/backendhelper.js7
-rw-r--r--server/lib/external-backends/backends/idoit-backend.js4
-rw-r--r--server/lib/external-backends/backends/infoblox-backend.js23
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)
+ })])
}
/*