diff --git a/.travis.yml b/.travis.yml index 5aa39c8..22392c7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -21,8 +21,8 @@ script: - npm test after_success: - - npm install istanbul codecov - - npm run cover - - ./node_modules/.bin/codecov +# - npm install istanbul codecov +# - npm run cover +# - ./node_modules/.bin/codecov sudo: false diff --git a/Changes.md b/Changes.md index 919ea89..c7d1892 100644 --- a/Changes.md +++ b/Changes.md @@ -1,6 +1,14 @@ -1.0.1 - 2017-06-13 - - Require higher haraka-constants so constants.OK is set properly +## 1.0.2 - 2017-07-30 -1.0.0 - 2016-11-09 +- declare booleans in config.get +- simplify a bunch of the follow-on code +- refactor away 5x redundancy +- remove Mooney-isms from nodeunit and use npm version - - import from haraka/Haraka +## 1.0.1 - 2017-06-13 + +- Require higher haraka-constants so constants.OK is set properly + +## 1.0.0 - 2016-11-09 + +- import from haraka/Haraka diff --git a/README.md b/README.md index fc5f971..50cafa8 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ [![Build Status][ci-img]][ci-url] -[![Code Coverage][cov-img]][cov-url] [![Code Climate][clim-img]][clim-url] [![Greenkeeper badge][gk-img]](https://greenkeeper.io/) [![NPM][npm-img]][npm-url] + # haraka-plugin-syslog diff --git a/config/syslog.ini b/config/syslog.ini index 90b8159..429c5d2 100644 --- a/config/syslog.ini +++ b/config/syslog.ini @@ -1,9 +1,9 @@ [general] name=haraka facility=MAIL -pid=1 -odelay=1 -cons=0 -ndelay=0 -nowait=0 +pid=true +odelay=true +cons=false +ndelay=false +nowait=false always_ok=false diff --git a/index.js b/index.js index 268c5fc..fcdd387 100644 --- a/index.js +++ b/index.js @@ -1,149 +1,141 @@ 'use strict'; -var constants = require('haraka-constants'); +const constants = require('haraka-constants'); exports.register = function () { var plugin = this; - plugin.Syslog = require('modern-syslog'); + const syslog = require('modern-syslog'); + plugin.Syslog = syslog; var options = 0; - var ini = plugin.config.get('syslog.ini'); + plugin.load_syslog_ini(); - ini.general = ini.general || {}; - var name = ini.general.name || 'haraka'; - var facility = ini.general.facility || 'MAIL'; - var pid = ini.general.log_pid || 1; - var odelay = ini.general.log_odelay || 1; - var cons = ini.general.log_cons || 0; - var ndelay = ini.general.log_ndelay || 0; - var nowait = ini.general.log_nowait || 0; - var always_ok = ini.general.always_ok || false; + if (!plugin.cfg.general) plugin.cfg.general = {}; - if (always_ok && (always_ok >= 1 || always_ok.toLowerCase() === 'true')) { - always_ok = true; - } - else { - always_ok = false; - } - - plugin.always_ok = always_ok; - - if (pid && (pid >= 1 || pid.toLowerCase() === 'true')) { - options |= plugin.Syslog.LOG_PID; - } - - if (odelay && (odelay >= 1 || odelay.toLowerCase() === 'true')) { - options |= plugin.Syslog.LOG_ODELAY; - } + var name = plugin.cfg.general.name || 'haraka'; + var facility = plugin.cfg.general.facility || 'MAIL'; - if (cons && (cons >= 1 || cons.toLowerCase() === 'true')) { - options |= plugin.Syslog.LOG_CONS; - } - - if (ndelay && (ndelay >= 1 || ndelay.toLowerCase() === 'true')) { - options |= plugin.Syslog.LOG_NDELAY; - } - - if (nowait && (nowait >= 1 || nowait.toLowerCase() === 'true')) { - options |= plugin.Syslog.LOG_NOWAIT; - } + ['pid','odelay','cons','ndelay','nowait'].forEach(opt => { + if (!plugin.cfg.general[opt]) return; + options |= syslog['LOG_' + opt.toUpperCase() ]; + }) switch (facility.toUpperCase()) { case 'MAIL': - plugin.Syslog.init(name, options, plugin.Syslog.LOG_MAIL); + syslog.init(name, options, syslog.LOG_MAIL); break; case 'KERN': - plugin.Syslog.init(name, options, plugin.Syslog.LOG_KERN); + syslog.init(name, options, syslog.LOG_KERN); break; case 'USER': - plugin.Syslog.init(name, options, plugin.Syslog.LOG_USER); + syslog.init(name, options, syslog.LOG_USER); break; case 'DAEMON': - plugin.Syslog.init(name, options, plugin.Syslog.LOG_DAEMON); + syslog.init(name, options, syslog.LOG_DAEMON); break; case 'AUTH': - plugin.Syslog.init(name, options, plugin.Syslog.LOG_AUTH); + syslog.init(name, options, syslog.LOG_AUTH); break; case 'SYSLOG': - plugin.Syslog.init(name, options, plugin.Syslog.LOG_SYSLOG); + syslog.init(name, options, syslog.LOG_SYSLOG); break; case 'LPR': - plugin.Syslog.init(name, options, plugin.Syslog.LOG_LPR); + syslog.init(name, options, syslog.LOG_LPR); break; case 'NEWS': - plugin.Syslog.init(name, options, plugin.Syslog.LOG_NEWS); + syslog.init(name, options, syslog.LOG_NEWS); break; case 'UUCP': - plugin.Syslog.init(name, options, plugin.Syslog.LOG_UUCP); + syslog.init(name, options, syslog.LOG_UUCP); break; case 'LOCAL0': - plugin.Syslog.init(name, options, plugin.Syslog.LOG_LOCAL0); + syslog.init(name, options, syslog.LOG_LOCAL0); break; case 'LOCAL1': - plugin.Syslog.init(name, options, plugin.Syslog.LOG_LOCAL1); + syslog.init(name, options, syslog.LOG_LOCAL1); break; case 'LOCAL2': - plugin.Syslog.init(name, options, plugin.Syslog.LOG_LOCAL2); + syslog.init(name, options, syslog.LOG_LOCAL2); break; case 'LOCAL3': - plugin.Syslog.init(name, options, plugin.Syslog.LOG_LOCAL3); + syslog.init(name, options, syslog.LOG_LOCAL3); break; case 'LOCAL4': - plugin.Syslog.init(name, options, plugin.Syslog.LOG_LOCAL4); + syslog.init(name, options, syslog.LOG_LOCAL4); break; case 'LOCAL5': - plugin.Syslog.init(name, options, plugin.Syslog.LOG_LOCAL5); + syslog.init(name, options, syslog.LOG_LOCAL5); break; case 'LOCAL6': - plugin.Syslog.init(name, options, plugin.Syslog.LOG_LOCAL6); + syslog.init(name, options, syslog.LOG_LOCAL6); break; case 'LOCAL7': - plugin.Syslog.init(name, options, plugin.Syslog.LOG_LOCAL7); + syslog.init(name, options, syslog.LOG_LOCAL7); break; default: - plugin.Syslog.init(name, options, plugin.Syslog.LOG_MAIL); + syslog.init(name, options, syslog.LOG_MAIL); } plugin.register_hook('log', 'syslog'); }; +exports.load_syslog_ini = function () { + let plugin = this; + + plugin.cfg = plugin.config.get('syslog.ini', { + booleans: [ + '+general.pid', + '+general.odelay', + '-general.cons', + '-general.ndelay', + '-general.nowait', + '-general.always_ok', + ], + }, + function () { + plugin.load_syslog_ini(); + }) +} + exports.syslog = function (next, logger, log) { - var plugin = this; + let plugin = this; + let syslog = plugin.Syslog; switch (log.level.toUpperCase()) { case 'INFO': - plugin.Syslog.log(plugin.Syslog.LOG_INFO, log.data); + syslog.log(syslog.LOG_INFO, log.data); break; case 'NOTICE': - plugin.Syslog.log(plugin.Syslog.LOG_NOTICE, log.data); + syslog.log(syslog.LOG_NOTICE, log.data); break; case 'WARN': - plugin.Syslog.log(plugin.Syslog.LOG_WARNING, log.data); + syslog.log(syslog.LOG_WARNING, log.data); break; case 'ERROR': - plugin.Syslog.log(plugin.Syslog.LOG_ERR, log.data); + syslog.log(syslog.LOG_ERR, log.data); break; case 'CRIT': - plugin.Syslog.log(plugin.Syslog.LOG_CRIT, log.data); + syslog.log(syslog.LOG_CRIT, log.data); break; case 'ALERT': - plugin.Syslog.log(plugin.Syslog.LOG_ALERT, log.data); + syslog.log(syslog.LOG_ALERT, log.data); break; case 'EMERG': - plugin.Syslog.log(plugin.Syslog.LOG_EMERG, log.data); + syslog.log(syslog.LOG_EMERG, log.data); break; case 'DATA': case 'PROTOCOL': case 'DEBUG': - plugin.Syslog.log(plugin.Syslog.LOG_DEBUG, log.data); + syslog.log(syslog.LOG_DEBUG, log.data); break; default: - plugin.Syslog.log(plugin.Syslog.LOG_DEBUG, log.data); + syslog.log(syslog.LOG_DEBUG, log.data); } - if (plugin.always_ok) { - return next(constants.OK); + if (plugin.cfg.always_ok) { + next(constants.OK); + return; } - return next(); + next(); }; diff --git a/package.json b/package.json index d905a8b..ddc0fe7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "haraka-plugin-syslog", - "version": "1.0.1", + "version": "1.0.2", "description": "Haraka plugin that logs to syslog", "main": "index.js", "scripts": { diff --git a/test/syslog.js b/test/syslog.js index 69daea7..b5ebedc 100644 --- a/test/syslog.js +++ b/test/syslog.js @@ -223,22 +223,22 @@ exports.hook = { exports.log = { setUp : _set_up, 'syslog hook logs correct thing' : function (test) { - if (!this.plugin || !this.plugin.Syslog) { return test.done(); } + let plugin = this.plugin; + if (!plugin || !plugin.Syslog) return test.done(); // local setup var next = stub(); - this.backup.plugin.Syslog.log = this.plugin.Syslog.log; - this.plugin.Syslog.log = stub(); - this.plugin.syslog(next, this.logger, this.log); + this.backup.plugin.Syslog.log = plugin.Syslog.log; + plugin.Syslog.log = stub(); + plugin.syslog(next, this.logger, this.log); test.expect(3); - test.ok(this.plugin.Syslog.log.called); - test.equals(this.plugin.Syslog.log.args[0], - this.plugin.Syslog.LOG_INFO); - test.equals(this.plugin.Syslog.log.args[1], this.log.data); + test.ok(plugin.Syslog.log.called); + test.equals(plugin.Syslog.log.args[0], plugin.Syslog.LOG_INFO); + test.equals(plugin.Syslog.log.args[1], this.log.data); test.done(); // local teardown - this.plugin.Syslog.log = this.backup.plugin.Syslog.log; + plugin.Syslog.log = this.backup.plugin.Syslog.log; } };