conjur-cli 4.21.1 → 4.22.0

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
  SHA1:
3
- metadata.gz: 42c5699c45672978a67be3e037c53b212fb232d3
4
- data.tar.gz: 4288dda53317d3fe79ea7d255d12cf21681a2abf
3
+ metadata.gz: 3327a3212d116f7989090b9a1aed6de2f202b698
4
+ data.tar.gz: 37954aa133694126b93021e5d57d7d90f8f15927
5
5
  SHA512:
6
- metadata.gz: 48ef1a3766bcabca227c830c2801ded50ba83870e53d01e559a663fea813d078c42cb69c1316a227b000db10790ce8a2f91d1d31b98cf67002a83211e23d0e80
7
- data.tar.gz: 43c0a98e20cc612567e74929856428dd7004615d5f33fb5c2176d7c0328fd6827c5ac87f4997be839f2f566593908deafdc8ccb898de4889bf2ba419633b3a7a
6
+ metadata.gz: e0855d2122e2af07cf868cb1da21f6e6426c2fa5e7c6f05d9a23528f6d7abcd73458b3d831377153275d0bdd39b65b566f2c8cde8d3a301b938ef20daa989676
7
+ data.tar.gz: bc1675b9fca3d60bf3ac5dfcb007649a872e370b441a41c4ede7294f5ab5fad1cf92a2adf605c92664d1164b634ba645da0d35c3bc2bebc2919f5d0253bedfbc
data/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ # 4.22.0
2
+
3
+ * New 'plugin' subcommand to manage CLI plugins
4
+ * Configure SSL certificate from Conjur.configuration
5
+ * Print the error message if there's a problem loading a plugin
6
+
1
7
  # 4.21.1
2
8
 
3
9
  * Configure trust to the new certificate in `conjur init`, before attempting to contact the Conjur server
data/conjur.gemspec CHANGED
@@ -17,7 +17,7 @@ Gem::Specification.new do |gem|
17
17
 
18
18
 
19
19
  gem.add_dependency 'activesupport'
20
- gem.add_dependency 'conjur-api', '~> 4.14'
20
+ gem.add_dependency 'conjur-api', '~> 4.16'
21
21
  gem.add_dependency 'gli', '>=2.8.0'
22
22
  gem.add_dependency 'highline'
23
23
  gem.add_dependency 'netrc', '~> 0.10.2'
data/lib/conjur/cli.rb CHANGED
@@ -75,8 +75,10 @@ module Conjur
75
75
  begin
76
76
  filename = "conjur-asset-#{plugin}"
77
77
  require filename
78
- rescue LoadError
79
- warn "Could not load plugin '#{plugin}' specified in your config file.\nMake sure you have the #{filename} gem installed."
78
+ rescue LoadError => err
79
+ warn "WARNING: #{err.message}\n" \
80
+ "Could not load plugin '#{plugin}' specified in your config file.\n"\
81
+ "Make sure you have the #{filename} gem installed."
80
82
  end
81
83
  end
82
84
  end
