Compare commits
23 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a98319aebe | ||
|
|
7c154f5bc8 | ||
|
|
9fc219d98a | ||
|
|
561a523261 | ||
|
|
ca55a4de57 | ||
|
|
0da43c9fd3 | ||
|
|
ddb2931f6c | ||
|
|
7cec3f7461 | ||
|
|
7f357ef60d | ||
|
|
64d2b7101a | ||
|
|
01a1be8084 | ||
|
|
378dd0e39d | ||
|
|
20c5d0e34d | ||
|
|
b7558d64f5 | ||
|
|
293abdacde | ||
|
|
804d044632 | ||
|
|
813b171d26 | ||
|
|
7a0ce1c04d | ||
|
|
49ea9ab9fa | ||
|
|
60e0d52ab4 | ||
|
|
e3ec56210b | ||
|
|
315d3d6499 | ||
|
|
0763265be1 |
@@ -1,7 +1,10 @@
|
|||||||
|
sudo: false
|
||||||
language: ruby
|
language: ruby
|
||||||
rvm:
|
rvm:
|
||||||
- 1.9.3
|
- 1.9.3
|
||||||
- 2.0.0
|
- 2.0.0
|
||||||
|
- 2.1.7
|
||||||
|
- 2.2.3
|
||||||
addons:
|
addons:
|
||||||
code_climate:
|
code_climate:
|
||||||
repo_token:
|
repo_token:
|
||||||
|
|||||||
@@ -98,6 +98,8 @@ When it downloads a file, it gets added to `Zanzifile.resolved`. And next time
|
|||||||
`resolved` file, it will not attempt to re-download. `zanzibar update` will attempt
|
`resolved` file, it will not attempt to re-download. `zanzibar update` will attempt
|
||||||
to re-download all secrets.
|
to re-download all secrets.
|
||||||
|
|
||||||
|
Subdirectories under the root directory `secret_dir` can be created for individual keys by specifying a `prefix` path for that secret. Secrets will default to be downloaded to the root `secret_dir` directory otherwise.
|
||||||
|
|
||||||
Note: `zanzibar get` can fetch passwords or files, but `zanzibar bundle` can
|
Note: `zanzibar get` can fetch passwords or files, but `zanzibar bundle` can
|
||||||
only operate on secret files.
|
only operate on secret files.
|
||||||
|
|
||||||
@@ -114,6 +116,7 @@ secrets:
|
|||||||
ssh_key:
|
ssh_key:
|
||||||
id: 249
|
id: 249
|
||||||
label: Private Key
|
label: Private Key
|
||||||
|
prefix: ssh/
|
||||||
encryption_key:
|
encryption_key:
|
||||||
id: 483
|
id: 483
|
||||||
label: Attachment
|
label: Attachment
|
||||||
|
|||||||
@@ -66,7 +66,9 @@ module Zanzibar
|
|||||||
|
|
||||||
def prompt_for_password
|
def prompt_for_password
|
||||||
puts "Please enter password for #{@@username}:"
|
puts "Please enter password for #{@@username}:"
|
||||||
STDIN.noecho(&:gets).chomp
|
STDIN.noecho(&:gets).chomp.tap do
|
||||||
|
puts "Using password to login..."
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
## Gets the wsdl document location if none is provided in the constructor
|
## Gets the wsdl document location if none is provided in the constructor
|
||||||
@@ -111,17 +113,25 @@ module Zanzibar
|
|||||||
raise "There was an error getting the secret with id #{scrt_id}: #{err}"
|
raise "There was an error getting the secret with id #{scrt_id}: #{err}"
|
||||||
end
|
end
|
||||||
|
|
||||||
## Retrieve a simple password from a secret
|
## Retrieve the value from a field label of a secret
|
||||||
# Will raise an error if there are any issues
|
# Will raise an error if there are any issues
|
||||||
# @param [Integer] the secret id
|
# @param [Integer] the secret id
|
||||||
# @return [String] the password for the given secret
|
# @param [String] the field label to get, defaults to Password
|
||||||
|
# @return [String] the value for the given field label
|
||||||
def get_password(scrt_id)
|
def get_fieldlabel_value(scrt_id, fieldlabel = 'Password')
|
||||||
secret = get_secret(scrt_id)
|
secret = get_secret(scrt_id)
|
||||||
secret_items = secret[:secret][:items][:secret_item]
|
secret_items = secret[:secret][:items][:secret_item]
|
||||||
return get_secret_item_by_field_name(secret_items, 'Password')[:value]
|
return get_secret_item_by_field_name(secret_items, fieldlabel)[:value]
|
||||||
rescue Savon::Error => err
|
rescue Savon::Error => err
|
||||||
raise "There was an error getting the password for secret #{scrt_id}: #{err}"
|
raise "There was an error getting '#{fieldlabel}' for secret #{scrt_id}: #{err}"
|
||||||
|
end
|
||||||
|
|
||||||
|
## Retrieve a simple password from a secret
|
||||||
|
# Calls get get_fieldlabel_value()
|
||||||
|
# @param [Integer] the secret id
|
||||||
|
# @return [String] the password for the given secret
|
||||||
|
def get_password(scrt_id)
|
||||||
|
return get_fieldlabel_value(scrt_id)
|
||||||
end
|
end
|
||||||
|
|
||||||
## Get the password, save it to a file, and return the path to the file.
|
## Get the password, save it to a file, and return the path to the file.
|
||||||
|
|||||||
@@ -47,9 +47,11 @@ module Zanzibar
|
|||||||
## Make sure the directory exists and that a .gitignore is there to ignore it
|
## Make sure the directory exists and that a .gitignore is there to ignore it
|
||||||
if @settings['secret_dir']
|
if @settings['secret_dir']
|
||||||
FileUtils.mkdir_p(@settings['secret_dir'])
|
FileUtils.mkdir_p(@settings['secret_dir'])
|
||||||
File.open("#{@settings['secret_dir']}/.gitignore", 'w') do |file|
|
if !File.exist? "#{@settings['secret_dir']}/.gitignore"
|
||||||
file.puts '*'
|
File.open("#{@settings['secret_dir']}/.gitignore", 'w') do |file|
|
||||||
file.puts '!.gitignore'
|
file.puts '*'
|
||||||
|
file.puts '!.gitignore'
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -20,20 +20,19 @@ module Zanzibar
|
|||||||
construct_options
|
construct_options
|
||||||
ensure_options
|
ensure_options
|
||||||
|
|
||||||
fetch_secret(@scrt_id, options['filelabel'])
|
fetch_secret(@scrt_id)
|
||||||
end
|
end
|
||||||
|
|
||||||
def fetch_secret(scrt_id, label = nil)
|
def fetch_secret(scrt_id)
|
||||||
scrt = ::Zanzibar::Zanzibar.new(@zanzibar_options)
|
scrt = ::Zanzibar::Zanzibar.new(@zanzibar_options)
|
||||||
|
|
||||||
puts @zanzibar_options
|
if @zanzibar_options[:filelabel]
|
||||||
|
|
||||||
if label
|
|
||||||
scrt.download_secret_file(scrt_id: scrt_id,
|
scrt.download_secret_file(scrt_id: scrt_id,
|
||||||
type: label)
|
type: @zanzibar_options[:filelabel])
|
||||||
else
|
else
|
||||||
scrt.get_password(scrt_id)
|
scrt.get_fieldlabel_value(scrt_id, @zanzibar_options[:fieldlabel])
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def construct_options
|
def construct_options
|
||||||
@@ -42,6 +41,8 @@ module Zanzibar
|
|||||||
@zanzibar_options[:domain] = options['domain']
|
@zanzibar_options[:domain] = options['domain']
|
||||||
@zanzibar_options[:username] = options['username'] unless options['username'].nil?
|
@zanzibar_options[:username] = options['username'] unless options['username'].nil?
|
||||||
@zanzibar_options[:domain] = options['domain'] ? options['domain'] : 'local'
|
@zanzibar_options[:domain] = options['domain'] ? options['domain'] : 'local'
|
||||||
|
@zanzibar_options[:fieldlabel] = options['fieldlabel'] || 'Password'
|
||||||
|
@zanzibar_options[:filelabel] = options['filelabel'] if options['filelabel']
|
||||||
end
|
end
|
||||||
|
|
||||||
def construct_wsdl
|
def construct_wsdl
|
||||||
|
|||||||
@@ -76,6 +76,8 @@ module Zanzibar
|
|||||||
desc: 'Don\'t verify Secret Server\'s SSL certificate'
|
desc: 'Don\'t verify Secret Server\'s SSL certificate'
|
||||||
option 'filelabel', type: :string, aliases: :f,
|
option 'filelabel', type: :string, aliases: :f,
|
||||||
desc: 'Specify a file (by label) to download'
|
desc: 'Specify a file (by label) to download'
|
||||||
|
option 'fieldlabel', type: :string, aliases: :l,
|
||||||
|
desc: 'Specify a field (by label) to get'
|
||||||
option 'username', type: :string, aliases: :u
|
option 'username', type: :string, aliases: :u
|
||||||
option 'password', type: :string, aliases: :p
|
option 'password', type: :string, aliases: :p
|
||||||
def get(scrt_id)
|
def get(scrt_id)
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# The version of the gem
|
# The version of the gem
|
||||||
module Zanzibar
|
module Zanzibar
|
||||||
VERSION = '0.1.19'
|
VERSION = '0.1.27'
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -47,6 +47,11 @@ describe Zanzibar::Cli do
|
|||||||
expect { subject.get(1234) }.to raise_error.with_message(/#{Zanzibar::NO_WSDL_ERROR}/)
|
expect { subject.get(1234) }.to raise_error.with_message(/#{Zanzibar::NO_WSDL_ERROR}/)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'should be able to get a field value' do
|
||||||
|
subject.options = { 'domain' => 'zanzitest.net', 'wsdl' => 'scrt.wsdl', 'fieldlabel' => 'Username' }
|
||||||
|
expect { subject.get(1234) }.to output(/ZanziUser/).to_stdout
|
||||||
|
end
|
||||||
|
|
||||||
it 'should be able to download files' do
|
it 'should be able to download files' do
|
||||||
WebMock.reset!
|
WebMock.reset!
|
||||||
stub_request(:any, 'https://www.zanzitest.net/webservices/sswebservice.asmx')
|
stub_request(:any, 'https://www.zanzitest.net/webservices/sswebservice.asmx')
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ Gem::Specification.new do |spec|
|
|||||||
spec.add_development_dependency 'fakefs', '~> 0.6.4'
|
spec.add_development_dependency 'fakefs', '~> 0.6.4'
|
||||||
spec.add_development_dependency 'simplecov', '~> 0.9.1'
|
spec.add_development_dependency 'simplecov', '~> 0.9.1'
|
||||||
|
|
||||||
spec.add_runtime_dependency 'savon', '~> 2.8.0'
|
spec.add_runtime_dependency 'savon', '~> 2.10.0'
|
||||||
spec.add_runtime_dependency 'rubyntlm', '~> 0.4.0'
|
spec.add_runtime_dependency 'rubyntlm', '~> 0.4.0'
|
||||||
spec.add_runtime_dependency 'thor', '~> 0.19.0'
|
spec.add_runtime_dependency 'thor', '~> 0.19.0'
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user