const fs = require('fs'); const logger = require('komodo-sdk/logger'); const smstoolsConfigData = require('./config-file'); const creator = require('./creator'); async function writeConfig() { const data = smstoolsConfigData; data.ts = new Date(); const configFilename = 'config.smstools.json'; try { await fs.promises.writeFile(configFilename, JSON.stringify(data || {}, 0, 4)); } catch (e) { logger.warn('SMSTOOLS-CONFIG/setter: Exception on writeConfig', { filename: configFilename, e }); return e; } const newSmsdConfFilename = 'smsd.conf.tmp'; const newSmsdConf = await creator(); try { await fs.promises.writeFile(newSmsdConfFilename, newSmsdConf); } catch (e) { logger.warn('SMSTOOLS-CONFIG/setter: Exception on writeConfig', { filename: newSmsdConfFilename, e }); return e; } return null; } exports.set = async (keyword, value) => { if (!keyword) return smstoolsConfigData; smstoolsConfigData[keyword] = value; smstoolsConfigData.dirty = true; await writeConfig(); return smstoolsConfigData; }; function getModemByDevice(device) { let modemName = null; if (!device) return modemName; // eslint-disable-next-line no-restricted-syntax for (const [key, value] of Object.entries(smstoolsConfigData.modems || {})) { if (value.device === device) { modemName = key; } } return modemName; } exports.setModem = async (modemName, data) => { if (!modemName) return smstoolsConfigData; if (data.device) { const modemWithSameDevice = getModemByDevice(data.device); if (modemWithSameDevice && modemWithSameDevice !== modemName) { return smstoolsConfigData; } } if (!smstoolsConfigData.modems) { smstoolsConfigData.modems = {}; } if (!smstoolsConfigData.modems[modemName]) { smstoolsConfigData.modems[modemName] = {}; } smstoolsConfigData.modems[modemName] = data; smstoolsConfigData.dirty = true; await writeConfig(); return smstoolsConfigData; }; exports.delModem = async (modemName) => { if (!modemName) return smstoolsConfigData; if (!smstoolsConfigData.modems) { return smstoolsConfigData; } if (!smstoolsConfigData.modems[modemName]) { return smstoolsConfigData; } delete smstoolsConfigData.modems[modemName]; smstoolsConfigData.dirty = true; await writeConfig(); return smstoolsConfigData; };