conjur-cli 4.12.0 → 4.13.1
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 +4 -4
- data/conjur.gemspec +1 -1
- data/lib/conjur/command/users.rb +35 -2
- data/lib/conjur/config.rb +22 -7
- data/lib/conjur/dsl/runner.rb +5 -2
- data/lib/conjur/version.rb +1 -1
- data/spec/command/users_spec.rb +28 -1
- data/spec/config_spec.rb +36 -17
- data/spec/dsl/runner_spec.rb +35 -1
- data/spec/spec_helper.rb +15 -0
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8e1f0f7628065a0ce442b2265afe5f31ead8eaca
|
4
|
+
data.tar.gz: 7779ade9cf9b10d8814e127d2e696a24fb5d6606
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4caf67febf27ac99ccbb1183a5371f04c6c768b643172f78bef981917762da18d5cbc519b92675b54f1acb0af867e75fde053f4747d4a397a6f7730e4a47cbe8
|
7
|
+
data.tar.gz: 0efb81a0af8cdb3ec276a980507003a0785cdffc04b483f360f208dbb6971064fb53115d3b23a89b33368f979a29ceafad12d4764794145041612f2f5e69c826
|
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.
|
20
|
+
gem.add_dependency 'conjur-api', '>=4.10.0'
|
21
21
|
gem.add_dependency 'gli', '>=2.8.0'
|
22
22
|
gem.add_dependency 'highline'
|
23
23
|
gem.add_dependency 'netrc'
|
data/lib/conjur/command/users.rb
CHANGED
@@ -43,13 +43,20 @@ class Conjur::Command::Users < Conjur::Command
|
|
43
43
|
c.desc "Prompt for a password for the user (default: --no-password)"
|
44
44
|
c.switch [:p,:password]
|
45
45
|
|
46
|
+
c.desc "UID number to be associated with user (optional)"
|
47
|
+
c.flag [:uidnumber]
|
48
|
+
|
46
49
|
acting_as_option(c)
|
47
50
|
|
48
51
|
c.action do |global_options,options,args|
|
49
52
|
login = require_arg(args, 'login')
|
50
53
|
|
51
|
-
opts = options.slice(:ownerid)
|
52
|
-
|
54
|
+
opts = options.slice(:ownerid,:uidnumber)
|
55
|
+
if opts[:uidnumber]
|
56
|
+
raise "Uidnumber should be integer" unless /\d+/ =~ opts[:uidnumber]
|
57
|
+
opts[:uidnumber]=opts[:uidnumber].to_i
|
58
|
+
end
|
59
|
+
|
53
60
|
if options[:p]
|
54
61
|
opts[:password] = prompt_for_password
|
55
62
|
end
|
@@ -88,6 +95,32 @@ class Conjur::Command::Users < Conjur::Command
|
|
88
95
|
Conjur::API.update_password username, password, new_password
|
89
96
|
end
|
90
97
|
end
|
98
|
+
|
99
|
+
user.desc "Update user's attributes (only uidnumber supported now)"
|
100
|
+
user.arg_name "login"
|
101
|
+
user.command :update do |c|
|
102
|
+
c.desc "UID number to be associated with user"
|
103
|
+
c.flag [:uidnumber]
|
104
|
+
c.action do |global_options, options, args|
|
105
|
+
login=require_arg(args,'login')
|
106
|
+
raise "Uidnumber should be integer" unless /\d+/ =~ options[:uidnumber]
|
107
|
+
options[:uidnumber]=options[:uidnumber].to_i
|
108
|
+
api.user(login).update(options)
|
109
|
+
puts "UID set"
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
user.desc "Find the user by UID"
|
114
|
+
user.arg_name "uid"
|
115
|
+
user.command :uidsearch do |c|
|
116
|
+
c.action do |global_options, options, args|
|
117
|
+
uidnumber = require_arg(args,'uid')
|
118
|
+
raise "Uidnumber should be integer" unless /\d+/ =~ uidnumber
|
119
|
+
uidnumber=uidnumber.to_i
|
120
|
+
display api.find_users(uidnumber: uidnumber)
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
91
124
|
end
|
92
125
|
|
93
126
|
end
|
data/lib/conjur/config.rb
CHANGED
@@ -29,14 +29,25 @@ module Conjur
|
|
29
29
|
def clear
|
30
30
|
@@attributes = {}
|
31
31
|
end
|
32
|
-
|
33
|
-
def
|
34
|
-
|
35
|
-
|
36
|
-
|
32
|
+
|
33
|
+
def user_config_files
|
34
|
+
if ENV['CONJURRC']
|
35
|
+
return ENV['CONJURRC']
|
36
|
+
else
|
37
|
+
homefile = File.expand_path "~/.conjurrc"
|
38
|
+
pwdfile = File.expand_path ".conjurrc"
|
39
|
+
if homefile != pwdfile && File.file?(pwdfile)
|
40
|
+
$stderr.puts "WARNING: .conjurrc file from current directory is " +
|
41
|
+
"used. This behaviour is deprecated. Use ENV['CONJURRC'] to " +
|
42
|
+
"explicitly define custom configuration file if needed"
|
37
43
|
end
|
44
|
+
[ homefile, pwdfile ]
|
38
45
|
end
|
39
46
|
end
|
47
|
+
|
48
|
+
def default_config_files
|
49
|
+
['/etc/conjur.conf', user_config_files].flatten
|
50
|
+
end
|
40
51
|
|
41
52
|
def load(config_files = default_config_files)
|
42
53
|
require 'yaml'
|
@@ -73,8 +84,12 @@ module Conjur
|
|
73
84
|
end
|
74
85
|
|
75
86
|
if Conjur.log
|
76
|
-
|
77
|
-
|
87
|
+
begin
|
88
|
+
require 'conjur/api'
|
89
|
+
Conjur.log << "Using authn host #{Conjur::Authn::API.host}\n"
|
90
|
+
rescue RuntimeError
|
91
|
+
raise $! unless $!.message == "Missing required option account"
|
92
|
+
end
|
78
93
|
end
|
79
94
|
if Config[:cert_file]
|
80
95
|
OpenSSL::SSL::SSLContext::DEFAULT_CERT_STORE.add_file Config[:cert_file]
|
data/lib/conjur/dsl/runner.rb
CHANGED
@@ -12,11 +12,14 @@ module Conjur
|
|
12
12
|
|
13
13
|
def initialize(script, filename = nil)
|
14
14
|
@context = {
|
15
|
-
"env" => Conjur.env,
|
16
|
-
"stack" => Conjur.stack,
|
17
15
|
"account" => Conjur.account,
|
18
16
|
"api_keys" => {}
|
19
17
|
}
|
18
|
+
|
19
|
+
@context['env'] = Conjur.env unless Conjur.env == 'production'
|
20
|
+
@context['stack'] = Conjur.stack unless Conjur.stack == 'v4'
|
21
|
+
@context['appliance_url'] = Conjur.configuration.appliance_url unless Conjur.configuration.appliance_url.nil?
|
22
|
+
|
20
23
|
@script = script
|
21
24
|
@filename = filename
|
22
25
|
@api = nil
|
data/lib/conjur/version.rb
CHANGED
data/spec/command/users_spec.rb
CHANGED
@@ -25,6 +25,33 @@ describe Conjur::Command::Users, logged_in: true do
|
|
25
25
|
invoke
|
26
26
|
end
|
27
27
|
end
|
28
|
+
describe_command "#{cmd} --uidnumber 12345 the-user" do
|
29
|
+
it "Creates a user with specified uidnumber" do
|
30
|
+
Conjur::API.any_instance.should_receive(:create_user).with("the-user", { uidnumber: 12345 }).and_return new_user
|
31
|
+
invoke
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
context "updating UID number" do
|
38
|
+
describe_command "user update --uidnumber 12345 the-user" do
|
39
|
+
it "updates the uidnumber" do
|
40
|
+
stub_user = double()
|
41
|
+
Conjur::API.any_instance.should_receive(:user).with("the-user").and_return stub_user
|
42
|
+
stub_user.should_receive(:update).with(uidnumber: 12345).and_return ""
|
43
|
+
expect { invoke }.to write "UID set"
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
context "lookup per UID" do
|
49
|
+
let(:search_result) { {id: "the-user"} }
|
50
|
+
describe_command "user uidsearch 12345" do
|
51
|
+
it "finds user" do
|
52
|
+
Conjur::API.any_instance.should_receive(:find_users).with(uidnumber: 12345).and_return search_result
|
53
|
+
expect { invoke }.to write(JSON.pretty_generate(search_result))
|
54
|
+
end
|
28
55
|
end
|
29
56
|
end
|
30
57
|
|
@@ -54,4 +81,4 @@ describe Conjur::Command::Users, logged_in: true do
|
|
54
81
|
end
|
55
82
|
end
|
56
83
|
end
|
57
|
-
end
|
84
|
+
end
|
data/spec/config_spec.rb
CHANGED
@@ -3,20 +3,26 @@ require 'conjur/config'
|
|
3
3
|
require 'conjur/command/rspec/output_matchers'
|
4
4
|
|
5
5
|
describe Conjur::Config do
|
6
|
-
|
7
|
-
Conjur::Config.clear
|
8
|
-
}
|
6
|
+
include_context "fresh config"
|
9
7
|
|
10
8
|
describe ".default_config_files" do
|
11
9
|
subject { Conjur::Config.default_config_files }
|
10
|
+
let(:homedir) { '/home/isfake' }
|
12
11
|
around do |example|
|
13
12
|
realhome = ENV.delete 'HOME'
|
14
|
-
ENV['HOME'] =
|
13
|
+
ENV['HOME'] = homedir
|
15
14
|
example.run
|
16
15
|
ENV['HOME'] = realhome
|
17
16
|
end
|
18
17
|
|
19
18
|
let(:deprecation_warning) { "WARNING: .conjurrc file from current directory is used. This behaviour is deprecated. Use ENV['CONJURRC'] to explicitly define custom configuration file if needed" }
|
19
|
+
|
20
|
+
shared_examples "no deprecation warning" do
|
21
|
+
it "does not issue a deprecation warning" do
|
22
|
+
expect { subject }.to_not write(deprecation_warning).to(:stderr)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
20
26
|
context "when CONJURRC is not set" do
|
21
27
|
around do |example|
|
22
28
|
oldrc = ENV.delete 'CONJURRC'
|
@@ -25,19 +31,34 @@ describe Conjur::Config do
|
|
25
31
|
end
|
26
32
|
|
27
33
|
it { should include('/etc/conjur.conf') }
|
28
|
-
it { should include(
|
34
|
+
it { should include("#{homedir}/.conjurrc") }
|
29
35
|
it { should include('.conjurrc') }
|
36
|
+
|
37
|
+
before do
|
38
|
+
File.stub(:expand_path).and_call_original
|
39
|
+
File.stub(:expand_path).with('.conjurrc').and_return '.conjurrc'
|
40
|
+
end
|
41
|
+
|
30
42
|
context "When .conjurrc is present" do
|
31
43
|
before { File.stub(:file?).with('.conjurrc').and_return true }
|
32
44
|
it "Issues a deprecation warning" do
|
33
45
|
expect { subject }.to write(deprecation_warning).to(:stderr)
|
34
46
|
end
|
35
|
-
|
47
|
+
|
48
|
+
context "but the current directory is home" do
|
49
|
+
before do
|
50
|
+
File.unstub(:expand_path)
|
51
|
+
File.stub(:expand_path).and_call_original
|
52
|
+
File.stub(:expand_path).with('.conjurrc').and_return("#{homedir}/.conjurrc")
|
53
|
+
end
|
54
|
+
|
55
|
+
include_examples "no deprecation warning"
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
36
59
|
context "When .conjurrc is missing" do
|
37
60
|
before { File.stub(:file?).with('.conjurrc').and_return false }
|
38
|
-
|
39
|
-
expect { subject }.to_not write(deprecation_warning).to(:stderr)
|
40
|
-
end
|
61
|
+
include_examples "no deprecation warning"
|
41
62
|
end
|
42
63
|
end
|
43
64
|
|
@@ -50,11 +71,10 @@ describe Conjur::Config do
|
|
50
71
|
end
|
51
72
|
it { should include('/etc/conjur.conf') }
|
52
73
|
it { should include('stub_conjurrc') }
|
53
|
-
it { should_not include(
|
74
|
+
it { should_not include("#{homedir}/.conjurrc") }
|
54
75
|
it { should_not include('.conjurrc') }
|
55
|
-
|
56
|
-
|
57
|
-
end
|
76
|
+
|
77
|
+
include_examples "no deprecation warning"
|
58
78
|
end
|
59
79
|
|
60
80
|
context "when CONJURRC is set to .conjurrc" do
|
@@ -67,10 +87,9 @@ describe Conjur::Config do
|
|
67
87
|
before { File.stub(:file?).with('.conjurrc').and_return true }
|
68
88
|
it { should include('/etc/conjur.conf') }
|
69
89
|
it { should include('.conjurrc') }
|
70
|
-
it { should_not include(
|
71
|
-
|
72
|
-
|
73
|
-
end
|
90
|
+
it { should_not include("#{homedir}/.conjurrc") }
|
91
|
+
|
92
|
+
include_examples "no deprecation warning"
|
74
93
|
end
|
75
94
|
end
|
76
95
|
|
data/spec/dsl/runner_spec.rb
CHANGED
@@ -2,6 +2,8 @@ require 'spec_helper'
|
|
2
2
|
require 'conjur/dsl/runner'
|
3
3
|
|
4
4
|
describe Conjur::DSL::Runner, logged_in: true do
|
5
|
+
include_context "fresh config"
|
6
|
+
|
5
7
|
let(:filename) { nil }
|
6
8
|
let(:runner) { Conjur::DSL::Runner.new script, filename }
|
7
9
|
let(:script) { "user 'alice'" }
|
@@ -31,4 +33,36 @@ describe Conjur::DSL::Runner, logged_in: true do
|
|
31
33
|
"the-account:user:alice" => "the-api-key"
|
32
34
|
}
|
33
35
|
end
|
34
|
-
|
36
|
+
|
37
|
+
it "doesn't store default env and stack in context" do
|
38
|
+
expect(runner.context).to_not have_key 'env'
|
39
|
+
expect(runner.context).to_not have_key 'stack'
|
40
|
+
end
|
41
|
+
|
42
|
+
context "with non-default stack and env" do
|
43
|
+
let(:runner) do
|
44
|
+
Conjur::Config.merge env: 'baz', stack: 'bar'
|
45
|
+
Conjur::Config.apply
|
46
|
+
Conjur::DSL::Runner.new '', nil
|
47
|
+
end
|
48
|
+
|
49
|
+
it "stores them in context" do
|
50
|
+
expect(runner.context['env']).to eq 'baz'
|
51
|
+
expect(runner.context['stack']).to eq 'bar'
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
context "with appliance url" do
|
56
|
+
let(:appliance_url) { "https://conjur.example.com/api" }
|
57
|
+
let(:runner) do
|
58
|
+
Conjur::Config.merge appliance_url: appliance_url
|
59
|
+
Conjur::Config.apply
|
60
|
+
|
61
|
+
Conjur::DSL::Runner.new '', nil
|
62
|
+
end
|
63
|
+
|
64
|
+
it "stores appliance url in the context" do
|
65
|
+
expect(runner.context['appliance_url']).to eq appliance_url
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -29,3 +29,18 @@ require 'conjur/command/rspec/helpers'
|
|
29
29
|
ENV['CONJURRC'] = '/dev/null'
|
30
30
|
|
31
31
|
require 'conjur/cli'
|
32
|
+
|
33
|
+
shared_context "fresh config" do
|
34
|
+
before {
|
35
|
+
ENV.delete_if do |k,v|
|
36
|
+
k =~ /^CONJUR_/
|
37
|
+
end
|
38
|
+
|
39
|
+
@configuration = Conjur.configuration
|
40
|
+
Conjur.configuration = Conjur::Configuration.new
|
41
|
+
}
|
42
|
+
after {
|
43
|
+
Conjur::Config.clear
|
44
|
+
Conjur.configuration = @configuration
|
45
|
+
}
|
46
|
+
end
|
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.
|
4
|
+
version: 4.13.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rafał Rzepecki
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-08-
|
12
|
+
date: 2014-08-15 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.
|
34
|
+
version: 4.10.0
|
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.
|
41
|
+
version: 4.10.0
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
43
|
name: gli
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|