From 02ef7c55e9b7b0a746f6bb8b7d991d2f95600359 Mon Sep 17 00:00:00 2001 From: Baptiste Lemoine <contact@cipherbliss.com> Date: Sun, 5 Apr 2020 15:39:50 +0200 Subject: [PATCH] :book: doc readme --- README.md | 7 ++- index.js | 160 ++++++++++++++++++++++++++------------------------- package.json | 1 + 3 files changed, 89 insertions(+), 79 deletions(-) diff --git a/README.md b/README.md index f83adc5..d247a6b 100644 --- a/README.md +++ b/README.md @@ -8,9 +8,10 @@ Duniter graphical interface. This is a developement package which is embedded in > Requires [Yarn](https://classic.yarnpkg.com/en/docs/install/) ```bash +npm i -g nvm yarn nvm install 9 nvm use 9 -yarn +yarn --pure-lockfile ``` ## Run @@ -18,3 +19,7 @@ yarn ```bash node run.js direct_webstart ``` +or +```bash +node_modules/brunch/bin/brunch watch --server +``` diff --git a/index.js b/index.js index faed8ca..d9a9e8b 100644 --- a/index.js +++ b/index.js @@ -1,12 +1,12 @@ -"use strict"; +'use strict'; -const _ = require('underscore') +const _ = require('underscore'); const co = require('co'); const fs = require('fs'); const bodyParser = require('body-parser'); -const http = require('http'); +const http = require('http'); const express = require('express'); -const path = require('path'); +const path = require('path'); const cors = require('cors'); const fileUpload = require('express-fileupload'); const webminController = require('./server/controller/webmin.js'); @@ -23,34 +23,34 @@ module.exports = { // Webmin options { value: '--webmhost <host>', desc: 'Local network interface to connect to (IP)' }, - { value: '--webmport <port>', desc: 'Local network port to connect', parser: parseInt } + { value: '--webmport <port>', desc: 'Local network port to connect', parser: parseInt }, ], cli: [{ - name: 'webstart', - desc: 'Starts Duniter as a daemon (background task).', - logs: false, - onConfiguredExecute: (server, conf, program, params) => co(function*() { - yield server.checkConfig() - const daemon = server.getDaemon('direct_webstart', 'webstart') - yield startDaemon(program, daemon) - }) + name : 'webstart', + desc : 'Starts Duniter as a daemon (background task).', + logs : false, + onConfiguredExecute: (server, conf, program, params) => co(function* () { + yield server.checkConfig(); + const daemon = server.getDaemon('direct_webstart', 'webstart'); + yield startDaemon(program, daemon); + }), }, { - name: 'webrestart', - desc: 'Stops Duniter daemon and restart it with its web interface.', - logs: false, - onConfiguredExecute: (server, conf, program, params) => co(function*() { - yield server.checkConfig() - const daemon = server.getDaemon('direct_webstart', 'webrestart') - yield stopDaemon(daemon) - yield startDaemon(program, daemon) - }) + name : 'webrestart', + desc : 'Stops Duniter daemon and restart it with its web interface.', + logs : false, + onConfiguredExecute: (server, conf, program, params) => co(function* () { + yield server.checkConfig(); + const daemon = server.getDaemon('direct_webstart', 'webrestart'); + yield stopDaemon(daemon); + yield startDaemon(program, daemon); + }), }, { - name: 'direct_webstart', - desc: 'Do a webstart', - onDatabaseExecute: (server, conf, program, params, startServices, stopServices, stack) => co(function*(){ + name : 'direct_webstart', + desc : 'Do a webstart', + onDatabaseExecute: (server, conf, program, params, startServices, stopServices, stack) => co(function* () { try { @@ -73,35 +73,36 @@ module.exports = { app.use(fileUpload()); app.use(bodyParser.urlencoded({ - extended: true + extended: true, })); app.use(bodyParser.json()); const wbmin = webminController(server, startServices, stopServices, listDuniterPlugins, stack); const httpServer = http.createServer(app); httpServer.listen(PORT, HOTE); - server.logger.info("Web administration accessible at following address: http://%s:%s", HOTE, PORT); + server.logger.info('Web administration accessible at following address: http://%s:%s', HOTE, PORT); require('./server/lib/routes').webmin(wbmin, app); require('./server/lib/routes').webminWS(wbmin)(httpServer); - const uiDeps = listDuniterUIPlugins() + const uiDeps = listDuniterUIPlugins(); for (const dep of uiDeps) { // Eventual HTTP routing if (dep.required.duniterUI.route) { - const subApp = express() - dep.required.duniterUI.route(subApp, server, conf, program, params) - app.use('/modules/', subApp) + const subApp = express(); + dep.required.duniterUI.route(subApp, server, conf, program, params); + app.use('/modules/', subApp); } } - const currentBlock = yield server.dal.getCurrentBlockOrNull() + const currentBlock = yield server.dal.getCurrentBlockOrNull(); if (currentBlock) { - yield wbmin.startAllServices() + yield wbmin.startAllServices(); } // Never ending promise - return new Promise((resolve) => {}); + return new Promise((resolve) => { + }); /****************************************/ @@ -109,30 +110,30 @@ module.exports = { console.error(e); process.exit(1); } - }) - }] - } + }), + }], + }, }; function startDaemon(program, daemon) { - return co(function*() { + return co(function* () { - const PORT = program.webmport || 9220 + const PORT = program.webmport || 9221; const isPortAlreadyTaken = yield new Promise((resolve) => { - isPortTaken(PORT, (err, taken) => err ? reject(err) : resolve(taken)) - }) + isPortTaken(PORT, (err, taken) => err ? reject(err) : resolve(taken)); + }); if (isPortAlreadyTaken) { - console.error('Port ' + PORT + ' already used.') - process.exit(3) + console.error('Port ' + PORT + ' already used.'); + process.exit(3); } return new Promise((resolve, reject) => daemon.start((err) => { - if (err) return reject(err) - resolve() - })) - }) + if (err) return reject(err); + resolve(); + })); + }); } /** @@ -143,67 +144,70 @@ function startDaemon(program, daemon) { * @param fn */ function isPortTaken(port, fn) { - const net = require('net') + const net = require('net'); const tester = net.createServer() .once('error', function (err) { - if (err.code != 'EADDRINUSE') return fn(err) - fn(null, true) + if (err.code != 'EADDRINUSE') return fn(err); + fn(null, true); }) - .once('listening', function() { - tester.once('close', function() { fn(null, false) }) - .close() + .once('listening', function () { + tester.once('close', function () { + fn(null, false); + }) + .close(); }) - .listen(port) + .listen(port); } function stopDaemon(daemon) { return new Promise((resolve, reject) => daemon.stop((err) => { err && console.error(err); - if (err) return reject(err) - resolve() - })) + if (err) return reject(err); + resolve(); + })); } function listDuniterPlugins() { - return listPlugins(r => !!r.duniter || !!r.duniterUI) + return listPlugins(r => !!r.duniter || !!r.duniterUI); } function listDuniterUIPlugins() { - return listPlugins(r => !!r.duniterUI) + return listPlugins(r => !!r.duniterUI); } function listPlugins(conditionTest) { - const uiDependencies = [] - const pathToPackageJSON = path.resolve('./package.json') - const pkgJSON = JSON.parse(fs.readFileSync(pathToPackageJSON, 'utf8')) - const peerDeps = pkgJSON.peerDependencies || {} - const allDeps = _.extend(pkgJSON.dependencies || {}, pkgJSON.devDependencies || {}) - const deps = Object.keys(allDeps) + const uiDependencies = []; + const pathToPackageJSON = path.resolve('./package.json'); + const pkgJSON = JSON.parse(fs.readFileSync(pathToPackageJSON, 'utf8')); + const peerDeps = pkgJSON.peerDependencies || {}; + const allDeps = _.extend(pkgJSON.dependencies || {}, pkgJSON.devDependencies || {}); + const deps = Object.keys(allDeps); for (const dep of deps) { try { - const required = require(dep) + const required = require(dep); if (required && conditionTest(required)) { uiDependencies.push({ - name: dep, + name : dep, version: allDeps[dep], - locked: !!peerDeps[dep], - required - }) + locked : !!peerDeps[dep], + required, + }); } - } catch (e) {} + } catch (e) { + } } // Special: self dependency (if local package is also a module) if (pkgJSON.main && pkgJSON.main.match(/\.js/)) { // With NW.js, the main is an index.html file, which causes a bug - const dep = pkgJSON.name - const required = require(path.resolve('./' + pkgJSON.main)) + const dep = pkgJSON.name; + const required = require(path.resolve('./' + pkgJSON.main)); if (required && conditionTest(required)) { uiDependencies.push({ - name: dep, + name : dep, version: 'local', - locked: true, - required - }) + locked : true, + required, + }); } } - return uiDependencies + return uiDependencies; } diff --git a/package.json b/package.json index 9407d26..bec9b2f 100644 --- a/package.json +++ b/package.json @@ -7,6 +7,7 @@ "b": "brunch build", "watch": "brunch watch", "start": "cd cesium && npm start", + "webstart": "node run.js direct_webstart", "test": "mocha --growl tests/" }, "repository": { -- GitLab