summaryrefslogtreecommitdiffstats
path: root/server
diff options
context:
space:
mode:
authorJannik Schönartz2018-07-17 00:22:55 +0200
committerJannik Schönartz2018-07-17 00:22:55 +0200
commite1d4375f741e5c67e0304c7fda36eda41df4b4c1 (patch)
treeff13e78bf7ae322923b2b6c4f371d41f7655752a /server
parent[server/ipxe] Building ipxe with external configs. (diff)
downloadbas-e1d4375f741e5c67e0304c7fda36eda41df4b4c1.tar.gz
bas-e1d4375f741e5c67e0304c7fda36eda41df4b4c1.tar.xz
bas-e1d4375f741e5c67e0304c7fda36eda41df4b4c1.zip
[external-backends] Added API and Frontend module external-backends.
Diffstat (limited to 'server')
-rw-r--r--server/api/backends.js75
-rw-r--r--server/lib/external-backends/backends/another-backend.js9
-rw-r--r--server/lib/external-backends/backends/dummy-backend.js9
-rw-r--r--server/lib/external-backends/backends/template-backend.js9
-rw-r--r--server/lib/external-backends/external-backends.js30
-rw-r--r--server/migrations/20180715193710-create-backend.js25
-rw-r--r--server/models/backend.js20
-rw-r--r--server/router.js13
8 files changed, 190 insertions, 0 deletions
diff --git a/server/api/backends.js b/server/api/backends.js
new file mode 100644
index 0000000..e3e6014
--- /dev/null
+++ b/server/api/backends.js
@@ -0,0 +1,75 @@
+/* global __appdir */
+const path = require('path');
+const ExternalBackends = require(path.join(__appdir, 'lib', 'external-backends', 'external-backends.js'));
+var db = require(path.join(__appdir, 'lib', 'sequelize'));
+
+module.exports = {
+ getCredentialsByType: function(req, res) {
+ const backendType = req.query.type;
+ const b = new ExternalBackends();
+ const instance = b.getInstance(backendType);
+ res.status(200).send(instance.getCredentials());
+ },
+
+ getBackendInfoById: function(req, res) {
+ // TODO: Test (Not used for now) needed for edit // TODO: // TODO:
+ const backendId = req.query.id;
+ db.backend.findOne({ where: { id: backendId } }).then(backend => {
+ const b = {
+ backendId: backendId,
+ backendName: backend.name,
+ backendType: backend.type,
+ backendCredentials: backend.credentials
+ }
+ res.status(200).send(b);
+ });
+ },
+
+ getBackendTypes: function(req, res) {
+
+ const backends = new ExternalBackends();
+ var files = backends.getBackends();
+
+ for (var i = 0; i < files.length; i++) {
+
+ // Cut off -backends.js
+ files[i] = files[i].slice(0, -11);
+ }
+
+ res.status(200).send(files);
+ },
+
+ getBackendList: function(req, res) {
+ db.backend.findAll({
+ attributes: ['id', 'name', 'type']
+ }).then(function (backends) {
+ res.status(200).send(backends);
+ });
+ },
+
+ // POST REQUESTS
+ saveBackend: function(req, res) {
+ // Save credentials in the db.
+ const formData = req.body;
+ const credentialString = JSON.stringify(formData.backendCredentials);
+
+ if (formData.backendId == 0) {
+ // Insert new backend in the db.
+ db.backend.create({ name: formData.backendName, type: formData.backendType, credentials: credentialString });
+ } else {
+ // Update an existing backend in the db.
+ db.backend.update({ name: formData.backendName, type: formData.backendType, credentials: credentialString }, {where: {id: formData.backendId} });
+ }
+ //db.backend.findOne({})
+
+ res.status(200).send('success');
+ },
+
+ deleteBackendById: function(req, res) {
+ const backendId = req.body.id;
+
+ db.backend.destroy({ where: { id: backendId } }).then(function() {
+ res.status(200).send('success');
+ });
+ }
+}
diff --git a/server/lib/external-backends/backends/another-backend.js b/server/lib/external-backends/backends/another-backend.js
new file mode 100644
index 0000000..9458e1e
--- /dev/null
+++ b/server/lib/external-backends/backends/another-backend.js
@@ -0,0 +1,9 @@
+var ExternalBackends = require('../external-backends.js');
+
+class AnotherBackend extends ExternalBackends {
+ getCredentials() {
+ return [{ type: "text", name: "text 1" }, { type: "text", name: "text 2" }, { type: "password", name: "password 1", show: false}, { type: "password", name: "password 2", show: true}, { type: "password", name: "password 3", show: false}];
+ }
+}
+
+module.exports = AnotherBackend; \ No newline at end of file
diff --git a/server/lib/external-backends/backends/dummy-backend.js b/server/lib/external-backends/backends/dummy-backend.js
new file mode 100644
index 0000000..205eeb1
--- /dev/null
+++ b/server/lib/external-backends/backends/dummy-backend.js
@@ -0,0 +1,9 @@
+var ExternalBackends = require('../external-backends.js');
+
+class DummyBackend extends ExternalBackends {
+ getCredentials() {
+ return [{ type: "switch", name: "switch 1", value: false }, { type: "switch", name: "switch 2", value: false }, { type: "switch", name: "switch 3", value: true }, { type: "select", name: "selection 1", items: ["wasd", "asdf", "qwertz"] }, { type: "select", name: "selection 2", items: ["1", "2", "3"] }];
+ }
+}
+
+module.exports = DummyBackend; \ No newline at end of file
diff --git a/server/lib/external-backends/backends/template-backend.js b/server/lib/external-backends/backends/template-backend.js
new file mode 100644
index 0000000..3271447
--- /dev/null
+++ b/server/lib/external-backends/backends/template-backend.js
@@ -0,0 +1,9 @@
+var ExternalBackends = require('../external-backends.js');
+
+class TemplateBackend extends ExternalBackends {
+ getCredentials() {
+ return [{ type: "text", name: "text test" }, { type: "password", name: "password test", show: true}, { type: "password", name: "password test nr2", show: false}, { type: "switch", name: "bool test", value: false }, { type: "select", name: "selection test", items: ["wasd", "asdf", "qwertz"] }];
+ }
+}
+
+module.exports = TemplateBackend; \ No newline at end of file
diff --git a/server/lib/external-backends/external-backends.js b/server/lib/external-backends/external-backends.js
new file mode 100644
index 0000000..5ab2adf
--- /dev/null
+++ b/server/lib/external-backends/external-backends.js
@@ -0,0 +1,30 @@
+/* global __appdir */
+const fs = require('fs');
+const path = require('path');
+
+class ExternalBackends {
+ getBackends() {
+ var files = fs.readdirSync(path.join(__appdir, 'lib', 'external-backends', 'backends'));
+ return files;
+ }
+
+ getCredentials() {
+ return "If this method gets called the backend class has NOT IMPLEMENTED the getCredentials method!";
+ }
+
+ 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;
+ }
+}
+
+module.exports = ExternalBackends;
diff --git a/server/migrations/20180715193710-create-backend.js b/server/migrations/20180715193710-create-backend.js
new file mode 100644
index 0000000..3b1a730
--- /dev/null
+++ b/server/migrations/20180715193710-create-backend.js
@@ -0,0 +1,25 @@
+'use strict';
+module.exports = {
+ up: (queryInterface, Sequelize) => {
+ return queryInterface.createTable('backends', {
+ id: {
+ allowNull: false,
+ autoIncrement: true,
+ primaryKey: true,
+ type: Sequelize.INTEGER
+ },
+ name: {
+ type: Sequelize.STRING
+ },
+ type: {
+ type: Sequelize.STRING
+ },
+ credentials: {
+ type: Sequelize.STRING(2048)
+ }
+ });
+ },
+ down: (queryInterface, Sequelize) => {
+ return queryInterface.dropTable('backends');
+ }
+}; \ No newline at end of file
diff --git a/server/models/backend.js b/server/models/backend.js
new file mode 100644
index 0000000..b8b0313
--- /dev/null
+++ b/server/models/backend.js
@@ -0,0 +1,20 @@
+'use strict';
+module.exports = (sequelize, DataTypes) => {
+ var backend = sequelize.define('backend', {
+ id: {
+ allowNull: false,
+ autoIncrement: true,
+ primaryKey: true,
+ type: DataTypes.INTEGER
+ },
+ name: DataTypes.STRING,
+ type: DataTypes.STRING,
+ credentials: DataTypes.STRING(2048)
+ }, {
+ timestamps: false
+ });
+ backend.associate = function(models) {
+ // associations can be defined here
+ };
+ return backend;
+}; \ No newline at end of file
diff --git a/server/router.js b/server/router.js
index 6ae1316..263abed 100644
--- a/server/router.js
+++ b/server/router.js
@@ -37,4 +37,17 @@ router.get('/shell/buildipxe', shell.buildIPXE);
var nodemailer = require(path.join(__dirname, 'lib', 'nodemailer'));
router.get('/mail/send', nodemailer.sendMail);
+// External backends API
+var backends = require(path.join(__dirname, 'api', 'backends'));
+router.get('/backends/getCredentialsByType', auth.verifyToken, backends.getCredentialsByType);
+router.get('/backends/getBackendInfoById', auth.verifyToken, backends.getBackendInfoById);
+router.get('/backends/getBackendList', auth.verifyToken, backends.getBackendList);
+router.get('/backends/getBackendTypes', backends.getBackendTypes);
+router.post('/backends/saveBackend', auth.verifyToken, backends.saveBackend);
+router.post('/backends/deleteBackendById', auth.verifyToken, backends.deleteBackendById)
+
+// Load ipxe scipts API
+var ipxeloader = require(path.join(__dirname, 'api', 'ipxe-loader'));
+router.get('/ipxe-loader/load-script', ipxeloader.loadScript);
+
module.exports = router; \ No newline at end of file