From 3902c380cd72c65c774e795dbae8cd1f02b41126 Mon Sep 17 00:00:00 2001 From: Chris Cowan Date: Sat, 26 Sep 2015 10:09:56 -0700 Subject: [PATCH] Fixing Edge Cases - Add ability to specify filters from CLI options - Add test and fix for removing branch with censor - Add change regex to use strings --- src/server/config/schema.js | 2 +- .../logging/__tests__/applyFilterToKey.js | 10 +++++++- src/server/logging/applyFilterToKey.js | 24 +++++++++++++------ src/server/logging/index.js | 8 +++++-- 4 files changed, 33 insertions(+), 11 deletions(-) diff --git a/src/server/config/schema.js b/src/server/config/schema.js index dc960c684189..69b50dc7aaf8 100644 --- a/src/server/config/schema.js +++ b/src/server/config/schema.js @@ -61,7 +61,7 @@ module.exports = Joi.object({ events: Joi.any().default({}), dest: Joi.string().default('stdout'), - + filter: Joi.any().default({}), json: Joi.boolean() .when('dest', { is: 'stdout', diff --git a/src/server/logging/__tests__/applyFilterToKey.js b/src/server/logging/__tests__/applyFilterToKey.js index 53a932f716e2..1d91b2b4d961 100644 --- a/src/server/logging/__tests__/applyFilterToKey.js +++ b/src/server/logging/__tests__/applyFilterToKey.js @@ -29,6 +29,14 @@ describe('applyFilterToKey(obj, key, action)', function () { }); }); + it('should remove an entire branch with censor', function () { + var data = fixture(); + applyFilterToKey(data, 'headers', 'censor'); + expect(data).to.eql({ + req: { } + }); + }); + it('should censor a key in an object recursivly', function () { var data = fixture(); applyFilterToKey(data, 'authorization', 'censor'); @@ -43,7 +51,7 @@ describe('applyFilterToKey(obj, key, action)', function () { it('should censor key with a RegEx in an object recursivly', function () { var data = fixture(); - var regex = /([^\s]+)$/; + var regex = '/([^\\s]+)$/'; applyFilterToKey(data, 'authorization', regex); expect(data).to.eql({ req: { diff --git a/src/server/logging/applyFilterToKey.js b/src/server/logging/applyFilterToKey.js index 06f7bae0e992..8a3ab9e5399d 100644 --- a/src/server/logging/applyFilterToKey.js +++ b/src/server/logging/applyFilterToKey.js @@ -7,13 +7,23 @@ module.exports = function applyFilterToKey(obj, key, action) { if (obj.hasOwnProperty(k)) { let val = obj[k]; if (k === key) { - val = '' + val; - if (action === 'remove') delete obj[k]; - if (action === 'censor') { - obj[k] = val.replace(/./g, 'X'); - }; - if (action instanceof RegExp) { - obj[k] = val.replace(action, replacer); + if (action === 'remove') { + delete obj[k]; + } + else if (action === 'censor' && typeof val === 'object') { + delete obj[key]; + } + else if (action === 'censor') { + obj[k] = ('' + val).replace(/./g, 'X'); + } + else if (/\/.+\//.test(action)) { + var matches = action.match(/\/(.+)\//); + try { + let regex = new RegExp(matches[1]); + obj[k] = ('' + val).replace(regex, replacer); + } catch (e) { + //meh + } } } else if (typeof val === 'object') { applyFilterToKey(val, key, action); diff --git a/src/server/logging/index.js b/src/server/logging/index.js index ee8c16956533..2763baa46208 100644 --- a/src/server/logging/index.js +++ b/src/server/logging/index.js @@ -43,9 +43,13 @@ module.exports = function (kbnServer, server, config) { config: { json: config.get('logging.json'), dest: config.get('logging.dest'), - filter: { + // I'm adding the default here because if you add another filter + // using the commandline it will remove authorization. I want users + // to have to explicitly set --logging.filter.authorization=none to + // have it show up int he logs. + filter: _.defaults(config.get('logging.filter'), { authorization: 'remove' - } + }) }, events: _.transform(events, function (filtered, val, key) { // provide a string compatible way to remove events