smart_proxy_vault 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.
@@ -0,0 +1,11 @@
1
+ FactoryGirl.define do
2
+ factory :rsa, class: OpenSSL::PKey::RSA do
3
+ skip_create
4
+
5
+ transient do
6
+ file nil
7
+ end
8
+
9
+ initialize_with { new(File.read(file)) }
10
+ end
11
+ end
@@ -0,0 +1,27 @@
1
+ -----BEGIN RSA PRIVATE KEY-----
2
+ MIIEowIBAAKCAQEA1HErnHpWXQansmIIjhdxfaFrA5CO+Zfz5Q7RIB4KbM4hwi/L
3
+ 0KrfOL5r6mGsBiTU4jYMMSRYZx5djIF718taLu4oM18ydzHOsaDROWuDLfLm33xI
4
+ u6U3n8gQCgDXxJghQzjEaC4Dv4DLYmHXkrEXd+O6dIrCW7tMCCQ+bBojkyMx0U2z
5
+ V1JQUjaBzxaY34a7Lkvp32QdcCazMrV+VYExIECChaBDG+kgPGihPGPEqzzcNOgT
6
+ LCrEnhElX6yT2qIhTJKW9/babMuc/ETgT1EwotWLiRMshg2ebvHkNaGYEUtPUvQp
7
+ BwGhxZoltlzZTjsj/+RB+65Ao6tZ8XSIfWGLJQIDAQABAoIBAQCssAXMX+G+Ir/E
8
+ kE31+vaFMeaEckjWeP+H7eBupBzDT1g/uoyJ5awoOxoL3zNvlxb5fwewFqRJxnQy
9
+ 17psst9vEKbbA4JJQ9KJr3kDnPJ4MmAbwLJ63hV2K7FmAENkimlXdFireuQPEknB
10
+ glky5AN4sEQLohPVb02hvJyFUUYjvlbfGhu0hJNIFtddTJ+kLANpB6AIw8EBnkZN
11
+ U1G7aOxbEsrKPFClTofHlcHRnaVmbw3aoi5FK9hWSEXTQv9WITcNbux+IpxFCWVg
12
+ t1aei+pS7Ylo9ZjqcH8pla2xhndGtbjrWh7JSEiMLXRtGBwO01cNHfKQAn2L3Y5O
13
+ yOTbjXYBAoGBAPwuf46opRMQTO+sjmz0OK1DtHwfkNRdus5d4a95+xmrhn4NFuem
14
+ 4c/J0ri//U/i4NbUWySdS0SIvV0aK7iWOZtw9m7drzBxdMI8ZhdftMepAs/feT76
15
+ h9u/Ihvq+QTK5dq/esu43Z8IUSdaLFfzHigQsRIuUxl8bFd1hU1hRv2BAoGBANeo
16
+ omQGSvqLkwcOJvGGRHgyr/NWrH4ENxoLO0YLEggnzO1xbItfvB5NZMtuM+Xqqczn
17
+ uPM7ap68kCl/UEfBDwQVfJ03NUp2Bg8G/L2JvOthuhu+rE8uguTAikZ1Fvi2S7M0
18
+ eG0/a9kVarSkX8kGRXX9gXgEupYTUoJjhtbdwaelAoGAEw0UN9vHtLv7g/O+Qr7k
19
+ dTpzLRlZYKHAFg0DmrUVYigSHf2xKEj0MDVoBOsEIP/byn76b7auU/wciicK/IPk
20
+ 0DhldZSrwnYfwvi7IbLqPlcnTjrstvRIRTKYShGjRFhrqu3iQfeyTmxbbSSjyvUj
21
+ 5xTzu5LiVj+PE8BeFK1vpoECgYB1fFoTcdYxDg6oHk6a75Gnhb2TLJnGARffqVS+
22
+ QNOu+7fJdywx9ZKvU2xg4wWE8MVWarq4T5szJPjIkqIypPtAN1Bu+Z+flBKS5zST
23
+ MVFpThEsgkCu1mDarAXogmtkTTOKSkB9C7r+RYufI5lHE5KNx/BbaQAZOCeP/xZ7
24
+ Qc35PQKBgGYpFugtnwKhzVTVTRFNcJRpq067ipF+7wuPTxp7QwGrQaskkvmk7hwF
25
+ pH8bkz66Qbkpt4d1X19iNjWDk50o/qdrrpgy58Smmm0fGasu8D38GCLX1bHuyt1g
26
+ gcH5fJhMRpcja71fpm+4x2TtbfQHwEP0DB3+v+HIjrrRAPw4+pBD
27
+ -----END RSA PRIVATE KEY-----
@@ -0,0 +1,27 @@
1
+ -----BEGIN RSA PRIVATE KEY-----
2
+ MIIEpAIBAAKCAQEAvTDysb7cu7imRl9Qsh/L1qH3+it7a1oZR2Da0Gx7pWNnEfbb
3
+ 5bafinjZH1Bqf7EWzOYW+FnRkosuRBJ5yStXJFAGPsocorQ22nY9YVpovnSQItx5
4
+ QilWgw8SfNnhG5KNGFpp6pdh7p6lB0jCIz0q7d4x+obnnnUL6vGAvfGR8UDjcvtG
5
+ KAuPd1iS44FdcA2MvClj6ZUTg12UmYJHltGype59Ng98h4C2dxfWUAXK9EODuvDI
6
+ OakwQPr8w3To07EqtNc0mbv6miPYKiRbYA/0/t+ExJqnk685Vr2Y6Yq2GP/DZTGG
7
+ ZwILmMXaoQ7p9sMILVSQ7hNFht2B/U++bop5qwIDAQABAoIBAFaBYRcg3DEBdxXK
8
+ U01++GdFW+uJoj8tzU0z3hla4RZ4YxJ1u4pHfJ+GLlEBJhEI2hIKSwp3lznYZek+
9
+ QW1YYdn6tUBUjc9fc41kbyBqhGZBSf6GrPMxj5sRczSfMyy2T8mI3dEkMuU2qOKx
10
+ xAL03wIwjM2ujY2Im1Br6J/xKvgSGCGSsf3MSD5n0dkpaSqGSMFYbd2UebCxj3nR
11
+ cPknFEXTVpWNkY/Ijg/VE7TPGY6U9FXvT/MA1HAgseHu+bzN22cghDCcvRFCAHsi
12
+ dp8TzxzQQSuem0gIA72J87T8IKErzIJOu5BnPbQozaFNHAvv4QIuAEoC2YAwIdLs
13
+ lHDYXaECgYEA4JzcE8K4s6U+JWMzYZAVUJj210x6tz4Oy2EBturfVMGzOjBW5ec1
14
+ bhhofcIOAWlU0qsWMNdbI7n1YUGRrIXDYAqBFDDqnFrxFTaO9UCxCbVeRuv31nCA
15
+ 2YK3CmndwRhl1/tijLXdz3qKoPAPY4oWYinFMq1AxNPY7HYYbPIBBdkCgYEA16Dx
16
+ bVagmYnCq/WW533mijlL8iOIb1Qpc5ugpVuXN7sOtwvEqJ+O8dfH78iz6x6V40DK
17
+ kM2dltSmscg9lty8xSNf43iUj8vgIr5AAUji2xWRl9KFZ3jShZM4joq/r8aXK+Uk
18
+ VpiZYDEbabgmn54SHUYeW28U3nnECHCXOkV+9SMCgYBP7IEDJw7CHdJ3S01FMhfj
19
+ jgqHodcozRRGmkYZ6Il/h01XL0w8koEYo+bKmPqS1gAw1mAXEQqFM+50pPhJA2/6
20
+ BMLZhG53JIUUn01PR623XqolYmHWFEJFI5YuRm16AEx9Bh6TI0PCSEB78/AF42UD
21
+ mQlqduvNHfTab0tRuOtUQQKBgQDPeBJzYmNZ95uwOrd8er3kBucUzq2KeI79piL2
22
+ l16zB69L3e3VVNiDx1ufUhwSwLX1FzUQCFZ1dpwA+KqRykdy4utzAWTnyoEYzLbm
23
+ xYtIwsL4Ml2bRjxAu3syYzu2U7zGRk4lZ+RDElzO5pl7AOtq8TlqPkH1IXHFsRdA
24
+ wPc7wwKBgQCu4qfs2ZRMQ6U33uEos72NNyP3U8dXf2t1uzCJeUQyJW3YjPnI2u4G
25
+ VbFRnQz3YzDzCwcA0QWvP5zaYnh4BGm+FmTvkpxwRwnvEoN6SkQl0UCkCMRnnn3b
26
+ lV/ydwWLv4dPoSFFSBs6SZEZXUS+C87d0/dpzVmMkJn0xAP4s3ufaA==
27
+ -----END RSA PRIVATE KEY-----
@@ -0,0 +1,72 @@
1
+ require 'test_helper'
2
+ require 'smart_proxy_vault'
3
+
4
+ class RequestTest < Test::Unit::TestCase
5
+ include Rack::Test::Methods
6
+
7
+ ###
8
+ # Helper Methods
9
+ ###
10
+
11
+ def stub_authorized?(bool)
12
+ any_instance_of(VaultPlugin::VaultAPI) do |klass|
13
+ stub(klass).authorized? { true }
14
+ end
15
+ end
16
+
17
+ def stub_client
18
+ any_instance_of(VaultPlugin::VaultAPI) do |klass|
19
+ stub(klass).client { 'fry' }
20
+ end
21
+ end
22
+
23
+ def token
24
+ {:lease_id => "",
25
+ :renewable => false,
26
+ :lease_duration => 43200,
27
+ :data => nil,
28
+ :warnings => nil,
29
+ :auth => { :client_token => "GUID", :lease_duration => 43200, :renewable => true }}
30
+ end
31
+
32
+ def stub_response
33
+ stub_request(:post, "https://vault.example.com/v1/auth/token/create").
34
+ with(:body => "{\"ttl\":\"12h\"}",
35
+ :headers => { 'Accept'=>['*/*', 'application/json'], 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3',
36
+ 'Content-Type'=>'application/json', 'User-Agent'=>['Ruby', 'VaultRuby/0.3.0 (+github.com/hashicorp/vault-ruby)'],
37
+ 'X-Vault-Token'=>'GUID' }).
38
+ to_return(:status => 200, :body => token.to_json, :headers => { 'Content-Type'=>'application/json' })
39
+ end
40
+
41
+ ###
42
+ # Test Methods
43
+ ###
44
+
45
+ def app
46
+ VaultPlugin::VaultAPI.new
47
+ end
48
+
49
+ def setup
50
+ stub_authorized?(true)
51
+ stub_client
52
+ stub.proxy(::VaultPlugin::Plugin.settings).token_options {{
53
+ ttl: '12h'
54
+ }}
55
+ stub.proxy(::VaultPlugin::Plugin.settings).vault {{
56
+ address: 'https://vault.example.com',
57
+ token: 'GUID',
58
+ ssl_verify: true
59
+ }}
60
+ end
61
+
62
+ def test_vault_token_issue
63
+ stub_response
64
+ get '/token/issue', ttl: '12h'
65
+ assert last_response.ok?
66
+ end
67
+
68
+ def test_bad_ttl_override
69
+ get '/token/issue', ttl: '24h'
70
+ assert last_response.bad_request?
71
+ end
72
+ end
@@ -0,0 +1,23 @@
1
+ require "codeclimate-test-reporter"
2
+ CodeClimate::TestReporter.start
3
+
4
+ $: << File.join(File.dirname(__FILE__), '..', 'lib')
5
+
6
+ require 'openssl'
7
+ require 'test/unit'
8
+ require 'webmock/test_unit'
9
+ require 'rack/test'
10
+ require 'rr'
11
+ require 'factory_girl'
12
+ FactoryGirl.find_definitions
13
+
14
+ require 'smart_proxy_for_testing'
15
+
16
+ class Test::Unit::TestCase
17
+ include FactoryGirl::Syntax::Methods
18
+ end
19
+
20
+ logdir = File.join(File.dirname(__FILE__), '..', 'logs')
21
+ FileUtils.mkdir_p(logdir) unless File.exists?(logdir)
22
+
23
+ WebMock.disable_net_connect!(:allow => "codeclimate.com")
metadata ADDED
@@ -0,0 +1,225 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: smart_proxy_vault
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.0
5
+ platform: ruby
6
+ authors:
7
+ - Riley
8
+ - Shott
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2016-04-07 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: bundler
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - "~>"
19
+ - !ruby/object:Gem::Version
20
+ version: '1.11'
21
+ type: :development
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - "~>"
26
+ - !ruby/object:Gem::Version
27
+ version: '1.11'
28
+ - !ruby/object:Gem::Dependency
29
+ name: rake
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - "~>"
33
+ - !ruby/object:Gem::Version
34
+ version: '10'
35
+ type: :development
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: '10'
42
+ - !ruby/object:Gem::Dependency
43
+ name: pry
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - "~>"
47
+ - !ruby/object:Gem::Version
48
+ version: '0.10'
49
+ type: :development
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - "~>"
54
+ - !ruby/object:Gem::Version
55
+ version: '0.10'
56
+ - !ruby/object:Gem::Dependency
57
+ name: test-unit
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - "~>"
61
+ - !ruby/object:Gem::Version
62
+ version: '2'
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '2'
70
+ - !ruby/object:Gem::Dependency
71
+ name: mocha
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - "~>"
75
+ - !ruby/object:Gem::Version
76
+ version: '1'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - "~>"
82
+ - !ruby/object:Gem::Version
83
+ version: '1'
84
+ - !ruby/object:Gem::Dependency
85
+ name: webmock
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - "~>"
89
+ - !ruby/object:Gem::Version
90
+ version: '1'
91
+ type: :development
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - "~>"
96
+ - !ruby/object:Gem::Version
97
+ version: '1'
98
+ - !ruby/object:Gem::Dependency
99
+ name: rack-test
100
+ requirement: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - "~>"
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ type: :development
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - "~>"
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
112
+ - !ruby/object:Gem::Dependency
113
+ name: factory_girl
114
+ requirement: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - "~>"
117
+ - !ruby/object:Gem::Version
118
+ version: '4.0'
119
+ type: :development
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - "~>"
124
+ - !ruby/object:Gem::Version
125
+ version: '4.0'
126
+ - !ruby/object:Gem::Dependency
127
+ name: rr
128
+ requirement: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - "~>"
131
+ - !ruby/object:Gem::Version
132
+ version: '1.1'
133
+ type: :development
134
+ prerelease: false
135
+ version_requirements: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - "~>"
138
+ - !ruby/object:Gem::Version
139
+ version: '1.1'
140
+ - !ruby/object:Gem::Dependency
141
+ name: chef-api
142
+ requirement: !ruby/object:Gem::Requirement
143
+ requirements:
144
+ - - "~>"
145
+ - !ruby/object:Gem::Version
146
+ version: 0.5.0
147
+ type: :runtime
148
+ prerelease: false
149
+ version_requirements: !ruby/object:Gem::Requirement
150
+ requirements:
151
+ - - "~>"
152
+ - !ruby/object:Gem::Version
153
+ version: 0.5.0
154
+ - !ruby/object:Gem::Dependency
155
+ name: vault
156
+ requirement: !ruby/object:Gem::Requirement
157
+ requirements:
158
+ - - "~>"
159
+ - !ruby/object:Gem::Version
160
+ version: 0.3.0
161
+ type: :runtime
162
+ prerelease: false
163
+ version_requirements: !ruby/object:Gem::Requirement
164
+ requirements:
165
+ - - "~>"
166
+ - !ruby/object:Gem::Version
167
+ version: 0.3.0
168
+ description: Authenticates a client & returns a Vault token
169
+ email: riley.shott@visioncritical.com
170
+ executables: []
171
+ extensions: []
172
+ extra_rdoc_files:
173
+ - README.md
174
+ - LICENSE
175
+ files:
176
+ - LICENSE
177
+ - README.md
178
+ - bundler.d/vault.rb
179
+ - lib/smart_proxy_vault.rb
180
+ - lib/smart_proxy_vault/authentication.rb
181
+ - lib/smart_proxy_vault/authentication/chef.rb
182
+ - lib/smart_proxy_vault/helpers.rb
183
+ - lib/smart_proxy_vault/https_config.ru
184
+ - lib/smart_proxy_vault/vault.rb
185
+ - lib/smart_proxy_vault/vault_api.rb
186
+ - lib/smart_proxy_vault/vault_backend.rb
187
+ - lib/smart_proxy_vault/version.rb
188
+ - settings.d/vault.yml.example
189
+ - test/authentication_chef_test.rb
190
+ - test/factories/rsa.rb
191
+ - test/fixtures/authentication/chef/bender.pem
192
+ - test/fixtures/authentication/chef/fry.pem
193
+ - test/request_test.rb
194
+ - test/test_helper.rb
195
+ homepage: http://github.com/visioncritical/smart_proxy_vault
196
+ licenses:
197
+ - GPLv3
198
+ metadata: {}
199
+ post_install_message:
200
+ rdoc_options: []
201
+ require_paths:
202
+ - lib
203
+ required_ruby_version: !ruby/object:Gem::Requirement
204
+ requirements:
205
+ - - ">="
206
+ - !ruby/object:Gem::Version
207
+ version: '0'
208
+ required_rubygems_version: !ruby/object:Gem::Requirement
209
+ requirements:
210
+ - - ">="
211
+ - !ruby/object:Gem::Version
212
+ version: '0'
213
+ requirements: []
214
+ rubyforge_project:
215
+ rubygems_version: 2.4.6
216
+ signing_key:
217
+ specification_version: 4
218
+ summary: Authenticates a client & returns a Vault token
219
+ test_files:
220
+ - test/authentication_chef_test.rb
221
+ - test/factories/rsa.rb
222
+ - test/fixtures/authentication/chef/bender.pem
223
+ - test/fixtures/authentication/chef/fry.pem
224
+ - test/request_test.rb
225
+ - test/test_helper.rb