From 77d15a864546c2cb7df70fef6baa7e6b587e9b6f Mon Sep 17 00:00:00 2001 From: Eric Mastro Date: Thu, 7 Jun 2018 20:22:14 +1000 Subject: [PATCH] added webserver config setting for `enableCatchAll` that allows for all non-static routes to be captured and sent to index.html for react route processing. allowed backend tab to be accessible from `/embark`, `/backend`, and `/admin` added contracts apis to support intended functionality in the backend tab starting webserver service with plugins passed in to get api registrations added filesystem methods for reading directories removed duplicate method in plugin.js updated avatar for backend tab (did not exist in SCM) updated compiled contract properties for display (maybe they've changed) updated console command to get web3 host --- lib/core/config.js | 2 +- lib/core/fs.js | 12 +++- lib/core/plugin.js | 2 +- .../webserver/backend/assets/images/dade.jpg | Bin 0 -> 34542 bytes .../webserver/backend/contracts/view.html | 2 +- .../webserver/backend/contracts/view.js | 3 +- lib/modules/webserver/backend/index.html | 12 ++-- lib/modules/webserver/index.js | 3 +- lib/modules/webserver/server.js | 60 ++++++++---------- 9 files changed, 52 insertions(+), 44 deletions(-) create mode 100644 lib/modules/webserver/backend/assets/images/dade.jpg diff --git a/lib/core/config.js b/lib/core/config.js index c2f21d55..3aa06488 100644 --- a/lib/core/config.js +++ b/lib/core/config.js @@ -309,7 +309,7 @@ Config.prototype.loadCommunicationConfigFile = function() { Config.prototype.loadWebServerConfigFile = function() { var configObject = { - "enabled": true, "host": "localhost", "port": 8000 + "enabled": true, "host": "localhost", "port": 8000, "enableCatchAll": true }; let configFilePath = this._getFileOrOject(this.configDir, 'webserver', 'webserver'); diff --git a/lib/core/fs.js b/lib/core/fs.js index 4e2e2179..87757dc2 100644 --- a/lib/core/fs.js +++ b/lib/core/fs.js @@ -91,6 +91,14 @@ function tmpDir() { return utils.joinPath(os.tmpdir(), ...arguments); } +function readdirSync() { + return fs.readdirSync.apply(fs.readdirSync, arguments); +} + +function readdir() { + return fs.readdir.apply(fs.readdirSync, arguments); +} + module.exports = { mkdirpSync, mkdirp, @@ -111,5 +119,7 @@ module.exports = { embarkPath, dappPath, createWriteStream, - tmpDir + tmpDir, + readdirSync, + readdir }; diff --git a/lib/core/plugin.js b/lib/core/plugin.js index 86edefd6..9ea3df52 100644 --- a/lib/core/plugin.js +++ b/lib/core/plugin.js @@ -208,7 +208,7 @@ Plugin.prototype.registerActionForEvent = function(eventName, cb) { Plugin.prototype.registerAPICall = function(method, endpoint, cb) { console.dir("registerAPICall " + method + " " + endpoint); this.apiCalls.push({method: method, endpoint: endpoint, cb: cb}); - this.pluginTypes.push('apiCalls'); + this.addPluginType('apiCalls'); }; Plugin.prototype.runFilePipeline = function() { diff --git a/lib/modules/webserver/backend/assets/images/dade.jpg b/lib/modules/webserver/backend/assets/images/dade.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c41b21427e9f4a26abe64d0fc5d76239c7491b52 GIT binary patch literal 34542 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 2Z#(s)A>A?Wxz+aJKMG85lgTvQc6Qjtp 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 S>Vdi5OjDYD031K^pa0oJ2-E!l literal 0 HcmV?d00001 diff --git a/lib/modules/webserver/backend/contracts/view.html b/lib/modules/webserver/backend/contracts/view.html index 3b899f2a..ac8223fb 100644 --- a/lib/modules/webserver/backend/contracts/view.html +++ b/lib/modules/webserver/backend/contracts/view.html @@ -112,7 +112,7 @@