const fs = require('fs'); const config = require('komodo-sdk/config'); const logger = require('komodo-sdk/logger'); const smstoolsConfig = require('./config-file'); const queuesBaseDir = config.smstools_queues_base_dir || '/var/spool/sms'; function composeQueueDir(queueName) { return `${queuesBaseDir}/${queueName}`; } async function createDirectory(dirname) { let isExists = true; try { await fs.promises.access(dirname); } catch (e) { isExists = false; } if (isExists) return; try { fs.promises.mkdir(dirname, { recursive: true, mode: 0o770 }); } catch (e) { logger.warn('QUEUES-AND-PROVIDERS: Exception on creating directory', { dirname, e: e.message || e.toString(), }); } } function queuesSorted(queuesArray) { const result = (queuesArray || smstoolsConfig.queues || []).sort((a, b) => { const orderA = (a && Number(a.order)) || 0; const orderB = (b && Number(b.order)) || 0; if (orderA < orderB) return -1; if (orderA > orderB) return 1; return 0; }); return result; } exports.dump = async (mkdirIfQueueDirNotExists) => { if (config.smstools_disable_queue) return ''; const queues = queuesSorted(); const queuesCount = queues.length; const configLines = ['[queues]']; const providerLines = ['[providers]']; const queuesDirs = []; let hasQueues = false; let hasProviders = false; for (let i = 0; i < queuesCount; i += 1) { const queue = queues[i]; // eslint-disable-next-line no-continue if (!queue.name || !queue.enabled) continue; const queueDir = composeQueueDir(queue.name); queuesDirs.push(queueDir); if (mkdirIfQueueDirNotExists) { // eslint-disable-next-line no-await-in-loop await createDirectory(queueDir); } const line = `${queue.name} = ${queueDir}`; configLines.push(line); hasQueues = true; const hasPrefix = queue.prefix && queue.prefix.length; if (hasPrefix) { const providerLine = `${queue.name} = ${queue.prefix.join(', ')}`; providerLines.push(providerLine); hasProviders = true; } else { logger.verbose(`QUEUES-AND-PROVIDERS: DEBUG: ${queue.name} does not have prefix`); } } if (!hasQueues) return ''; if (!hasProviders) { return configLines.join('\n'); } return `${configLines.join('\n')}\n\n${providerLines.join('\n')}`; }; exports.getModemQueueName = (modemName) => { const queues = queuesSorted().filter((queue) => { if (!queue.name || !queue.enabled) return false; return (queue.modems || []).indexOf(modemName) >= 0; }); return (queues || '').map((queue) => queue.name); }; exports.hasQueues = () => !!(smstoolsConfig.queues || []).filter((queue) => queue.enabled);