9 Commits

Author SHA1 Message Date
Jason Davis-Cooke
e0e5bfd276 Merge pull request #6 from Cimpress-MCP/savepasswords
Savepasswords
2015-02-26 19:00:35 +00:00
Jason Davis-Cooke
3969d508f8 version bump 2015-02-26 13:46:32 -05:00
Jason Davis-Cooke
2ee47c2210 Save username and password to a Normariffic yaml file 2015-02-26 11:53:48 -05:00
Jason Davis-Cooke
8778c7b27d remove base64 encoding 2015-02-26 09:35:09 -05:00
Jason Davis-Cooke
431c86bb0e remove incorrect code documentation 2015-02-26 08:57:47 -05:00
Jason Davis-Cooke
179fa24ab9 Save zanzifile passwords to disk 2015-02-26 08:56:43 -05:00
Jason Davis-Cooke
ed496bd416 Save zanzifile passwords to file 2015-02-25 14:28:43 -05:00
Jason Davis-Cooke
4b4549c9c5 require. not include. 2015-02-06 14:56:20 -05:00
Jason Davis-Cooke
9d7b150712 Require pathname 2015-02-06 14:47:42 -05:00
6 changed files with 49 additions and 7 deletions

View File

@@ -2,6 +2,7 @@ require 'zanzibar/version'
require 'savon' require 'savon'
require 'io/console' require 'io/console'
require 'fileutils' require 'fileutils'
require 'yaml'
module Zanzibar module Zanzibar
## ##
@@ -123,12 +124,29 @@ module Zanzibar
raise "There was an error getting the password for secret #{scrt_id}: #{err}" raise "There was an error getting the password for secret #{scrt_id}: #{err}"
end end
## Get the password, save it to a file, and return the path to the file.
def get_username_and_password_and_save(scrt_id, path, name)
secret_items = get_secret(scrt_id)[:secret][:items][:secret_item]
password = get_secret_item_by_field_name(secret_items, 'Password')[:value]
username = get_secret_item_by_field_name(secret_items, 'Username')[:value]
save_username_and_password_to_file(password, username, path, name)
return File.join(path, name)
end
def write_secret_to_file(path, secret_response) def write_secret_to_file(path, secret_response)
File.open(File.join(path, secret_response[:file_name]), 'wb') do |file| File.open(File.join(path, secret_response[:file_name]), 'wb') do |file|
file.puts Base64.decode64(secret_response[:file_attachment]) file.puts Base64.decode64(secret_response[:file_attachment])
end end
end end
## Write the password to a file. Intended for use with a Zanzifile
def save_username_and_password_to_file(password, username, path, name)
user_pass = {'username' => username.to_s, 'password' => password.to_s}.to_yaml
File.open(File.join(path, name), 'wb') do |file|
file.print user_pass
end
end
def get_secret_item_by_field_name(secret_items, field_name) def get_secret_item_by_field_name(secret_items, field_name)
secret_items.each do |item| secret_items.each do |item|
return item if item[:field_name] == field_name return item if item[:field_name] == field_name

View File

@@ -20,6 +20,7 @@ module Zanzibar
def run def run
ensure_zanzifile ensure_zanzifile
load_required_secrets load_required_secrets
ensure_secrets_path
validate_environment validate_environment
load_resolved_secrets if resolved_file? load_resolved_secrets if resolved_file?
validate_local_secrets unless @update validate_local_secrets unless @update
@@ -42,6 +43,10 @@ module Zanzibar
debug { "#{ZANZIFILE_NAME} located..." } debug { "#{ZANZIFILE_NAME} located..." }
end end
def ensure_secrets_path
FileUtils.mkdir_p(@settings['secret_dir']) unless @settings['secret_dir'] == nil
end
def resolved_file? def resolved_file?
File.exist? RESOLVED_NAME File.exist? RESOLVED_NAME
end end
@@ -83,20 +88,25 @@ module Zanzibar
downloaded_secrets[key] = download_one_secret(secret['id'], downloaded_secrets[key] = download_one_secret(secret['id'],
secret['label'], secret['label'],
@settings['secret_dir'], @settings['secret_dir'],
args) args,
secret['name'] || "#{secret['id']}_password")
debug { "Downloaded secret: #{key} to #{path}..." } debug { "Downloaded secret: #{key} to #{@settings['secret_dir']}..." }
end end
downloaded_secrets downloaded_secrets
end end
def download_one_secret(scrt_id, label, path, args) def download_one_secret(scrt_id, label, path, args, name = nil)
path = zanzibar(args).download_secret_file(scrt_id: scrt_id, if label == 'Password'
path = zanzibar(args).get_username_and_password_and_save(scrt_id, path, name)
{ path: path, hash: Digest::MD5.file(path).hexdigest }
else
path = zanzibar(args).download_secret_file(scrt_id: scrt_id,
type: label, type: label,
path: path) path: path)
{ path: path, hash: Digest::MD5.file(path).hexdigest }
{ path: path, hash: Digest::MD5.file(path).hexdigest } end
end end
def update_resolved_file(new_secrets) def update_resolved_file(new_secrets)

View File

@@ -53,6 +53,7 @@ module Zanzibar
end end
desc 'plunder', "Alias to `#{APPLICATION_NAME} bundle`", :hide => true desc 'plunder', "Alias to `#{APPLICATION_NAME} bundle`", :hide => true
option 'verbose', type: :boolean, default: false, aliases: :v
alias_method :plunder, :bundle alias_method :plunder, :bundle
desc 'install', "Alias to `#{APPLICATION_NAME} bundle`" desc 'install', "Alias to `#{APPLICATION_NAME} bundle`"

View File

@@ -1,3 +1,5 @@
require 'pathname'
# Definitions for various strings used throughout the gem # Definitions for various strings used throughout the gem
module Zanzibar module Zanzibar
APPLICATION_NAME = Pathname.new($PROGRAM_NAME).basename APPLICATION_NAME = Pathname.new($PROGRAM_NAME).basename

View File

@@ -1,4 +1,4 @@
# The version of the gem # The version of the gem
module Zanzibar module Zanzibar
VERSION = '0.1.15' VERSION = '0.1.17'
end end

View File

@@ -104,6 +104,17 @@ describe 'Zanzibar Test' do
File.delete('attachment.txt') File.delete('attachment.txt')
end end
it 'should save credentials to a file' do
stub_request(:any, 'https://www.zanzitest.net/webservices/sswebservice.asmx')
.to_return(body: AUTH_XML, status: 200).then
.to_return(body: SECRET_XML, status: 200)
client.get_username_and_password_and_save(1234, '.', 'zanziTestCreds')
expect(File.exist? 'zanziTestCreds')
expect(File.read('zanziTestCreds')).to eq({'username' => 'ZanziUser', 'password' => 'zanziUserPassword'}.to_yaml)
File.delete('zanziTestCreds')
end
it 'should use environment variables for credentials' do it 'should use environment variables for credentials' do
ENV['ZANZIBAR_USER'] = 'environment_user' ENV['ZANZIBAR_USER'] = 'environment_user'
ENV['ZANZIBAR_PASSWORD'] = 'environment_password' ENV['ZANZIBAR_PASSWORD'] = 'environment_password'