spaux 0.0.9 → 0.0.10

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 466f15ee386ce8a4828c78c2ddd79d237abba028
4
- data.tar.gz: 33f63a81f23e5b16a956be021578a8cf104d044a
3
+ metadata.gz: 25b35334b5af6f97d6fdf422c36fba87ab5cf4c3
4
+ data.tar.gz: 5d3a2f29f7c8a7501df38f6233020db1506cc4aa
5
5
  SHA512:
6
- metadata.gz: 490e90f25221c3c7e3d36527ecc7a92b542253912aafa2958d09fab7a4d568f326032101f00fb9c83387e4ec890257bec5888c6fb4a49c4c92a8f2258ac8f0df
7
- data.tar.gz: c73694ab180b60e7f51f367e3004b4057345aafc5500471e2ec721810d4d830d8ec73b5d89086f2654fb9e7825914719a3d767390419227c254bae4a1bd754eb
6
+ metadata.gz: c907c4687140a18a489c8ddd1152d6d792f49c0f25975a765bfe189e64fb201de41eb0d8ea1a4d488622217dbb93da7fd323108a5060c28d435b7867dcd3a100
7
+ data.tar.gz: 2fe8afcdcdc69b3b13d6e5943cf84768edb376be38dd33f44e901ca0c5a7c9ce3e7754b0f0e9e933f92ea7ff0971bff9c8bdf5cc21d97a851eef3ee8c288ce5c
data/Gemfile CHANGED
@@ -2,7 +2,3 @@ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in spaux.gemspec
4
4
  gemspec
5
-
6
- # https://github.com/opscode/chef-provisioning/issues/241
7
- gem 'chef-provisioning', :github => 'nomadium/chef-provisioning',
8
- :branch => 'feature/set-no-lazy-load-true-in-chef-config'
@@ -1,5 +1,7 @@
1
1
  require 'octokit'
2
2
  require 'net/ssh'
3
+ require 'yaml'
4
+ require 'rbnacl'
3
5
 
4
6
  class Spaux
5
7
  class Chef
@@ -22,44 +24,49 @@ class Spaux
22
24
  configuration = eval(::File.read(config_file))
23
25
  end
24
26
  def get_raw_key
25
- key_filename = 'encrypted.rb'
26
- key_file = ::File.join(@work_dir, key_filename)
27
+ msg_filename = 'message.yml'
28
+ msg_file = ::File.join(@work_dir, msg_filename)
27
29
 
28
- if !::File.exists?(key_file)
29
- key = retrieve_key_from_gist(@config[:chef_private_key_gist_id])
30
+ if !::File.exists?(msg_file)
31
+ msg = retrieve_msg_from_gist(@config[:chef_private_key_gist_id])
30
32
  begin
31
- ::File.write(key_file, key)
33
+ ::IO.write(msg_file, msg)
32
34
  rescue Exception => e
33
35
  puts e.message
34
36
  end
35
37
  else
36
- key = ::File.read(key_file)
38
+ msg = ::IO.read(msg_file)
37
39
  end
38
40
 
39
- key_hash = eval(key)
40
- raw_key = decrypt_key(key_hash, @config[:private_key])
41
+ message = YAML.safe_load(msg)
42
+ key = decrypt_message(message, @config[:private_key])
41
43
  end
42
44
 
43
- def retrieve_key_from_gist(gist)
45
+ def retrieve_msg_from_gist(gist_id)
44
46
  client = Octokit::Client.new
45
- key_gist = client.gist(gist)
46
- key_filename = key_gist[:files].fields.first
47
- key_resource = key_gist[:files][key_filename]
48
- key_data = key_resource[:content]
47
+ gist = client.gist(gist_id)
48
+ filename = gist[:files].fields.first
49
+ resource = gist[:files][filename]
50
+ data = resource[:content]
49
51
  end
50
52
 
51
- def decrypt_key(key_data, rsa_key_filename)
53
+ def decrypt_message(message, rsa_key_filename)
52
54
  rsa_key = Net::SSH::KeyFactory.load_private_key(rsa_key_filename)
53
- iv = Base64.decode64(key_data[:iv])
54
- sym_key = Base64.decode64(key_data[:key])
55
- data = Base64.decode64(key_data[:data])
55
+ recipients = message['recipients']
56
+ box_key = nil
56
57
 
57
- decipher = OpenSSL::Cipher::AES.new(@config[:aes_key_size],
58
- @config[:aes_cipher_mode])
59
- decipher.decrypt
60
- decipher.iv = rsa_key.private_decrypt(iv)
61
- decipher.key = rsa_key.private_decrypt(sym_key)
62
- key = decipher.update(data) + decipher.final
58
+ recipients.each do |r|
59
+ begin
60
+ box_key = rsa_key.private_decrypt(Base64.decode64(r))
61
+ rescue OpenSSL::PKey::RSAError => e
62
+ next if e.message.eql?('padding check failed')
63
+ end
64
+ end
65
+
66
+ raise ArgumentError, 'Unable to decrypt message!' if box_key.nil?
67
+
68
+ box = ::RbNaCl::SimpleBox.from_secret_key(box_key)
69
+ clear_message = box.decrypt(Base64.decode64(message['data']))
63
70
  end
64
71
  end
65
72
  end
@@ -6,32 +6,21 @@ class Spaux
6
6
  class Chef
7
7
  class Knife < ::Chef::Application::Knife
8
8
 
9
- DEFAULT_KNIFE_CONFIG = {
10
- config_file: {
11
- flags: %w(--config -c),
12
- value: ::File.join('@work_dir', 'knife.rb')
13
- }
14
- }
15
-
16
9
  attr_accessor :work_dir
17
10
  attr_accessor :args
18
11
 
19
12
  def initialize(work_dir, args)
