chef-vault 4.0.10 → 4.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 90adcd61e0fc654df4ce295a57fdbec194c1da9985298e8353165bd1ddb98f76
4
- data.tar.gz: 63eda080cc7a54bd9d5b66aaa75d7a384d2cc7f5fc834a84d70bc0e785c430e0
3
+ metadata.gz: 19add775da291b1eb9dc767f149c98e477f5048ea30e4a525ff1e143918f5847
4
+ data.tar.gz: 483d87a0e56f4209fc532be68a11add44a2b7a968ce9ee0c37729e241cb723c5
5
5
  SHA512:
6
- metadata.gz: f12f914abfd57e0b7e1b99051ec645b2ce34c3b67f8b3ef586f74b2686000f363963e7e27b3a1e85fc06d39e78524ed03c1fc0fdf5e41ed28fde036e9fa16732
7
- data.tar.gz: de5160bf822bb43934287f36f30b257a081b8988842dc106896dbb227d90e6a7690b337df4d12ba767d7f986107630a2b415261dd749da0d78c7b99d0fc29155
6
+ metadata.gz: 70423d48be58261e55b09b0cba47df51366571795d2bd9b1c60c0255b26f1e796e3d52c8c3cb32f13ae33e07860c88c67b2d124e74b432b8ac0bfc00c6b9b4a4
7
+ data.tar.gz: 89400da10b9840bd63b9ff626abbb32bea9f40897efa989f70c5ee63e6e533a21807491a936358d35652af30c67ceb67c4a9e5345393758217b7f9c42320bd58
data/Gemfile CHANGED
@@ -9,6 +9,8 @@ group :development do
9
9
  gem "rspec", "~> 3.4"
10
10
  gem "aruba", "~> 0.6"
11
11
  gem "chef", "~> 14.0" # avoids test failures on license acceptance
12
+ gem "contracts", "~> 0.16.1" # pin until we drop ruby < 2.7
13
+ gem "chef-utils", "= 16.6.14" # pin until we drop ruby 2.5
12
14
  end
13
15
 
14
16
  group :docs do
data/bin/chef-vault CHANGED
@@ -79,7 +79,7 @@ options_config.each do |option, config|
79
79
  end
80
80
 
81
81
  options_config.each do |option, config|
82
- options[option] = options[option] ? options[option] : config[:default]
82
+ options[option] = options[option] || config[:default]
83
83
  end
84
84
 
85
85
  require "rubygems" unless defined?(Gem)
data/chef-vault.gemspec CHANGED
@@ -14,7 +14,7 @@
14
14
  # See the License for the specific language governing permissions and
15
15
  # limitations under the License.
16
16
 
17
- $:.push File.expand_path("../lib", __FILE__)
17
+ $:.push File.expand_path("lib", __dir__)
18
18
  require "chef-vault/version"
19
19
 
20
20
  Gem::Specification.new do |s|
@@ -39,10 +39,38 @@ class ChefVault
39
39
  end
40
40
 
41
41
  def values_from_json(json)
42
+ validate_json(json)
42
43
  JSON.parse(json)
43
44
  rescue JSON::ParserError
44
45
  raise JSON::ParserError, "#{json} is not valid JSON!"
45
46
  end
47
+
48
+ # I/P: json string
49
+ # Raises `InvalidValue` if any of the json's values contain non-printable characters.
50
+ def validate_json(json)
51
+ begin
52
+ evaled_json = eval(json) # rubocop: disable Security/Eval
53
+ rescue SyntaxError
54
+ raise ChefVault::Exceptions::InvalidValue, "#{json} is not valid JSON!"
55
+ end
56
+
57
+ if evaled_json.is_a?(Hash)
58
+ evaled_json.each do |key, value|
59
+ next unless printable?(value.to_s)
60
+
61
+ msg = "Value '#{value}' of key '#{key}' contains non-printable characters. Check that backslashes are escaped with another backslash (e.g. C:\\\\Windows) in double-quoted strings."
62
+ ChefVault::Log.warn(msg)
63
+ end
64
+ end
65
+ end
66
+
67
+ # I/P: String
68
+ # O/P: true/false
69
+ # returns true if string is free of non-printable characters (escape sequences)
70
+ # this returns false for whitespace escape sequences as well, e.g. \n\t
71
+ def printable?(string)
72
+ /[^[:print:]]|[[:space:]]/.match(string)
73
+ end
46
74
  end
47
75
  end
48
76
  end
@@ -26,9 +26,9 @@ class Chef
26
26
  vault_admins = Chef::Config[:knife][:vault_admins]
27
27
  admin_array = [Chef::Config[:node_name]]
28
28
 
29
- if !vault_admins.kind_of?(Array)
30
- + ui.warn("Vault admin must be an array")
31
- + end
29
+ unless vault_admins.is_a?(Array)
30
+ ui.warn("Vault admin must be an array")
31
+ end
32
32
 
33
33
  if config_admins
34
34
  admin_array += [config_admins]
@@ -13,6 +13,7 @@
13
13
  # See the License for the specific language governing permissions and
14
14
  # limitations under the License.
15
15
 
