omnivault 0.1.2 → 0.2.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: 00c9028c664419534e4eade9243b01bf6c382c9c
4
- data.tar.gz: 969914eab47a6c27cfb2397edc05bbcab5a7876b
3
+ metadata.gz: 361c058018a7a70bd62b0e7ceb01774feb0d9875
4
+ data.tar.gz: 1d94ffb860e487476c11c82a0975bbd8f3e89408
5
5
  SHA512:
6
- metadata.gz: c6ea74e2e587460a0316c9199c51c7a3e4a7655854266558fac282b9f2cb1421097d46d08e59bce154ec9b20722ca9e398307a6341748598f96ade516ad66afd
7
- data.tar.gz: b48e3359ae7d96c9d54831deac0abb4c2cbea36c3f8b97daf6a1ad8f73949ca33359e00493aac8c94390f0f30797c599607179377b315e09301cea569bcd8db6
6
+ metadata.gz: e296df72737a57880f7924bf1317f6e20777c43551ea1c010a0be5a1849a43d9f016ca2589d2d6f20651e47c17408c91ec1bf2792ca588d6eb15afb8497bf3b3
7
+ data.tar.gz: 89ec90a7965a6a7d724c4f9259bda44278dd3a53c4e2fb054eece69f755570464b8d37df6ec1dea4a4db7be560de758c2ee5d8a9761d237eb2a532488b71cf9f
@@ -1,2 +1,17 @@
1
- rvm:
2
- - "2.1"
1
+ sudo: true
2
+ language: ruby
3
+ cache: bundler
4
+ matrix:
5
+ include:
6
+ - os: osx
7
+ env:
8
+ - BATS_TEST=test/osx.bats
9
+ - os: linux
10
+ env:
11
+ - BATS_TEST=test/linux.bats
12
+ before_install:
13
+ - sudo test/install-bats.sh
14
+ script:
15
+ - bundle exec rake
16
+ - rake build && gem install pkg/omnivault-*.gem
17
+ - BUNDLE_GEMFILE= bats $BATS_TEST
data/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
  [![Build Status](https://travis-ci.org/aptible/omnivault.png?branch=master)](https://travis-ci.org/aptible/omnivault)
5
5
  [![Dependency Status](https://gemnasium.com/aptible/omnivault.png)](https://gemnasium.com/aptible/omnivault)
6
6
 
7
- A Ruby library to abstract keychain functionality for storing and retrieiving arbitrary secrets from a variety of password vaults.
7
+ A Ruby library and CLI tool to abstract keychain functionality for storing and retrieiving arbitrary secrets from a variety of password vaults.
8
8
 
9
9
  Omnivault supports simple key-value secret retrieval with the following password vaults:
10
10
 
@@ -15,15 +15,29 @@ Additionally, it supports automatic credential setup for the following libraries
15
15
 
16
16
  * AWS Ruby SDK (`aws-sdk-v1`, `aws-sdk`)
17
17
 
18
- ## Installation
18
+ ## Installation and Usage (CLI Tool)
19
19
 
20
- Add the following line to your application's Gemfile.
20
+ To install for CLI usage, simply run `gem install omnivault` and then refer to `omnivault help` for usage:
21
+
22
+ ```
23
+ Commands:
24
+ omnivault env [-v VAULT] # Print secret values from vault as source-able ENV variables
25
+ omnivault exec [-v VAULT] COMMAND # Execute command with secret values as ENV variables
26
+ omnivault help [COMMAND] # Describe available commands or one specific command
27
+ omnivault ls [-v VAULT] # List all secret keys from vault
28
+ omnivault set [-v VAULT] KEY1=value1 [KEY2=value2 ...] # Set one or more secret values in vault
29
+ omnivault unset [-v VAULT] KEY1 [KEY2 ...] # Unset one or more secret values in vault
30
+ ```
31
+
32
+ ## Installation (Library)
33
+
34
+ Add the following line(s) to your application's Gemfile.
21
35
 
22
36
  gem 'omnivault'
23
37
 
24
38
  And then run `bundle install`.
25
39
 
26
- ## Usage
40
+ ## Usage (Library)
27
41
 
28
42
  To initialize the the Omnivault, run:
29
43
 
@@ -36,7 +50,8 @@ This will determine an appropriate provider using the following logic:
36
50
  * If the ENV variable `VAULT` is set, it will use that provider, i.e.,
37
51
  - Apple Keychain for `VAULT=apple`
38
52
  - PWS for `VAULT=pws`
39
- * If no ENV variable is set, it will try to use Apple Keychain first, and fall back to PWS if not on Apple OS X.
53
+ * If no ENV variable is set, it will try to use Apple Keychain first on OS X, then PWS. If not on OS X only PWS will be
54
+ used.
40
55
 
41
56
  Then, to use Omnivault, you can:
42
57
 
@@ -56,51 +71,12 @@ Omnivault provides a `configure_aws!` method, which can be used to automatically
56
71
  omnivault.configure_aws!
57
72
  ```
58
73
 
59
- To use this feature, you'll need to set up `aws-keychain-util` or `aws-pws`. With either approach, you can also (optionally) create a new `aws` shell command which wraps the original [AWS CLI](https://aws.amazon.com/cli/) to provide authenticated access to your AWS credentials.
60
-
61
- ### Apple Keychain
62
-
63
- To set up AWS credentials using `aws-keychain-util`:
64
-
65
- 1. `gem install -N aws-keychain-util`
66
- 2. `aws-creds init`
67
- 3. `aws-creds add`
68
-
69
- - Use 'default' for the account name
70
- - Leave the MFA ARN blank
71
-
72
- 4. (Optional) Add the following file as `aws` somewhere on your `PATH` with higher precedence than `/usr/local/bin`. (`$HOME/.bin` is a good choice.) Make it executable by running `chmod +x aws-safe`.
73
-
74
- #!/bin/bash
75
- # $HOME/.bin/aws
74
+ To use this feature, you'll need to set the `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY` secrets in Omnivault:
76
75
 
77
- set -e
78
-
79
- export $(aws-creds cat default)
80
- /usr/local/bin/aws $@
81
-
82
-
83
- ### PWS
84
-
85
- On Linux, you can use PWS instead:
86
-
87
- 1. `gem install -N aws-pws`
88
- 2. `aws-pws init`
89
- 3. (Optional) Add the following file as `aws` somewhere on your `PATH` with higher precedence than `/usr/local/bin`.
90
-
91
- #!/bin/bash
92
- # $HOME/.bin/aws
93
-
94
- set -e
95
-
96
- export $(aws-pws cat)
97
- /usr/local/bin/aws $@
98
-
99
- ## TODO
76
+ ```
77
+ omnivault set AWS_ACCESS_KEY_ID=... AWS_SECRET_ACCESS_KEY=...
78
+ ```
100
79
 
101
- * Add support for 1Password keychains.
102
- * Write RSpec unit tests.
103
- * Remove dependence on AWS-specific gems directly
104
80
 
105
81
  ## Contributing
106
82
 
@@ -113,6 +89,6 @@ On Linux, you can use PWS instead:
113
89
 
114
90
  MIT License, see [LICENSE](LICENSE.md) for details.
115
91
 
116
- Copyright (c) 2015 [Aptible](https://www.aptible.com), Frank Macreery, and contributors.
92
+ Copyright (c) 2017 [Aptible](https://www.aptible.com), Frank Macreery, and contributors.
117
93
 
118
94
  [<img src="https://s.gravatar.com/avatar/f7790b867ae619ae0496460aa28c5861?s=60" style="border-radius: 50%;" alt="@fancyremarker" />](https://github.com/fancyremarker)
data/Rakefile CHANGED
@@ -1,4 +1,8 @@
1
1
  require 'bundler/gem_tasks'
2
2
 
3
- require 'aptible/tasks'
4
- Aptible::Tasks.load_tasks
3
+ begin
4
+ require 'aptible/tasks'
5
+ Aptible::Tasks.load_tasks
6
+ rescue LoadError
7
+ task :default
8
+ end
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ begin
4
+ require 'omnivault/cli'
5
+ rescue
6
+ require 'rubygems'
7
+ require 'omnivault/cli'
8
+ end
9
+
10
+ Omnivault::CLI.start
@@ -0,0 +1,17 @@
1
+ require 'rubygems'
2
+ require 'rubygems/command'
3
+ require 'rubygems/dependency_installer'
4
+
5
+ begin
6
+ Gem::Command.build_args = ARGV
7
+ rescue NoMethodError
8
+ end
9
+
10
+ inst = Gem::DependencyInstaller.new
11
+ begin
12
+ inst.install 'ruby-keychain' if RbConfig::CONFIG['host_os'] =~ /darwin/
13
+ rescue => e
14
+ puts e.message
15
+ puts e.backtrace
16
+ exit 1
17
+ end
@@ -5,7 +5,8 @@ require_relative 'omnivault/apple_keychain'
5
5
  require_relative 'omnivault/pws'
6
6
 
7
7
  module Omnivault
8
- def self.autodetect
9
- Omnivault::AbstractVault.from_env || Omnivault::AbstractVault.for_platform
8
+ def self.autodetect(name = 'default')
9
+ Omnivault::AbstractVault.from_env(name) ||
10
+ Omnivault::AbstractVault.for_platform(name)
10
11
  end
11
12
  end
@@ -1,22 +1,62 @@
1
1
  module Omnivault
2
2
  class AbstractVault
3
- def self.from_env
3
+ def self.from_env(name = 'default')
4
4
  case ENV['VAULT']
5
- when 'apple', 'AppleKeychain'
6
- AppleKeychain.new
5
+ when 'apple', 'keychain', 'AppleKeychain'
6
+ AppleKeychain.new(name)
7
7
  when 'pws', 'PWS'
8
- PWS.new
8
+ PWS.new(name)
9
9
  end
10
10
  end
11
11
 
12
- def self.for_platform
12
+ def self.for_platform(name = 'default')
13
13
  if (/darwin/ =~ RUBY_PLATFORM).nil?
14
- PWS.new
14
+ PWS.new(name)
15
15
  else
16
- AppleKeychain.new
16
+ AppleKeychain.new(name)
17
17
  end
18
- rescue LoadError
19
- PWS.new
18
+ rescue LoadError => e
19
+ puts e.message
20
+ puts e.backtrace
21
+ PWS.new(name)
22
+ end
23
+
24
+ # Either aws-sdk and/or aws-sdk-v1 must be required BEFORE calling
25
+ # Omnivault::AbstractVault#configure_aws!
26
+ def configure_aws!
27
+ if defined?(Aws)
28
+ require_relative 'v2_credential_provider'
29
+
30
+ provider = V2CredentialProvider.new(self)
31
+ Aws.config[:credentials] = provider
32
+ end
33
+
34
+ if defined?(AWS)
35
+ require_relative 'v1_credential_provider'
36
+
37
+ provider = V1CredentialProvider.new(self)
38
+ AWS.config(credential_provider: provider)
39
+ end
40
+ end
41
+
42
+ def initialize(_name = 'default')
43
+ raise NotImplementedError, 'Must invoke from subclass'
44
+ end
45
+
46
+ def entries
47
+ raise NotImplementedError, 'Must invoke from subclass'
48
+ end
49
+
50
+ def fetch(key)
51
+ entries[key]
52
+ end
53
+
54
+ def store(_key, _value)
55
+ raise NotImplementedError, 'Must invoke from subclass'
56
+ end
57
+
58
+ def remove(_key)
59
+ raise NotImplementedError, 'Must invoke from subclass'
20
60
  end
21
61
  end
22
62
  end
@@ -1,25 +1,22 @@
1
1
  module Omnivault
2
2
  class AppleKeychain < AbstractVault
3
- def initialize
3
+ attr_accessor :keychain
4
+
5
+ def initialize(name = 'default')
4
6
  # Need to require within initializer, to avoid LoadError on
5
7
  # non-Apple platforms
6
8
  require 'keychain'
7
- require 'aws-keychain-util/credential_provider'
9
+
10
+ @keychain = open_or_create_keychain(name)
8
11
  end
9
12
 
10
13
  def entries
11
- keychain = open_or_create_keychain
12
14
  Hash[keychain.generic_passwords.all.map do |item|
13
15
  [item.label, item.password]
14
16
  end]
15
17
  end
16
18
 
17
- def fetch(key)
18
- entries[key]
19
- end
20
-
21
19
  def store(key, value)
22
- keychain = open_or_create_keychain
23
20
  if (entry = keychain.generic_passwords.where(label: key).all.first)
24
21
  entry.password = value
25
22
  entry.save!
@@ -32,18 +29,18 @@ module Omnivault
32
29
  end
33
30
  end
34
31
 
35
- def configure_aws!
36
- provider = ::AwsKeychainUtil::CredentialProvider.new('default', 'aws')
37
- AWS.config(credential_provider: provider)
32
+ def remove(key)
33
+ entry = keychain.generic_passwords.where(label: key).all.first
34
+ entry.delete
38
35
  end
39
36
 
40
37
  private
41
38
 
42
- def open_or_create_keychain(name = 'aptible-cookbook')
43
- keychain = Keychain.open("#{name}.keychain")
39
+ def open_or_create_keychain(name)
40
+ keychain = Keychain.open("omnivault-#{name}.keychain")
44
41
  return keychain if keychain.exists?
45
42
 
46
- Keychain.create("#{name}.keychain")
43
+ Keychain.create("omnivault-#{name}.keychain")
47
44
  end
48
45
  end
49
46
  end
@@ -0,0 +1,83 @@
1
+ require 'thor'
2
+ require 'omnivault'
3
+ require 'shellwords'
4
+
5
+ module Omnivault
6
+ class CLI < Thor
7
+ include Thor::Actions
8
+
9
+ # Forward return codes on failures.
10
+ def self.exit_on_failure?
11
+ true
12
+ end
13
+
14
+ def self.default_options
15
+ option :vault, aliases: '-v', default: 'default'
16
+ end
17
+
18
+ def self.default_option_desc
19
+ '[-v VAULT]'
20
+ end
21
+
22
+ desc "set #{default_option_desc} KEY1=value1 [KEY2=value2 ...]",
23
+ 'Set one or more secret values in vault'
24
+ default_options
25
+ def set(*args)
26
+ raise ArgumentError, 'Wrong number of arguments' if args.empty?
27
+
28
+ hash = Hash[args.map { |arg| arg.split('=', 2) }]
29
+ hash.each do |key, value|
30
+ vault_by_name(options[:vault]).store(key, value)
31
+ end
32
+ end
33
+
34
+ desc "unset #{default_option_desc} KEY1 [KEY2 ...]",
35
+ 'Unset one or more secret values in vault'
36
+ default_options
37
+ def unset(*args)
38
+ raise ArgumentError, 'Wrong number of arguments' if args.empty?
39
+
40
+ vault = vault_by_name(options[:vault])
41
+ missing = args - vault.entries.keys
42
+ raise Thor::Error, "Keys not found: #{missing.join(', ')}" if missing.any?
43
+ args.each do |key|
44
+ vault.remove(key)
45
+ end
46
+ end
47
+
48
+ desc "env #{default_option_desc}",
49
+ 'Print secret values from vault as source-able ENV variables'
50
+ default_options
51
+ def env
52
+ vault_by_name(options[:vault]).entries.each do |key, value|
53
+ say "#{key}=#{Shellwords.escape(value)}"
54
+ end
55
+ end
56
+
57
+ desc "exec #{default_option_desc} COMMAND",
58
+ 'Execute command with secret values as ENV variables'
59
+ default_options
60
+ def exec(*args)
61
+ vault_by_name(options[:vault]).entries.each do |key, value|
62
+ ENV[key] = value
63
+ end
64
+ system(*args)
65
+ end
66
+
67
+ desc "ls #{default_option_desc}",
68
+ 'List all secret keys from vault'
69
+ default_options
70
+ def ls
71
+ vault_by_name(options[:vault]).entries.keys.each do |key|
72
+ say key
73
+ end
74
+ end
75
+
76
+ private
77
+
78
+ def vault_by_name(name)
79
+ @vaults ||= {}
80
+ @vaults[name] ||= Omnivault.autodetect(name)
81
+ end
82
+ end
83
+ end
@@ -1,27 +1,24 @@
1
- require 'aws/pws'
2
- require 'aws/pws/credential_provider'
3
-
4
1
  module Omnivault
5
2
  class PWS < AbstractVault
6
- attr_accessor :client
3
+ attr_accessor :cli, :raw_data
7
4
 
8
- def entries
9
- @client ||= AWS::PWS::Client.new
10
- Hash[@client.raw_data.map { |k, v| [k, v[:password]] }]
5
+ def initialize(name = 'default')
6
+ require 'pws'
7
+
8
+ @cli ||= ::PWS.new(namespace: name)
9
+ @raw_data = @cli.instance_variable_get(:@data)
11
10
  end
12
11
 
13
- def fetch(key)
14
- entries[key]
12
+ def entries
13
+ Hash[raw_data.map { |k, v| [k, v[:password]] }]
15
14
  end
16
15
 
17
16
  def store(key, value)
18
- @client ||= AWS::PWS::Client.new
19
- @client.cli.add(key, value)
17
+ cli.add(key, value)
20
18
  end
21
19
 
22
- def configure_aws!
23
- provider = AWS::PWS::CredentialProvider.new
24
- AWS.config(credential_provider: provider)
20
+ def remove(key)
21
+ cli.remove(key)
25
22
  end
26
23
  end
27
24
  end
@@ -0,0 +1,22 @@
1
+ require 'aws-sdk-v1'
2
+
3
+ module Omnivault
4
+ class V1CredentialProvider
5
+ include AWS::Core::CredentialProviders::Provider
6
+
7
+ attr_accessor :vault
8
+
9
+ def initialize(vault)
10
+ @vault = vault
11
+ end
12
+
13
+ # rubocop:disable AccessorMethodName
14
+ def get_credentials
15
+ {
16
+ access_key_id: vault.fetch('AWS_ACCESS_KEY_ID'),
17
+ secret_access_key: vault.fetch('AWS_SECRET_ACCESS_KEY')
18
+ }
19
+ end
20
+ # rubocop:enable AccessorMethodName
21
+ end
22
+ end
@@ -0,0 +1,18 @@
1
+ require 'aws-sdk'
2
+
3
+ module Omnivault
4
+ class V2CredentialProvider
5
+ include Aws::CredentialProvider
6
+
7
+ attr_accessor :vault
8
+
9
+ def initialize(vault)
10
+ @vault = vault
11
+ end
12
+
13
+ def credentials
14
+ Aws::Credentials.new(vault.fetch('AWS_ACCESS_KEY_ID'),
15
+ vault.fetch('AWS_SECRET_ACCESS_KEY'))
16
+ end
17
+ end
18
+ end
@@ -1,3 +1,3 @@
1
1
  module Omnivault
2
- VERSION = '0.1.2'
2
+ VERSION = '0.2.0'.freeze
3
3
  end
@@ -16,16 +16,19 @@ Gem::Specification.new do |spec|
16
16
  spec.license = 'MIT'
17
17
 
18
18
  spec.files = `git ls-files`.split($RS)
19
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
19
20
  spec.test_files = spec.files.grep(%r{^spec/})
20
21
  spec.require_paths = ['lib']
22
+ spec.extensions = 'ext/mkrf_conf.rb'
21
23
 
22
- spec.add_dependency 'aws-pws'
23
-
24
- # aws-keychain-util is an optional dependency if using Mac OS X.
25
- # spec.add_dependency 'aws-keychain-util'
24
+ spec.add_dependency 'thor'
25
+ spec.add_dependency 'pws'
26
26
 
27
27
  spec.add_development_dependency 'bundler'
28
28
  spec.add_development_dependency 'aptible-tasks'
29
29
  spec.add_development_dependency 'rake'
30
30
  spec.add_development_dependency 'rspec', '~> 2.0'
31
+ spec.add_development_dependency 'aws-sdk', '~> 2'
32
+ spec.add_development_dependency 'aws-sdk-v1'
33
+ spec.add_development_dependency 'pry'
31
34
  end
@@ -0,0 +1,36 @@
1
+ require 'spec_helper'
2
+
3
+ describe Omnivault::AbstractVault do
4
+ before do
5
+ # Override parent class initialization exception in tests
6
+ described_class.send(:define_method, :initialize) {}
7
+ end
8
+
9
+ describe '#configure_aws!' do
10
+ before do
11
+ allow(subject).to receive(:entries) do
12
+ {
13
+ 'AWS_ACCESS_KEY_ID' => 'id',
14
+ 'AWS_SECRET_ACCESS_KEY' => 'secret'
15
+ }
16
+ end
17
+ end
18
+
19
+ it 'configures credentials for aws-sdk-v1' do
20
+ require 'aws-sdk-v1'
21
+ subject.configure_aws!
22
+ v1_credentials = AWS.config.credential_provider.credentials
23
+ expect(v1_credentials[:access_key_id]).to eq 'id'
24
+ expect(v1_credentials[:secret_access_key]).to eq 'secret'
25
+ end
26
+
27
+ it 'configures credentials for aws-sdk-v2' do
28
+ require 'aws-sdk'
29
+ subject.configure_aws!
30
+
31
+ v2_credentials = Aws.config[:credentials].credentials
32
+ expect(v2_credentials.access_key_id).to eq 'id'
33
+ expect(v2_credentials.secret_access_key).to eq 'secret'
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,8 @@
1
+ #!/bin/sh
2
+
3
+ cd /tmp
4
+ git clone https://github.com/sstephenson/bats.git
5
+ cd bats/
6
+ ./install.sh /usr/local
7
+ cd ..
8
+ rm -rf bats/
@@ -0,0 +1,26 @@
1
+ #!/usr/bin/env bats
2
+
3
+ setup() {
4
+ echo 'foobar
5
+ foobar' | pws -bats add FOO bar
6
+ }
7
+
8
+ teardown() {
9
+ rm -f $HOME/.pws-bats
10
+ }
11
+
12
+ @test "It should install the ruby-keychain gem" {
13
+ run gem list ruby-keychain
14
+ [[ ! "$output" =~ "ruby-keychain" ]]
15
+ }
16
+
17
+ @test "It should print secrets via omnivault env" {
18
+ run bash -c "echo foobar | omnivault env -v bats"
19
+ echo $output > $HOME/bats.out
20
+ [[ "$output" =~ "FOO=bar" ]]
21
+ }
22
+
23
+ @test "It should run a shell with secrets in ENV via omnivault exec" {
24
+ run bash -c "echo foobar | omnivault exec -v bats env"
25
+ [[ "$output" =~ "FOO=bar" ]]
26
+ }
@@ -0,0 +1,26 @@
1
+ #!/usr/bin/env bats
2
+
3
+ setup() {
4
+ security create-keychain -p foobar omnivault-bats.keychain
5
+ security add-generic-password -A -a FOO -s FOO -w bar omnivault-bats.keychain
6
+ security unlock-keychain -p foobar omnivault-bats.keychain
7
+ }
8
+
9
+ teardown() {
10
+ rm -f $HOME/Library/Keychains/omnivault-bats.keychain
11
+ }
12
+
13
+ @test "It should install the ruby-keychain gem" {
14
+ run gem list ruby-keychain
15
+ [[ "$output" =~ "ruby-keychain" ]]
16
+ }
17
+
18
+ @test "It should print secrets via omnivault env" {
19
+ run omnivault env -v bats
20
+ [[ "$output" =~ "FOO=bar" ]]
21
+ }
22
+
23
+ @test "It should run a shell with secrets in ENV via omnivault exec" {
24
+ run omnivault exec -v bats env
25
+ [[ "$output" =~ "FOO=bar" ]]
26
+ }
metadata CHANGED
@@ -1,106 +1,173 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: omnivault
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Frank Macreery
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-12-01 00:00:00.000000000 Z
11
+ date: 2017-03-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: aws-pws
14
+ name: thor
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: pws
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
25
39
  - !ruby/object:Gem::Version
26
40
  version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: bundler
29
43
  requirement: !ruby/object:Gem::Requirement
30
44
  requirements:
31
- - - '>='
45
+ - - ">="
32
46
  - !ruby/object:Gem::Version
33
47
  version: '0'
34
48
  type: :development
35
49
  prerelease: false
36
50
  version_requirements: !ruby/object:Gem::Requirement
37
51
  requirements:
38
- - - '>='
52
+ - - ">="
39
53
  - !ruby/object:Gem::Version
40
54
  version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: aptible-tasks
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
- - - '>='
59
+ - - ">="
46
60
  - !ruby/object:Gem::Version
47
61
  version: '0'
48
62
  type: :development
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
- - - '>='
66
+ - - ">="
53
67
  - !ruby/object:Gem::Version
54
68
  version: '0'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: rake
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
- - - '>='
73
+ - - ">="
60
74
  - !ruby/object:Gem::Version
61
75
  version: '0'
62
76
  type: :development
63
77
  prerelease: false
64
78
  version_requirements: !ruby/object:Gem::Requirement
65
79
  requirements:
66
- - - '>='
80
+ - - ">="
67
81
  - !ruby/object:Gem::Version
68
82
  version: '0'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: rspec
71
85
  requirement: !ruby/object:Gem::Requirement
72
86
  requirements:
73
- - - ~>
87
+ - - "~>"
74
88
  - !ruby/object:Gem::Version
75
89
  version: '2.0'
76
90
  type: :development
77
91
  prerelease: false
78
92
  version_requirements: !ruby/object:Gem::Requirement
79
93
  requirements:
80
- - - ~>
94
+ - - "~>"
81
95
  - !ruby/object:Gem::Version
82
96
  version: '2.0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: aws-sdk
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '2'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '2'
111
+ - !ruby/object:Gem::Dependency
112
+ name: aws-sdk-v1
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: pry
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
83
139
  description: Abstract password vault for multiple providers
84
140
  email:
85
141
  - frank@macreery.com
86
- executables: []
87
- extensions: []
142
+ executables:
143
+ - omnivault
144
+ extensions:
145
+ - ext/mkrf_conf.rb
88
146
  extra_rdoc_files: []
89
147
  files:
90
- - .gitignore
91
- - .rspec
92
- - .travis.yml
148
+ - ".gitignore"
149
+ - ".rspec"
150
+ - ".travis.yml"
93
151
  - Gemfile
94
152
  - LICENSE.md
95
153
  - README.md
96
154
  - Rakefile
155
+ - bin/omnivault
156
+ - ext/mkrf_conf.rb
97
157
  - lib/omnivault.rb
98
158
  - lib/omnivault/abstract_vault.rb
99
159
  - lib/omnivault/apple_keychain.rb
160
+ - lib/omnivault/cli.rb
100
161
  - lib/omnivault/pws.rb
162
+ - lib/omnivault/v1_credential_provider.rb
163
+ - lib/omnivault/v2_credential_provider.rb
101
164
  - lib/omnivault/version.rb
102
165
  - omnivault.gemspec
166
+ - spec/omnivault/abstract_vault_spec.rb
103
167
  - spec/spec_helper.rb
168
+ - test/install-bats.sh
169
+ - test/linux.bats
170
+ - test/osx.bats
104
171
  homepage: https://github.com/aptible/omnivault
105
172
  licenses:
106
173
  - MIT
@@ -111,19 +178,20 @@ require_paths:
111
178
  - lib
112
179
  required_ruby_version: !ruby/object:Gem::Requirement
113
180
  requirements:
114
- - - '>='
181
+ - - ">="
115
182
  - !ruby/object:Gem::Version
116
183
  version: '0'
117
184
  required_rubygems_version: !ruby/object:Gem::Requirement
118
185
  requirements:
119
- - - '>='
186
+ - - ">="
120
187
  - !ruby/object:Gem::Version
121
188
  version: '0'
122
189
  requirements: []
123
190
  rubyforge_project:
124
- rubygems_version: 2.4.5
191
+ rubygems_version: 2.6.4
125
192
  signing_key:
126
193
  specification_version: 4
127
194
  summary: Abstract password vault for multiple providers
128
195
  test_files:
196
+ - spec/omnivault/abstract_vault_spec.rb
129
197
  - spec/spec_helper.rb