From 19e5530a185018d61d20cb29339dc5cdfb748980 Mon Sep 17 00:00:00 2001 From: Andris Reinman Date: Wed, 16 Nov 2016 15:59:20 +0200 Subject: [PATCH] Allow listening on selected interfaces --- services/verp-server.js | 32 +++++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/services/verp-server.js b/services/verp-server.js index e9e6c060..1870c949 100644 --- a/services/verp-server.js +++ b/services/verp-server.js @@ -101,15 +101,33 @@ let server = new SMTPServer({ server.on('error', err => { log.error('VERP', err.stack); + server.close(); }); module.exports = callback => { - if (config.verp.enabled) { - server.listen(config.verp.port, () => { - log.info('VERP', 'Server listening on port %s', config.verp.port); - setImmediate(callback); - }); - } else { - setImmediate(callback); + if (!config.verp.enabled) { + return setImmediate(callback); } + let hosts; + if (typeof config.verp.host === 'string' && config.verp.host) { + hosts = config.verp.host.trim().split(',').map(host => host.trim()).filter(host => host.trim()); + if (hosts.includes('*') || hosts.includes('all')) { + hosts = [false]; + } + } else { + hosts = [false]; + } + + let pos = 0; + let startNextHost = () => { + if (pos >= hosts.length) { + return setImmediate(callback); + } + server.listen(config.verp.port, () => { + log.info('VERP', 'Server listening on %s:%s', config.verp.host || '*', config.verp.port); + setImmediate(startNextHost); + }); + }; + + startNextHost(); };