Skip to content

Commit 49c6c9b

Browse files
authored
Merge branch 'master' into parallel_conflict_with_diffy
2 parents b886740 + e81de2d commit 49c6c9b

File tree

2 files changed

+37
-2
lines changed

2 files changed

+37
-2
lines changed

lib/octocatalog-diff/catalog-diff/differ.rb

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# frozen_string_literal: true
22

33
require 'diffy'
4+
require 'digest'
45
require 'hashdiff'
56
require 'json'
67
require 'set'
@@ -11,6 +12,8 @@
1112
require_relative '../util/util'
1213
require_relative 'filter'
1314

15+
HashDiff = Hashdiff unless defined? HashDiff
16+
1417
module OctocatalogDiff
1518
module CatalogDiff
1619
# Calculate the difference between two Puppet catalogs.
@@ -263,7 +266,7 @@ def filter_and_cleanup(catalog_resources)
263266

264267
# Handle parameters
265268
if k == 'parameters'
266-
cleansed_param = cleanse_parameters_hash(v)
269+
cleansed_param = cleanse_parameters_hash(v, resource.fetch('sensitive_parameters', []))
267270
hsh[k] = cleansed_param unless cleansed_param.nil? || cleansed_param.empty?
268271
elsif k == 'tags'
269272
# The order of tags is unimportant. Sort this array to avoid false diffs if order changes.
@@ -456,10 +459,18 @@ def ignored?(diff)
456459

457460
# Cleanse parameters of filtered attributes.
458461
# @param parameters_hash [Hash] Hash of parameters
462+
# @param sensitive_parameters [Array] Array of sensitive parameters
459463
# @return [Hash] Cleaned parameters hash (original input hash is not altered)
460-
def cleanse_parameters_hash(parameters_hash)
464+
def cleanse_parameters_hash(parameters_hash, sensitive_parameters)
461465
result = parameters_hash.dup
462466

467+
# hides sensitive params. We still need to know if there's a going to
468+
# be a diff, so we hash the value.
469+
sensitive_parameters.each do |p|
470+
md5 = Digest::MD5.hexdigest Marshal.dump(result[p])
471+
result[p] = 'Sensitive [md5sum ' + md5 + ']'
472+
end
473+
463474
# 'before' and 'require' handle internal Puppet ordering but do not affect what
464475
# happens on the target machine. Don't consider these for the purpose of catalog diff.
465476
result.delete('before')

spec/octocatalog-diff/tests/catalog-diff/differ_spec.rb

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -382,6 +382,30 @@
382382
result = testobj.catalog1
383383
expect(result.first['title']).to eq('/etc/foo')
384384
end
385+
386+
it 'should hide sensitive parameters' do
387+
json_hash = {
388+
'document_type' => 'Catalog',
389+
'data' => {
390+
'name' => 'rspec-node.github.net',
391+
'tags' => [],
392+
'resources' => [
393+
{
394+
'type' => 'File',
395+
'title' => 'verysecretfile',
396+
'parameters' => {
397+
'content' => 'secret1'
398+
},
399+
'sensitive_parameters' => ['content']
400+
}
401+
]
402+
}
403+
}
404+
catalog = OctocatalogDiff::Catalog.create(json: JSON.generate(json_hash))
405+
testobj = OctocatalogDiff::CatalogDiff::Differ.new(@options, catalog, @empty_puppet_catalog)
406+
result = testobj.catalog1
407+
expect(result.first['parameters']['content']).to eq('Sensitive [md5sum e52d98c459819a11775936d8dfbb7929]')
408+
end
385409
end
386410

387411
describe '#diff' do

0 commit comments

Comments
 (0)