@@ -0,0 +1,138 @@
1
+ #
2
+ # Copyright (C) 2015 Conjur Inc
3
+ #
4
+ # Permission is hereby granted, free of charge, to any person obtaining a copy of
5
+ # this software and associated documentation files (the "Software"), to deal in
6
+ # the Software without restriction, including without limitation the rights to
7
+ # use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
8
+ # the Software, and to permit persons to whom the Software is furnished to do so,
9
+ # subject to the following conditions:
10
+ #
11
+ # The above copyright notice and this permission notice shall be included in all
12
+ # copies or substantial portions of the Software.
13
+ #
14
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
16
+ # FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
17
+ # COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
18
+ # IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
19
+ # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
20
+ #
21
+
22
+ require 'rubygems'
23
+ require 'rubygems/commands/install_command'
24
+ require 'rubygems/commands/uninstall_command'
25
+ require 'yaml'
26
+
27
+ require 'conjur/command'
28
+
29
+ class Conjur::Command::Plugin < Conjur::Command
30
+ def self.assert_empty(args)
31
+ exit_now! 'Received extra command arguments' unless args.empty?
32
+ end
33
+
34
+ desc 'Manage plugins'
35
+ command :plugin do |cmd|
36
+ cmd.desc 'List installed plugins'
37
+ cmd.command :list do |c|
38
+ c.action do |_, _, args|
39
+ self.assert_empty(args)
40
+ Conjur::Config.plugins.each do |p|
41
+ begin
42
+ gem = Gem::Specification.find_by_name "conjur-asset-#{p}"
43
+ puts "#{p} (#{gem.version})"
44
+ rescue Gem::LoadError
45
+ nil
46
+ end
47
+ end
48
+ end
49
+ end
50
+
51
+ cmd.desc 'Install a plugin'
52
+ cmd.arg_name 'name'
53
+ cmd.command :install do |c|
54
+ c.arg_name 'version'
55
+ c.desc 'Version of the plugin to install'
56
+ c.flag [:v, :version], :default_value => Gem::Requirement.default
57
+
58
+ c.action do |_, options, args|
59
+ install_plugin(require_arg(args, 'name'), options[:version])
60
+ end
61
+ end
62
+
63
+ cmd.desc 'Uninstall a plugin'
64
+ cmd.arg_name 'name'
65
+ cmd.command :uninstall do |c|
66
+ c.action do |_, _, args|
67
+ name = require_arg(args, 'name')
68
+ uninstall_plugin(name)
69
+ end
70
+ end
71
+
72
+ cmd.desc "Show a plugin's details"
73
+ cmd.arg_name 'name'
74
+ cmd.command :show do |c|
75
+ c.action do |_, _, args|
76
+ name = require_arg(args, 'name')
77
+ begin
78
+ gem = Gem::Specification.find_by_name "conjur-asset-#{name}"
79
+ puts "Name: #{name}"
80
+ puts "Description: #{gem.summary}"
81
+ puts "Gem: #{gem.name}"
82
+ puts "Version: #{gem.version}"
83
+ rescue Gem::LoadError
84
+ puts "Plugin '#{name}' is not installed"
85
+ end
86
+ end
87
+ end
88
+ end
89
+ end
90
+
91
+ def install_plugin(name, version)
92
+ uninstall_plugin(name) rescue Exception
93
+
94
+ gem_name = name.start_with?('conjur-asset-') ? name : "conjur-asset-#{name}"
95
+
96
+ cmd = Gem::Commands::InstallCommand.new
97
+ cmd.handle_options ['--no-ri', '--no-rdoc', gem_name, '--version', "#{version}"]
98
+
99
+ begin
100
+ cmd.execute
101
+ rescue Gem::SystemExitException => e
102
+ if e.exit_code != 0
103
+ raise e
104
+ end
105
+ end
106
+
107
+ modify_plugin_list('add', name)
108
+ end
109
+
110
+ def uninstall_plugin(name)
111
+ if Conjur::Config.plugins.include?(name)
112
+ gem_name = name.start_with?('conjur-asset-') ? name : "conjur-asset-#{name}"
113
+
114
+ cmd = Gem::Commands::UninstallCommand.new
115
+ cmd.handle_options ['-x', '-I', '-a', gem_name]
116
+ cmd.execute
117
+
118
+ modify_plugin_list('remove', name)
119
+ end
120
+ end
121
+
122
+ def modify_plugin_list(op, plugin_name)
123
+ config_exists = false
124
+ Conjur::Config.default_config_files.each do |f|
125
+ if File.file?(f)
126
+ config_exists = true
127
+ config = YAML.load(IO.read(f)).stringify_keys rescue {}
128
+
129
+ config['plugins'] ||= {}
130
+ config['plugins'] += [plugin_name] if op == 'add'
131
+ config['plugins'] -= [plugin_name] if op == 'remove'
132
+ config['plugins'].uniq!
133
+
134
+ File.write(f, YAML.dump(config))
135
+ end
136
+ end
137
+ exit_now! 'No Conjur config file found, run "conjur init"' unless config_exists
138
+ end
data/lib/conjur/config.rb CHANGED
@@ -97,11 +97,11 @@ module Conjur
97
97
  raise $!
98
98
  end
99
99
  end
100
- if Config[:cert_file]
101
- OpenSSL::SSL::SSLContext::DEFAULT_CERT_STORE.add_file Config[:cert_file]
102
- end
100
+
101
+ Conjur.config.apply_cert_config!
103
102
  end
