diff --git a/src/kibana/components/stringify/types/String.js b/src/kibana/components/stringify/types/String.js index c547ba7e15bdc..24a80a36b1b9d 100644 --- a/src/kibana/components/stringify/types/String.js +++ b/src/kibana/components/stringify/types/String.js @@ -36,20 +36,31 @@ define(function (require) { { id: false, name: '- none -' }, { id: 'lower', name: 'Lower Case' }, { id: 'upper', name: 'Upper Case' }, - { id: 'short', name: 'Short Dots' } + { id: 'short', name: 'Short Dots' }, + { id: 'binary', name: 'Base64 Decode'} ]; _String.sampleInputs = [ 'A Quick Brown Fox.', 'com.organizations.project.ClassName', - 'hostname.net' + 'hostname.net', + 'SGVsbG8gd29ybGQ=' ]; + _String.prototype._base64Decode = function (val) { + try { + return window.atob(val); + } catch (e) { + return _.asPrettyString(val); + } + }; + _String.prototype._convert = function (val) { switch (this.param('transform')) { case 'lower': return String(val).toLowerCase(); case 'upper': return String(val).toUpperCase(); case 'short': return _.shortenDottedString(val); + case 'binary': return this._base64Decode(val); default: return _.asPrettyString(val); } }; diff --git a/test/unit/specs/components/stringify/_string.js b/test/unit/specs/components/stringify/_string.js new file mode 100644 index 0000000000000..5438b913b2f31 --- /dev/null +++ b/test/unit/specs/components/stringify/_string.js @@ -0,0 +1,19 @@ +define(function (require) { + return ['String Format', function () { + var fieldFormats; + + beforeEach(module('kibana')); + beforeEach(inject(function (Private) { + fieldFormats = Private(require('registry/field_formats')); + })); + + it('decode a base64 string', function () { + var StringFormat = fieldFormats.getType('string'); + var string = new StringFormat({ + transform: 'binary' + }); + expect(string.convert('Zm9vYmFy')).to.be('foobar'); + }); + + }]; +}); diff --git a/test/unit/specs/components/stringify/index.js b/test/unit/specs/components/stringify/index.js index 58a7c3c6c0ade..5434ff622425b 100644 --- a/test/unit/specs/components/stringify/index.js +++ b/test/unit/specs/components/stringify/index.js @@ -3,6 +3,7 @@ define(function (require) { describe(require('specs/components/stringify/_conformance')); describe(require('specs/components/stringify/_ip')); describe(require('specs/components/stringify/_source')); + describe(require('specs/components/stringify/_string')); describe(require('specs/components/stringify/_url')); }); });