From f3a9478c6f1b48c8a81e1aed77b7faa682361ac4 Mon Sep 17 00:00:00 2001 From: Bill Church Date: Tue, 18 May 2021 12:50:15 +0000 Subject: [PATCH] chore: split config from app/server/app.js #242 --- app/server/app.js | 114 ++++--------------------------------------- app/server/config.js | 101 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 111 insertions(+), 104 deletions(-) create mode 100644 app/server/config.js diff --git a/app/server/app.js b/app/server/app.js index 20efc4e1..54b4b123 100644 --- a/app/server/app.js +++ b/app/server/app.js @@ -3,125 +3,31 @@ no-console: ["error", { allow: ["warn", "error"] }] */ // app.js +// eslint-disable-next-line import/order +const config = require('./config'); const path = require('path'); -const fs = require('fs'); const nodeRoot = path.dirname(require.main.filename); -const configPath = path.join(nodeRoot, 'config.json'); const publicPath = path.join(nodeRoot, 'client', 'public'); const express = require('express'); const logger = require('morgan'); -// sane defaults if config.json or parts are missing -let config = { - listen: { - ip: '0.0.0.0', - port: 2222, - }, - http: { - origins: ['localhost:2222'], - }, - user: { - name: null, - password: null, - privatekey: null, - }, - ssh: { - host: null, - port: 22, - term: 'xterm-color', - readyTimeout: 20000, - keepaliveInterval: 120000, - keepaliveCountMax: 10, - allowedSubnets: [], - }, - terminal: { - cursorBlink: true, - scrollback: 10000, - tabStopWidth: 8, - bellStyle: 'sound', - }, - header: { - text: null, - background: 'green', - }, - session: { - name: 'WebSSH2', - secret: 'mysecret', - }, - options: { - challengeButton: true, - allowreauth: true, - }, - algorithms: { - kex: [ - 'ecdh-sha2-nistp256', - 'ecdh-sha2-nistp384', - 'ecdh-sha2-nistp521', - 'diffie-hellman-group-exchange-sha256', - 'diffie-hellman-group14-sha1', - ], - cipher: [ - 'aes128-ctr', - 'aes192-ctr', - 'aes256-ctr', - 'aes128-gcm', - 'aes128-gcm@openssh.com', - 'aes256-gcm', - 'aes256-gcm@openssh.com', - 'aes256-cbc', - ], - hmac: ['hmac-sha2-256', 'hmac-sha2-512', 'hmac-sha1'], - compress: ['none', 'zlib@openssh.com', 'zlib'], - }, - serverlog: { - client: false, - server: false, - }, - accesslog: false, - verify: false, - safeShutdownDuration: 300, -}; - -// test if config.json exists, if not provide error message but try to run -// anyway -try { - if (fs.existsSync(configPath)) { - // eslint-disable-next-line no-console - console.log(`webssh2 service reading config from: ${configPath}`); - config = require('read-config-ng')(configPath) // eslint-disable-line - } else { - console.error( - `\n\nERROR: Missing config.json for webssh. Current config: ${JSON.stringify(config)}` - ); - console.error('\n See config.json.sample for details\n\n'); - } -} catch (err) { - console.error( - `\n\nERROR: Missing config.json for webssh. Current config: ${JSON.stringify(config)}` - ); - console.error('\n See config.json.sample for details\n\n'); - console.error(`ERROR:\n\n ${err}`); -} - -const session = require('express-session')({ - secret: config.session.secret, - name: config.session.name, - resave: true, - saveUninitialized: false, - unset: 'destroy', -}); - const app = express(); const server = require('http').Server(app); - const validator = require('validator'); +const favicon = require('serve-favicon'); const io = require('socket.io')(server, { serveClient: false, path: '/ssh/socket.io', origins: config.http.origins, }); -const favicon = require('serve-favicon'); +const session = require('express-session')({ + secret: config.session.secret, + name: config.session.name, + resave: true, + saveUninitialized: false, + unset: 'destroy', +}); const appSocket = require('./socket'); const expressOptions = require('./expressOptions'); const myutil = require('./util'); diff --git a/app/server/config.js b/app/server/config.js new file mode 100644 index 00000000..912b06be --- /dev/null +++ b/app/server/config.js @@ -0,0 +1,101 @@ +/* eslint no-unused-expressions: ["error", { "allowShortCircuit": true, "allowTernary": true }], + no-console: ["error", { allow: ["warn", "error"] }] */ +const fs = require('fs'); +const path = require('path'); + +const nodeRoot = path.dirname(require.main.filename); +const configPath = path.join(nodeRoot, 'config.json'); + +// sane defaults if config.json or parts are missing +let config = { + listen: { + ip: '0.0.0.0', + port: 2222, + }, + http: { + origins: ['localhost:2222'], + }, + user: { + name: null, + password: null, + privatekey: null, + }, + ssh: { + host: null, + port: 22, + term: 'xterm-color', + readyTimeout: 20000, + keepaliveInterval: 120000, + keepaliveCountMax: 10, + allowedSubnets: [], + }, + terminal: { + cursorBlink: true, + scrollback: 10000, + tabStopWidth: 8, + bellStyle: 'sound', + }, + header: { + text: null, + background: 'green', + }, + session: { + name: 'WebSSH2', + secret: 'mysecret', + }, + options: { + challengeButton: true, + allowreauth: true, + }, + algorithms: { + kex: [ + 'ecdh-sha2-nistp256', + 'ecdh-sha2-nistp384', + 'ecdh-sha2-nistp521', + 'diffie-hellman-group-exchange-sha256', + 'diffie-hellman-group14-sha1', + ], + cipher: [ + 'aes128-ctr', + 'aes192-ctr', + 'aes256-ctr', + 'aes128-gcm', + 'aes128-gcm@openssh.com', + 'aes256-gcm', + 'aes256-gcm@openssh.com', + 'aes256-cbc', + ], + hmac: ['hmac-sha2-256', 'hmac-sha2-512', 'hmac-sha1'], + compress: ['none', 'zlib@openssh.com', 'zlib'], + }, + serverlog: { + client: false, + server: false, + }, + accesslog: false, + verify: false, + safeShutdownDuration: 300, +}; + +// test if config.json exists, if not provide error message but try to run anyway +try { + if (fs.existsSync(configPath)) { + // eslint-disable-next-line no-console + console.info(`WebSSH2 service reading config from: ${configPath}`); + // eslint-disable-next-line global-require + config = require('read-config-ng')(configPath); + } else { + console.error( + `\n\nERROR: Missing config.json for webssh. Current config: ${JSON.stringify(config)}` + ); + console.error('\n See config.json.sample for details\n\n'); + } +} catch (err) { + console.error( + `\n\nERROR: Missing config.json for webssh. Current config: ${JSON.stringify(config)}` + ); + console.error('\n See config.json.sample for details\n\n'); + console.error(`ERROR:\n\n ${err}`); +} + +module.exports = config;