104
103
 
104
+
105
105
  def inspect
106
106
  @@attributes.inspect
107
107
  end
@@ -19,6 +19,6 @@
19
19
  # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
20
20
  #
21
21
  module Conjur
22
- VERSION = "4.21.1"
22
+ VERSION = "4.22.0"
23
23
  ::Version=VERSION
24
24
  end
@@ -45,19 +45,19 @@ describe Conjur::Command::Variables, logged_in: true do
45
45
  expect { invoke }.to write({ id: 'the-id' }).to(:stdout)
46
46
  end
47
47
  end
48
-
48
+
49
49
  describe_command "variable:create -v the-value-1 the-id the-value-2" do
50
50
  it "complains about conflicting values" do
51
51
  expect { invoke }.to raise_error("Received conflicting value arguments")
52
52
  end
53
53
  end
54
-
54
+
55
55
  describe_command "variable:create the-id -v the-value" do
56
56
  it "complains about extra arguments" do
57
57
  expect { invoke }.to raise_error("Received extra arguments 'the-value'")
58
58
  end
59
59
  end
60
-
60
+
61
61
  describe_command "variable:create" do
62
62
  it "provides default values for optional parameters mime_type and kind" do
63
63
  expect(RestClient::Request).to receive(:execute).with({
data/spec/config_spec.rb CHANGED
@@ -107,10 +107,26 @@ describe Conjur::Config do
107
107
  expect(Conjur::Config[:cert_file]).to eq(cert_path)
108
108
  end
109
109
  end
110
+
110
111
  describe "#apply" do
111
112
  before {
112
113
  allow(OpenSSL::SSL::SSLContext::DEFAULT_CERT_STORE).to receive(:add_file)
113
114
  }
115
+
116
+ context "ssl_certificate string" do
117
+ let(:ssl_certificate){ 'the certificate' }
118
+ let(:certificate){ double('Certificate') }
119
+ before{
120
+ Conjur::Config.class_variable_set('@@attributes', {'ssl_certificate' => ssl_certificate})
121
+ }
122
+
123
+ it 'trusts the certificate string' do
124
+ expect(OpenSSL::X509::Certificate).to receive(:new).with(ssl_certificate).once.and_return certificate
125
+ expect(OpenSSL::SSL::SSLContext::DEFAULT_CERT_STORE).to receive(:add_cert).with(certificate).once
126
+ Conjur::Config.apply
127
+ end
128
+ end
129
+
114
130
  context "cert_file" do
115
131
  let(:cert_file) { "/path/to/cert.pem" }
116
132
  before {
@@ -121,6 +137,7 @@ describe Conjur::Config do
121
137
  expect(OpenSSL::SSL::SSLContext::DEFAULT_CERT_STORE).to receive(:add_file).with cert_file
122
138
  Conjur::Config.apply
123
139
  end
140
+
124
141
  it "propagates the cert_file to Configuration.cert_file" do
125
142
  Conjur::Config.apply
126
143
  expect(Conjur.configuration.cert_file).to eq(cert_file)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: conjur-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.21.1
4
+ version: 4.22.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rafal Rzepecki
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-04-13 00:00:00.000000000 Z
12
+ date: 2015-04-28 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
@@ -31,14 +31,14 @@ dependencies:
31
31
  requirements:
32
32
  - - ~>
33
33
  - !ruby/object:Gem::Version
34
- version: '4.14'
34
+ version: '4.16'
35
35
  type: :runtime
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
39
  - - ~>
40
40
  - !ruby/object:Gem::Version
41
- version: '4.14'
41
+ version: '4.16'
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: gli
44
44
  requirement: !ruby/object:Gem::Requirement
@@ -313,6 +313,7 @@ files:
313
313
  - lib/conjur/command/ids.rb
314
314
  - lib/conjur/command/init.rb
315
315
  - lib/conjur/command/layers.rb
316
+ - lib/conjur/command/plugin.rb
316
317
  - lib/conjur/command/policy.rb
317
318
  - lib/conjur/command/pubkeys.rb
318
319
  - lib/conjur/command/resources.rb