16
+ require "set" unless defined?(::Set)
16
17
  require "chef/knife"
17
18
  require_relative "../../chef-vault"
18
19
 
@@ -23,7 +24,7 @@ class Chef
23
24
  includer.class_eval do
24
25
  deps do
25
26
  require "chef/search/query"
26
- require File.expand_path("../mixin/helper", __FILE__)
27
+ require File.expand_path("mixin/helper", __dir__)
27
28
  include ChefVault::Mixin::Helper
28
29
  end
29
30
 
@@ -70,13 +71,19 @@ class Chef
70
71
  end
71
72
 
72
73
  def split_vault_keys(bag)
73
- # get all item keys
74
- keys = bag.keys.select { |k| k =~ /_keys$/ }
75
- # get all sparse keys
76
- r = Regexp.union(keys.map { |k| Regexp.new("^#{k.chomp("_keys")}_key_.*") })
77
- sparse = bag.keys.select { |k| k =~ r }
78
- # the rest
79
- items = bag.keys - keys - sparse
74
+ items = []
75
+ keys = ::Set.new
76
+ possible_sparses = ::Set.new
77
+
78
+ # spread bag keys into 3 categories: items, keys or possible sparse items
79
+ bag.each_key do |key|
80
+ next keys << key if key.end_with?("_keys")
81
+ next possible_sparses << key if key.include?("_key_")
82
+
83
+ items << key
84
+ end
85
+ # 2nd pass "sparse" items to avoid false positive when items have "_key" in their name
86
+ possible_sparses.each { |key| items << key if keys.include?("#{key}_keys") }
80
87
  # return item keys and items
81
88
  [keys, items]
82
89
  end
@@ -30,13 +30,13 @@ class Chef
30
30
 
31
31
  if vault && item
32
32
  delete_object(ChefVault::Item, "#{vault}/#{item}", "chef_vault_item") do
33
- begin
34
- ChefVault::Item.load(vault, item).destroy
35
- rescue ChefVault::Exceptions::KeysNotFound,
36
- ChefVault::Exceptions::ItemNotFound
37
- raise ChefVault::Exceptions::ItemNotFound,
38
- "#{vault}/#{item} not found."
39
- end
33
+
34
+ ChefVault::Item.load(vault, item).destroy
35
+ rescue ChefVault::Exceptions::KeysNotFound,
36
+ ChefVault::Exceptions::ItemNotFound
37
+ raise ChefVault::Exceptions::ItemNotFound,
38
+ "#{vault}/#{item} not found."
39
+
40
40
  end
41
41
  else
42
42
  show_usage
@@ -35,7 +35,7 @@ class Chef
35
35
  bags.each_key do |bagname|
36
36
  vaultbags.push(bagname) if bag_is_vault?(bagname)
37
37
  end
38
- output vaultbags.join("\n")
38
+ output vaultbags
39
39
  end
40
40
  end
41
41
  end
@@ -90,9 +90,7 @@ class Chef
90
90
  def print_keys(vault)
91
91
  if bag_is_vault?(vault)
92
92
  bag = Chef::DataBag.load(vault)
93
- split_vault_keys(bag)[1].each do |item|
94
- output item
95
- end
93
+ output split_vault_keys(bag)[1]
96
94
  else
97
95
  output "data bag #{vault} is not a chef-vault"
98
96
  end
@@ -51,5 +51,8 @@ class ChefVault
51
51
 
52
52
  class V1Format < Exceptions
53
53
  end
54
+
55
+ class InvalidValue < Exceptions
56
+ end
54
57
  end
55
58
  end
@@ -89,12 +89,12 @@ class ChefVault
89
89
  handle_client_action(search_or_client, action)
90
90
  else
91
91
  search_or_client.each do |name|
92
- begin
93
- client = load_actor(name, "clients")
94
- handle_client_action(client, action)
95
- rescue ChefVault::Exceptions::ClientNotFound
96
- ChefVault::Log.warn "node '#{name}' has no 'default' public key; skipping"
97
- end
92
+
93
+ client = load_actor(name, "clients")
94
+ handle_client_action(client, action)
95
+ rescue ChefVault::Exceptions::ClientNotFound
96
+ ChefVault::Log.warn "node '#{name}' has no 'default' public key; skipping"
97
+
98
98
  end
99
99
  end
100
100
  end
@@ -15,6 +15,6 @@
15
15
  # limitations under the License.
16
16
 
17
17
  class ChefVault
18
- VERSION = "4.0.10"
18
+ VERSION = "4.1.3"
19
19
  MAJOR, MINOR, TINY = VERSION.split(".")
20
20
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chef-vault
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.10
4
+ version: 4.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thom May
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-08-21 00:00:00.000000000 Z
11
+ date: 2021-09-01 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Data encryption support for Chef Infra using data bags
14
14
  email:
@@ -68,7 +68,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
68
68
  - !ruby/object:Gem::Version
69
69
  version: '0'
70
70
  requirements: []
71
- rubygems_version: 3.0.3
71
+ rubygems_version: 3.1.4
72
72
  signing_key:
73
73
  specification_version: 4
74
74
  summary: Data encryption support for Chef Infra using data bags