diff --git a/lib/webadmin/index.js b/lib/webadmin/index.js index f6d3b0e..6536f54 100644 --- a/lib/webadmin/index.js +++ b/lib/webadmin/index.js @@ -10,6 +10,10 @@ const logger = require('komodo-sdk/logger'); const routerConfig = require('./router/config'); const app = express(); +app.use((req, res, next) => { + res.locals.main_config = config; + next(); +}); nunjucks.configure('./webadmin-views', { autoescape: true, @@ -33,6 +37,10 @@ const accessLogStream = rfs.createStream( app.use(morgan('combined', { stream: accessLogStream })); +app.get('/', (req, res) => { + res.redirect('/config/modem'); +}); + app.use('/config', routerConfig); const listenPort = (config.webadmin && config.webadmin.port) || 21923; diff --git a/lib/webadmin/router/config.js b/lib/webadmin/router/config.js index 2498550..1eaa1b0 100644 --- a/lib/webadmin/router/config.js +++ b/lib/webadmin/router/config.js @@ -1,19 +1,11 @@ const fs = require('fs'); const express = require('express'); - +const { orderBy } = require('natural-orderby'); const config = require('komodo-sdk/config'); const router = express.Router(); module.exports = router; -function composeNewModem(name, params) { - return { - name, - outgoing: (params && params.outgoing) || false, - prefix: (params && params.prefix) || [], - }; -} - async function writeConfigFile() { try { await fs.promises.writeFile('config.json', JSON.stringify(config, null, 4)); @@ -25,7 +17,7 @@ async function writeConfigFile() { function pageMain(req, res) { res.render('config.index.html', { config: JSON.stringify(config, null, 4), - modems: config.modems, + modems: orderBy(config.modems, [(v) => v.name], ['asc']), baseUrl: req.baseUrl, }); } @@ -87,7 +79,7 @@ async function modemAdd(req, res) { name: (req.body.name || '').trim(), imsi: (req.body.imsi || '').trim(), outgoing: !!req.body.outgoing, - prefix: (req.body.prefix || '').split(/[, ]+/).map((val) => val.trim()), + prefix: (req.body.prefix || '').split(/[, ]+/).map((val) => val.trim().replace(/^0/, '62')).filter((row) => row), }; const index = config.modems.find((item) => item.name.toUpperCase() === modem.name.toUpperCase()); if (index >= 0) { @@ -103,8 +95,7 @@ async function modemAdd(req, res) { async function modemAddPrefix(req, res) { const modemName = (req.body.name || '').trim(); - const prefix = (req.body.prefix || '').split(/[, ]+/).map((val) => val.trim()); - console.log(prefix); + const prefix = (req.body.prefix || '').split(/[, ]+/).map((val) => val.trim().replace(/^0/, '62')).filter((row) => row); const index = config.modems.findIndex( (item) => item.name.toUpperCase() === modemName.toUpperCase(), ); diff --git a/package-lock.json b/package-lock.json index 1ec7524..30692b3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3153,6 +3153,11 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, + "natural-orderby": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/natural-orderby/-/natural-orderby-2.0.3.tgz", + "integrity": "sha512-p7KTHxU0CUrcOXe62Zfrb5Z13nLvPhSWR/so3kFulUQU0sgUll2Z0LwpsLN351eOOD+hRGu/F1g+6xDfPeD++Q==" + }, "negotiator": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", diff --git a/package.json b/package.json index 0e65415..dd3e5ee 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,7 @@ "locks": "^0.2.2", "moment": "^2.24.0", "morgan": "^1.9.1", + "natural-orderby": "^2.0.3", "nunjucks": "^3.2.0", "rotating-file-stream": "^2.0.0", "uniqid": "^5.2.0" diff --git a/webadmin-views/config.index.html b/webadmin-views/config.index.html index dfba339..83f62cd 100644 --- a/webadmin-views/config.index.html +++ b/webadmin-views/config.index.html @@ -64,7 +64,7 @@ </dd> </dl> <dl class="row"> - <dt class="col-sm-3">Custom IP</dt> + <dt class="col-sm-3">Custom Sender</dt> <dd class="col-sm-9"> <br> <form method="post" action="{{ baseUrl }}/modem/update-custom-ip"> diff --git a/webadmin-views/template.starter.html b/webadmin-views/template.starter.html index 66096ee..7868a14 100644 --- a/webadmin-views/template.starter.html +++ b/webadmin-views/template.starter.html @@ -7,7 +7,7 @@ <meta name="description" content=""> <meta name="author" content="Mark Otto, Jacob Thornton, and Bootstrap contributors"> <meta name="generator" content="Jekyll v3.8.6"> - <title>Starter Template ยท Bootstrap</title> + <title>{{ main_config.name }}</title> <!-- Bootstrap core CSS --> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous"> @@ -44,7 +44,7 @@ </head> <body> <nav class="navbar navbar-expand-md navbar-dark bg-dark fixed-top"> - <a class="navbar-brand" href="#">Navbar</a> + <a class="navbar-brand" href="#">{{ main_config.name }}</a> <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarsExampleDefault" aria-controls="navbarsExampleDefault" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> @@ -54,25 +54,7 @@ <li class="nav-item active"> <a class="nav-link" href="#">Home <span class="sr-only">(current)</span></a> </li> - <li class="nav-item"> - <a class="nav-link" href="#">Link</a> - </li> - <li class="nav-item"> - <a class="nav-link disabled" href="#" tabindex="-1" aria-disabled="true">Disabled</a> - </li> - <li class="nav-item dropdown"> - <a class="nav-link dropdown-toggle" href="#" id="dropdown01" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Dropdown</a> - <div class="dropdown-menu" aria-labelledby="dropdown01"> - <a class="dropdown-item" href="#">Action</a> - <a class="dropdown-item" href="#">Another action</a> - <a class="dropdown-item" href="#">Something else here</a> - </div> - </li> </ul> - <form class="form-inline my-2 my-lg-0"> - <input class="form-control mr-sm-2" type="text" placeholder="Search" aria-label="Search"> - <button class="btn btn-secondary my-2 my-sm-0" type="submit">Search</button> - </form> </div> </nav>