summaryrefslogtreecommitdiffstats
path: root/server
diff options
context:
space:
mode:
authorJannik Schönartz2018-07-30 02:29:03 +0200
committerJannik Schönartz2018-07-30 02:29:03 +0200
commit22b7a70e38c4a879fe025d87bd43f1fdea4a3283 (patch)
treecdf7389c28e04227dcdab2ed22269aab61ea5727 /server
parent[server/router] api calls are now dynamicly routed to the corresponding api m... (diff)
downloadbas-22b7a70e38c4a879fe025d87bd43f1fdea4a3283.tar.gz
bas-22b7a70e38c4a879fe025d87bd43f1fdea4a3283.tar.xz
bas-22b7a70e38c4a879fe025d87bd43f1fdea4a3283.zip
[server/external-backends] Implemented checkConnection of iDoIT. Simple auth call is made with error handling.
Diffstat (limited to 'server')
-rw-r--r--server/.eslintrc.js3
-rw-r--r--server/.gitignore3
-rw-r--r--server/api/backends.js12
-rw-r--r--server/lib/external-backends/backends/another-backend.js2
-rw-r--r--server/lib/external-backends/backends/dummy-backend.js2
-rw-r--r--server/lib/external-backends/backends/idoit-backend.js59
-rw-r--r--server/lib/external-backends/backends/template-backend.js2
-rw-r--r--server/lib/external-backends/external-backends.js2
-rw-r--r--server/package-lock.json22
-rw-r--r--server/package.json1
10 files changed, 92 insertions, 16 deletions
diff --git a/server/.eslintrc.js b/server/.eslintrc.js
new file mode 100644
index 0000000..b6351b0
--- /dev/null
+++ b/server/.eslintrc.js
@@ -0,0 +1,3 @@
+module.exports = {
+ "extends": "standard"
+};
diff --git a/server/.gitignore b/server/.gitignore
index 251d1ad..3e9d832 100644
--- a/server/.gitignore
+++ b/server/.gitignore
@@ -19,5 +19,4 @@ yarn-error.log*
*.suo
*.ntvs*
*.njsproj
-*.sln
-*.eslintrc.js
+*.sln \ No newline at end of file
diff --git a/server/api/backends.js b/server/api/backends.js
index a5d1233..3b9551e 100644
--- a/server/api/backends.js
+++ b/server/api/backends.js
@@ -51,14 +51,14 @@ module.exports = {
const backendId = req.query.id
db.backend.findOne({ where: { id: backendId } }).then(backend => {
const bCredentials = {
- backendId: backendId,
- backendName: backend.name,
- backendType: backend.type,
- backendCredentials: backend.credentials
+ id: backendId,
+ name: backend.name,
+ type: backend.type,
+ credentials: backend.credentials
}
const b = new ExternalBackends()
- const instance = b.getInstance(bCredentials.backendType)
- instance.checkConnection().then(connection => {
+ const instance = b.getInstance(bCredentials.type)
+ instance.checkConnection(bCredentials).then(connection => {
res.status(200).send({ success: connection.success, msg: connection.msg })
})
})
diff --git a/server/lib/external-backends/backends/another-backend.js b/server/lib/external-backends/backends/another-backend.js
index 90b8f8b..8044f84 100644
--- a/server/lib/external-backends/backends/another-backend.js
+++ b/server/lib/external-backends/backends/another-backend.js
@@ -5,7 +5,7 @@ class AnotherBackend extends ExternalBackends {
return [{ type: 'text', id: 1, name: 'text 1' }, { type: 'text', id: 2, name: 'text 2' }, { type: 'password', id: 3, name: 'password 1', show: false }, { type: 'password', id: 4, name: 'password 2', show: true }, { type: 'password', id: 5, name: 'password 3', show: false }]
}
- async checkConnection () {
+ async checkConnection (backend) {
return { success: true }
}
}
diff --git a/server/lib/external-backends/backends/dummy-backend.js b/server/lib/external-backends/backends/dummy-backend.js
index 99d27c1..a1704e3 100644
--- a/server/lib/external-backends/backends/dummy-backend.js
+++ b/server/lib/external-backends/backends/dummy-backend.js
@@ -5,7 +5,7 @@ class DummyBackend extends ExternalBackends {
return [{ type: 'switch', id: 1, name: 'switch 1', value: false }, { type: 'switch', id: 2, name: 'switch 2', value: false }, { type: 'switch', id: 3, name: 'switch 3', value: true }, { type: 'select', id: 4, name: 'selection 1', items: ['wasd', 'asdf', 'qwertz'] }, { type: 'select', id: 5, name: 'selection 2', items: ['1', '2', '3'] }]
}
- async checkConnection () {
+ async checkConnection (backend) {
return { success: false, msg: 'This is a test where success was intentionally set to false!' }
}
}
diff --git a/server/lib/external-backends/backends/idoit-backend.js b/server/lib/external-backends/backends/idoit-backend.js
index 2520b07..d95618d 100644
--- a/server/lib/external-backends/backends/idoit-backend.js
+++ b/server/lib/external-backends/backends/idoit-backend.js
@@ -1,4 +1,5 @@
var ExternalBackends = require('../external-backends.js')
+var axios = require('axios')
class IdoitBackend extends ExternalBackends {
getCredentials () {
@@ -6,7 +7,8 @@ class IdoitBackend extends ExternalBackends {
return [
{ type: 'text', id: 1, name: 'API url', icon: 'link' },
{ type: 'password', id: 2, name: 'API token', icon: 'vpn_key', show: false },
- { type: 'switch',
+ {
+ type: 'switch',
id: 3,
name: 'Login',
icon: 'lock_open',
@@ -18,9 +20,58 @@ class IdoitBackend extends ExternalBackends {
]
}
- async checkConnection () {
- // Make a simple login and check if the connection works.
- return { success: false, msg: 'TODO: IMPLEMENT' }
+ async checkConnection (backend) {
+ const credentials = JSON.parse(backend.credentials)
+ const url = credentials.find(x => x.id === 1).value
+ const apiKey = credentials.find(x => x.id === 2).value
+
+ const body = {
+ 'version': '2.0',
+ 'method': 'idoit.login',
+ 'params': {
+ 'apikey': apiKey,
+ 'language': 'en'
+ },
+ 'id': 1
+ }
+
+ var config = {
+ timeout: 30000,
+ headers: {
+ 'Content-Type': 'application/json'
+ }
+ }
+
+ // Optional credentials
+ const login = credentials.find(x => x.id === 3)
+ if (login.value) {
+ config.headers['X-RPC-Auth-Username'] = login.elements.find(x => x.id === 4).value
+ config.headers['X-RPC-Auth-Password'] = login.elements.find(x => x.id === 5).value
+ }
+
+ // Make a login request and see if we are authenticated.
+ var response = await axios.post(url, body, config)
+ .then(response => {
+ return response
+ })
+ .catch(error => {
+ console.log(error)
+ return error.response ? error.response : { status: 900, statusText: 'Request failed timeout' }
+ })
+
+ // Axios error handling
+ if (response.status !== 200) {
+ return { success: false, error: response.status, msg: response.statusText }
+ }
+
+ // iDoIT error handling.
+ if (response.data.result) {
+ return { success: true }
+ } else if (response.data.error) {
+ return { success: false, error: response.data.error.message, msg: response.data.error.data.error }
+ } else {
+ return { success: false, msg: 'UNNOWN ERROR' }
+ }
}
}
diff --git a/server/lib/external-backends/backends/template-backend.js b/server/lib/external-backends/backends/template-backend.js
index ceab46a..3bf665a 100644
--- a/server/lib/external-backends/backends/template-backend.js
+++ b/server/lib/external-backends/backends/template-backend.js
@@ -5,7 +5,7 @@ class TemplateBackend extends ExternalBackends {
return [{ type: 'text', id: 1, name: 'text test', icon: 'bug_report' }, { type: 'password', id: 2, name: 'password test', show: true }, { type: 'password', id: 3, name: 'password test nr2', show: false }, { type: 'switch', id: 4, name: 'bool test', value: false }, { type: 'select', id: 5, name: 'selection test', items: ['wasd', 'asdf', 'qwertz'] }]
}
- async checkConnection () {
+ async checkConnection (backend) {
var result = await x()
console.log(result)
return result
diff --git a/server/lib/external-backends/external-backends.js b/server/lib/external-backends/external-backends.js
index a1264a0..7d306b3 100644
--- a/server/lib/external-backends/external-backends.js
+++ b/server/lib/external-backends/external-backends.js
@@ -27,7 +27,7 @@ class ExternalBackends {
return backend
}
- async checkConnection () {
+ async checkConnection (backend) {
console.log('If this method gets called the backend class has NOT IMPLEMENTED the checkConnection method!')
return null
}
diff --git a/server/package-lock.json b/server/package-lock.json
index 96ee9be..3af2294 100644
--- a/server/package-lock.json
+++ b/server/package-lock.json
@@ -129,6 +129,15 @@
"resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
"integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0="
},
+ "axios": {
+ "version": "0.18.0",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-0.18.0.tgz",
+ "integrity": "sha1-MtU+SFHv3AoRmTts0AB4nXDAUQI=",
+ "requires": {
+ "follow-redirects": "^1.3.0",
+ "is-buffer": "^1.1.5"
+ }
+ },
"babel-code-frame": {
"version": "6.26.0",
"resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
@@ -1125,6 +1134,14 @@
"write": "^0.2.1"
}
},
+ "follow-redirects": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.1.tgz",
+ "integrity": "sha512-v9GI1hpaqq1ZZR6pBD1+kI7O24PhDvNGNodjS3MdcEqyrahCp8zbtpv+2B/krUnSmUH80lbAS7MrdeK5IylgKg==",
+ "requires": {
+ "debug": "^3.1.0"
+ }
+ },
"foreach": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz",
@@ -1363,6 +1380,11 @@
"resolved": "https://registry.npmjs.org/is-bluebird/-/is-bluebird-1.0.2.tgz",
"integrity": "sha1-CWQ5Bg9KpBGr7hkUOoTWpVNG1uI="
},
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
+ },
"is-builtin-module": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
diff --git a/server/package.json b/server/package.json
index 247a12e..0ad1ccc 100644
--- a/server/package.json
+++ b/server/package.json
@@ -7,6 +7,7 @@
"start": "node ./bin/www"
},
"dependencies": {
+ "axios": "^0.18.0",
"compression": "^1.7.2",
"cookie-parser": "^1.4.3",
"debug": "^3.1.0",