20
13
  @work_dir = work_dir
21
14
  @args = args
15
+ @extra_options = {}
16
+ @extra_options[:config_file] = ::File.join(@work_dir, 'knife.rb')
22
17
 
23
- DEFAULT_KNIFE_CONFIG.each do |_,v|
24
- v[:value].is_a?(String) && v[:value].gsub!(/@work_dir/, @work_dir)
25
- end
26
-
27
- cf_flags = DEFAULT_KNIFE_CONFIG[:config_file][:flags]
28
- unless @args.include?(cf_flags.first) || @args.include?(cf_flags.last)
29
- @args << DEFAULT_KNIFE_CONFIG[:config_file][:flags].first
30
- @args << DEFAULT_KNIFE_CONFIG[:config_file][:value]
31
- end
18
+ raw_key = Spaux::Chef::Key.new.raw_key
19
+ redefine_chef_http_authenticator raw_key
32
20
 
33
- config_file = DEFAULT_KNIFE_CONFIG[:config_file][:value]
34
- FileUtils.touch config_file
21
+ # to avoid warnings about missing configuration
22
+ @args << '--config' << '/dev/null'
23
+ FileUtils.touch @extra_options[:config_file]
35
24
  end
36
25
 
37
26
  def run
@@ -42,11 +31,20 @@ class Spaux
42
31
  knife = ::Chef::Application::Knife.new
43
32
  options = knife.options
44
33
  begin
45
- ::Chef::Knife.run(@args, options)
34
+ ::Chef::Knife.run(@args, options, @extra_options)
46
35
  rescue SystemExit => e
47
36
  # just ignore the exit of knife tool
48
37
  end
49
38
  end
39
+
40
+ private
41
+ def redefine_chef_http_authenticator(key)
42
+ ::Chef::HTTP::Authenticator.send(:define_method,
43
+ 'load_signing_key') do |signing_key_filename, raw_key|
44
+ @raw_key = key
45
+ @key = OpenSSL::PKey::RSA.new(@raw_key)
46
+ end
47
+ end
50
48
  end
51
49
  end
52
50
  end
@@ -1,9 +1,12 @@
1
1
  class Chef
2
2
  class Knife
3
- def configure_spaux
4
- config.merge!(Spaux::default_chef_config(:knife))
3
+ def configure_spaux(extra_config)
4
+ config_file = extra_config[:config_file]
5
+ default_config = Spaux::default_chef_config(:knife)
6
+ Chef::Config.merge! default_config.merge(extra_config)
7
+ Chef::Config.from_file config_file
5
8
  end
6
- def self.run(args, options={})
9
+ def self.run(args, options={}, extra_settings={})
7
10
  # Fallback debug logging. Normally the logger isn't configured until we
8
11
  # read the config, but this means any logging that happens before the
9
12
  # config file is read may be lost. If the KNIFE_DEBUG variable is set, we
@@ -19,7 +22,7 @@ class Chef
19
22
  subcommand_class.options = options.merge!(subcommand_class.options)
20
23
  subcommand_class.load_deps
21
24
  instance = subcommand_class.new(args)
22
- instance.configure_spaux
25
+ instance.configure_spaux(extra_settings)
23
26
  instance.configure_chef
24
27
  instance.run_with_pretty_exceptions
25
28
  end
@@ -1,6 +1,4 @@
1
1
  {
2
2
  chef_private_key_gist_id: '16b65a73953427ce9c40',
3
- private_key: '~/.ssh/id_rsa',
4
- aes_key_size: 256,
5
- aes_cipher_mode: :CBC
3
+ private_key: '~/.ssh/id_rsa'
6
4
  }
@@ -1,3 +1,3 @@
1
1
  class Spaux
2
- VERSION = '0.0.9'
2
+ VERSION = '0.0.10'
3
3
  end
@@ -21,9 +21,10 @@ Gem::Specification.new do |spec|
21
21
  spec.add_dependency "chef", '>= 12.0.0.rc.0'
22
22
  spec.add_dependency "octokit", '~> 3.5.2'
23
23
  spec.add_dependency "net-ssh", '~> 2.9.1'
24
- spec.add_dependency 'chef-provisioning', '~> 0.16.1'
24
+ spec.add_dependency 'chef-provisioning', '~> 0.16'
25
25
  spec.add_dependency 'chef-provisioning-fog', '~> 0.11'
26
26
  spec.add_dependency 'chef-vault', '~> 2.3.0'
27
+ spec.add_dependency 'rbnacl', '~> 3.1.2'
27
28
  spec.add_development_dependency "bundler", "~> 1.7"
28
29
  spec.add_development_dependency "rake", "~> 10.0"
29
30
  spec.add_development_dependency "rspec", '~> 3.1.0'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spaux
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9
4
+ version: 0.0.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Miguel Landaeta
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-05 00:00:00.000000000 Z
11
+ date: 2014-12-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -72,14 +72,14 @@ dependencies:
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: 0.16.1
75
+ version: '0.16'
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: 0.16.1
82
+ version: '0.16'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: chef-provisioning-fog
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -108,6 +108,20 @@ dependencies:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
110
  version: 2.3.0
111
+ - !ruby/object:Gem::Dependency
112
+ name: rbnacl
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: 3.1.2
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: 3.1.2
111
125
  - !ruby/object:Gem::Dependency
112
126
  name: bundler
113
127
  requirement: !ruby/object:Gem::Requirement
@@ -219,7 +233,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
219
233
  version: '0'
220
234
  requirements: []
221
235
  rubyforge_project:
222
- rubygems_version: 2.2.2
236
+ rubygems_version: 2.4.3
223
237
  signing_key:
224
238
  specification_version: 4
225
239
  summary: Spaux automation tasks