const childProcess = require('child_process'); const express = require('express'); const bodyParser = require('body-parser'); const config = require('komodo-sdk/config'); const smstoolsConfig = require('../../smstools-config'); const smstoolsConfigCreator = require('../../smstools-config/creator'); const smstoolsConfigSetter = require('../../smstools-config/setter'); const smstoolsConfigData = require('../../smstools-config/config-file'); const router = express.Router(); module.exports = router; function pageIndex(req, res) { const configString = smstoolsConfigCreator(); res.json({ dirty: smstoolsConfig.config.dirty, config: smstoolsConfig.config, configStringLength: configString.length, configStringNrLines: (configString.match(/\n/g) || []).length, configString, }); } function pageGenerate(req, res) { res.end(smstoolsConfigCreator()); } async function pageModemList(req, res) { const modems = []; // eslint-disable-next-line no-restricted-syntax for (const [key, value] of Object.entries(smstoolsConfigData.modems || {})) { modems.push({ label: `${key}: ${value.device}, INCOMING${value.outgoing ? ' and OUTGOING' : ''}`, value: key, data: value, }); } res.json(modems); } async function pageSet(req, res) { const keyword = (req.params.keyword || req.query.keyword || '').trim(); const value = (req.query.value || '').trim(); if (!keyword) { res.end('Invalid keyword'); return; } const result = await smstoolsConfigSetter.set(keyword, value); res.json({ dirty: !!smstoolsConfigData.dirty, result, }); } async function pageModemSet(req, res) { if (!req.body) { res.json({ status: 'NOT OK', message: 'Empty body', }); return; } const modemName = (req.params.modemName || '').trim(); if (!modemName) { res.json({ status: 'NOT OK', message: 'Invalid modem name', }); return; } const result = await smstoolsConfigSetter.setModem(modemName, req.body); res.json({ dirty: !!smstoolsConfigData.dirty, result, }); } async function pageModemDelete(req, res) { const modemName = (req.params.modemName || '').trim(); if (!modemName) { res.json({ status: 'NOT OK', message: 'Invalid modem name', }); return; } const result = await smstoolsConfigSetter.delModem(modemName); res.json({ dirty: !!smstoolsConfigData.dirty, result, }); } function pageInstallConfig(req, res) { const fileToExec = `${process.cwd()}/bin/smstools-config-install`; childProcess.execFile(fileToExec, [config.smstools_config_file], (err, stdout, stderr) => { res.json({ err, stdout, stderr, }); }); } router.get('/', pageIndex); router.get('/generate', pageGenerate); router.get('/modems', pageModemList); router.get('/set/:keyword', pageSet); router.post('/modem/set/:modemName', bodyParser.json({ type: '*/json' }), pageModemSet); router.get('/modem/delete/:modemName', pageModemDelete); router.get('/install-config', pageInstallConfig);