smstools-config.js 3.24 KB
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);