summaryrefslogtreecommitdiffstats
path: root/server/lib/external-backends/index.js
diff options
context:
space:
mode:
authorJannik Schönartz2018-08-06 03:04:54 +0200
committerJannik Schönartz2018-08-06 03:04:54 +0200
commit311a686f3672a00c8def9190c874d6f83a006e35 (patch)
tree29d05513d8c1e96dca50aae4445845177bbf5d3f /server/lib/external-backends/index.js
parent[webapp/searchtable] bugfix (diff)
downloadbas-311a686f3672a00c8def9190c874d6f83a006e35.tar.gz
bas-311a686f3672a00c8def9190c874d6f83a006e35.tar.xz
bas-311a686f3672a00c8def9190c874d6f83a006e35.zip
[server/external-backends] Implemented import Objects from iDoIT
renamed external-backends.js in index.js so its return when requireing the folder Added new tables for the external id mapping for clients / groups iDoIT method for importing Objects and adding them in the db with all neccessary constraints
Diffstat (limited to 'server/lib/external-backends/index.js')
-rw-r--r--server/lib/external-backends/index.js104
1 files changed, 104 insertions, 0 deletions
diff --git a/server/lib/external-backends/index.js b/server/lib/external-backends/index.js
new file mode 100644
index 0000000..c882522
--- /dev/null
+++ b/server/lib/external-backends/index.js
@@ -0,0 +1,104 @@
+/* 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 () {
+ console.log('If this method gets called the backend class has NOT IMPLEMENTED the getCredentials method!')
+ return null
+ }
+
+ /*
+ * 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 []
+ }
+
+ /*
+ * credendtials: <BACKEND_CREDENTIALS>
+ *
+ * Returns a list of all objects in the backend.
+ */
+ async getObjects (credendtials) {
+ return { status: 'NOT_IMPLEMENTED_EXCEPTION', error: '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 { status: 'NOT_IMPLEMENTED_EXCEPTION', error: 'The provided backend does not have a getObject 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>, }, ...]}, ...]
+ */
+ getDataTree (credendtials, objects) {
+ return { status: 'NOT_IMPLEMENTED_EXCEPTION', error: '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 { success: false, status: 'NOT_IMPLEMENTED_EXCEPTION', error: '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 []
+ }
+}
+
+module.exports = ExternalBackends