cred_hubble 0.0.1.pre → 0.1.0.pre

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.rubocop.yml +7 -1
  4. data/.travis.yml +3 -1
  5. data/README.md +353 -13
  6. data/cred_hubble.gemspec +3 -0
  7. data/lib/cred_hubble.rb +3 -2
  8. data/lib/cred_hubble/client.rb +119 -13
  9. data/lib/cred_hubble/http/client.rb +39 -4
  10. data/lib/cred_hubble/resources/certificate_credential.rb +25 -0
  11. data/lib/cred_hubble/resources/credential.rb +32 -0
  12. data/lib/cred_hubble/resources/credential_collection.rb +21 -0
  13. data/lib/cred_hubble/resources/credential_factory.rb +41 -0
  14. data/lib/cred_hubble/resources/immutable_resource.rb +2 -2
  15. data/lib/cred_hubble/resources/json_credential.rb +13 -0
  16. data/lib/cred_hubble/resources/password_credential.rb +13 -0
  17. data/lib/cred_hubble/resources/permission.rb +10 -0
  18. data/lib/cred_hubble/resources/permission_collection.rb +21 -0
  19. data/lib/cred_hubble/resources/resource.rb +10 -0
  20. data/lib/cred_hubble/resources/resources.rb +15 -0
  21. data/lib/cred_hubble/resources/{base_resource.rb → rest_resource.rb} +6 -2
  22. data/lib/cred_hubble/resources/rsa_credential.rb +24 -0
  23. data/lib/cred_hubble/resources/ssh_credential.rb +39 -0
  24. data/lib/cred_hubble/resources/user_credential.rb +39 -0
  25. data/lib/cred_hubble/resources/value_credential.rb +13 -0
  26. data/lib/cred_hubble/version.rb +1 -1
  27. data/spec/cred_hubble/client_spec.rb +487 -3
  28. data/spec/cred_hubble/http/client_spec.rb +347 -53
  29. data/spec/cred_hubble/resources/certificate_credential_spec.rb +49 -0
  30. data/spec/cred_hubble/resources/credential_collection_spec.rb +59 -0
  31. data/spec/cred_hubble/resources/credential_factory_spec.rb +154 -0
  32. data/spec/cred_hubble/resources/credential_spec.rb +10 -0
  33. data/spec/cred_hubble/resources/json_credential_spec.rb +52 -0
  34. data/spec/cred_hubble/resources/password_credential_spec.rb +41 -0
  35. data/spec/cred_hubble/resources/permission_collection_spec.rb +87 -0
  36. data/spec/cred_hubble/resources/permission_spec.rb +36 -0
  37. data/spec/cred_hubble/resources/rsa_credential_spec.rb +46 -0
  38. data/spec/cred_hubble/resources/ssh_credential_spec.rb +73 -0
  39. data/spec/cred_hubble/resources/user_credential_spec.rb +72 -0
  40. data/spec/cred_hubble/resources/value_credential_spec.rb +42 -0
  41. data/spec/support/shared_examples/resource_examples.rb +49 -0
  42. metadata +57 -5
@@ -0,0 +1,46 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe CredHubble::Resources::RsaCredential do
4
+ let(:json_response) do
5
+ '{
6
+ "id": "15811465-8538-460d-9682-5514d44439fd",
7
+ "name": "/rsa-key-1",
8
+ "type": "rsa",
9
+ "value": {
10
+ "public_key": "-----BEGIN PUBLIC KEY-----\n... PUBLIC KEY ...\n-----END PUBLIC KEY-----",
11
+ "private_key": "-----BEGIN RSA PRIVATE KEY-----\n... RSA PRIVATE KEY ...\n-----END RSA PRIVATE KEY-----"
12
+ },
13
+ "version_created_at": "1990-05-18T01:01:01Z"
14
+ }'
15
+ end
16
+
17
+ describe '.from_json' do
18
+ subject { CredHubble::Resources::RsaCredential }
19
+
20
+ context 'when the JSON includes the required attributes' do
21
+ it 'instantiates a new RsaCredential object' do
22
+ credential = subject.from_json(json_response)
23
+
24
+ expect(credential).to be_a(CredHubble::Resources::RsaCredential)
25
+ expect(credential.value.public_key)
26
+ .to eq("-----BEGIN PUBLIC KEY-----\n... PUBLIC KEY ...\n-----END PUBLIC KEY-----")
27
+ expect(credential.value.private_key)
28
+ .to eq("-----BEGIN RSA PRIVATE KEY-----\n... RSA PRIVATE KEY ...\n-----END RSA PRIVATE KEY-----")
29
+ end
30
+ end
31
+
32
+ it_behaves_like 'a Credential resource'
33
+ it_behaves_like 'a JSON deserializing resource'
34
+ end
35
+
36
+ describe '#type' do
37
+ it 'returns "rsa"' do
38
+ subject.type = 'attempting-to-overwrite'
39
+ expect(subject.type).to eq('rsa')
40
+ end
41
+ end
42
+
43
+ describe '#to_json' do
44
+ it_behaves_like 'a JSON serializing resource'
45
+ end
46
+ end
@@ -0,0 +1,73 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe CredHubble::Resources::SshCredential do
4
+ let(:json_response) do
5
+ '{
6
+ "id": "15811465-8538-460d-9682-5514d44439fd",
7
+ "name": "/ssh-key-1",
8
+ "type": "ssh",
9
+ "value": {
10
+ "public_key": "ssh-rsa AAAAB3NzaC1y...",
11
+ "private_key": "-----BEGIN RSA PRIVATE KEY-----\n... RSA PRIVATE KEY ...\n-----END RSA PRIVATE KEY-----",
12
+ "public_key_fingerprint": "9db6ee01f7963db4e8c9966f3c425fd3feeadc148f37b428ddce2a458bd50da6"
13
+ },
14
+ "version_created_at": "1990-05-16T01:01:01Z"
15
+ }'
16
+ end
17
+
18
+ describe '.from_json' do
19
+ subject { CredHubble::Resources::SshCredential }
20
+
21
+ context 'when the JSON includes the required attributes' do
22
+ it 'instantiates a new SshCredential object' do
23
+ credential = subject.from_json(json_response)
24
+
25
+ expect(credential).to be_a(CredHubble::Resources::SshCredential)
26
+ expect(credential.value.public_key).to eq('ssh-rsa AAAAB3NzaC1y...')
27
+ expect(credential.value.private_key)
28
+ .to eq("-----BEGIN RSA PRIVATE KEY-----\n... RSA PRIVATE KEY ...\n-----END RSA PRIVATE KEY-----")
29
+ expect(credential.value.public_key_fingerprint)
30
+ .to eq('9db6ee01f7963db4e8c9966f3c425fd3feeadc148f37b428ddce2a458bd50da6')
31
+ end
32
+ end
33
+
34
+ it_behaves_like 'a Credential resource'
35
+ it_behaves_like 'a JSON deserializing resource'
36
+ end
37
+
38
+ describe '#type' do
39
+ it 'returns "ssh"' do
40
+ subject.type = 'attempting-to-overwrite'
41
+ expect(subject.type).to eq('ssh')
42
+ end
43
+ end
44
+
45
+ describe '#to_json' do
46
+ it_behaves_like 'a JSON serializing resource'
47
+ end
48
+
49
+ describe '#attributes_for_put' do
50
+ context 'when value is present' do
51
+ it 'does not include the public_key_fingerprint' do
52
+ credential = CredHubble::Resources::SshCredential.from_json(json_response)
53
+ expect(credential.attributes_for_put[:value]).to_not have_key(:public_key_fingerprint)
54
+ end
55
+ end
56
+
57
+ context 'when value is not present' do
58
+ let(:json_response) do
59
+ '{
60
+ "id": "15811465-8538-460d-9682-5514d44439fd",
61
+ "name": "/root-ssh-user",
62
+ "type": "ssh",
63
+ "version_created_at": "1990-03-29T01:07:01Z"
64
+ }'
65
+ end
66
+
67
+ it 'does not include a value' do
68
+ credential = CredHubble::Resources::SshCredential.from_json(json_response)
69
+ expect(credential.attributes_for_put[:value]).to be_nil
70
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,72 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe CredHubble::Resources::UserCredential do
4
+ let(:json_response) do
5
+ '{
6
+ "id": "15811465-8538-460d-9682-5514d44439fd",
7
+ "name": "/admin-user",
8
+ "type": "user",
9
+ "value": {
10
+ "username": "admin",
11
+ "password": "2582aaf15ec84e3fa3ba682152663a52",
12
+ "password_hash": "8efbef4cec28f228fa948daaf4893ac3638fbae81358ff9020be1d7a9a509fc6:1234"
13
+ },
14
+ "version_created_at": "1990-05-18T01:01:01Z"
15
+ }'
16
+ end
17
+
18
+ describe '.from_json' do
19
+ subject { CredHubble::Resources::UserCredential }
20
+
21
+ context 'when the JSON includes the required attributes' do
22
+ it 'instantiates a new UserCredential object' do
23
+ credential = subject.from_json(json_response)
24
+
25
+ expect(credential).to be_a(CredHubble::Resources::UserCredential)
26
+ expect(credential.value.username).to eq('admin')
27
+ expect(credential.value.password).to eq('2582aaf15ec84e3fa3ba682152663a52')
28
+ expect(credential.value.password_hash)
29
+ .to eq('8efbef4cec28f228fa948daaf4893ac3638fbae81358ff9020be1d7a9a509fc6:1234')
30
+ end
31
+ end
32
+
33
+ it_behaves_like 'a Credential resource'
34
+ it_behaves_like 'a JSON deserializing resource'
35
+ end
36
+
37
+ describe '#type' do
38
+ it 'returns "user"' do
39
+ subject.type = 'attempting-to-overwrite'
40
+ expect(subject.type).to eq('user')
41
+ end
42
+ end
43
+
44
+ describe '#to_json' do
45
+ it_behaves_like 'a JSON serializing resource'
46
+ end
47
+
48
+ describe '#attributes_for_put' do
49
+ context 'when value is present' do
50
+ it 'does not include the password_hash' do
51
+ credential = CredHubble::Resources::UserCredential.from_json(json_response)
52
+ expect(credential.attributes_for_put[:value]).to_not have_key(:password_hash)
53
+ end
54
+ end
55
+
56
+ context 'when value is not present' do
57
+ let(:json_response) do
58
+ '{
59
+ "id": "15811465-8538-460d-9682-5514d44439fd",
60
+ "name": "/admin-user",
61
+ "type": "user",
62
+ "version_created_at": "1990-05-18T01:01:01Z"
63
+ }'
64
+ end
65
+
66
+ it 'does not a value' do
67
+ credential = CredHubble::Resources::UserCredential.from_json(json_response)
68
+ expect(credential.attributes_for_put[:value]).to be_nil
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,42 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe CredHubble::Resources::ValueCredential do
4
+ subject { CredHubble::Resources::ValueCredential.new }
5
+
6
+ let(:json_response) do
7
+ '{
8
+ "id": "cdbb371a-cc03-4a6f-aa21-c6461d66ed96",
9
+ "name": "/the-grid",
10
+ "type": "value",
11
+ "value": "biodigital-jazz-man",
12
+ "version_created_at": "1985-01-01T01:01:01Z"
13
+ }'
14
+ end
15
+
16
+ describe '.from_json' do
17
+ subject { CredHubble::Resources::ValueCredential }
18
+
19
+ context 'when the JSON includes the required attributes' do
20
+ it 'instantiates a new ValueCredential object' do
21
+ credential = subject.from_json(json_response)
22
+
23
+ expect(credential).to be_a(CredHubble::Resources::ValueCredential)
24
+ expect(credential.value).to eq('biodigital-jazz-man')
25
+ end
26
+ end
27
+
28
+ it_behaves_like 'a Credential resource'
29
+ it_behaves_like 'a JSON deserializing resource'
30
+ end
31
+
32
+ describe '#type' do
33
+ it 'returns "value"' do
34
+ subject.type = 'attempting-to-overwrite'
35
+ expect(subject.type).to eq('value')
36
+ end
37
+ end
38
+
39
+ describe '#to_json' do
40
+ it_behaves_like 'a JSON serializing resource'
41
+ end
42
+ end
@@ -13,3 +13,52 @@ RSpec.shared_examples 'a JSON deserializing resource' do
13
13
  end
14
14
  end
15
15
  end
16
+
17
+ RSpec.shared_examples 'a JSON serializing resource' do
18
+ describe '#to_json' do
19
+ it 'correctly serializes complex attributes as JSON' do
20
+ expect(JSON.parse(described_class.from_json(json_response).to_json)).to eq(JSON.parse(json_response))
21
+ end
22
+ end
23
+ end
24
+
25
+ RSpec.shared_examples 'a Credential resource' do
26
+ describe '.from_json' do
27
+ context 'when the JSON includes the required attributes' do
28
+ let(:json_response) do
29
+ '{
30
+ "id": "cdbb371a-cc03-4a6f-aa21-c6461d66ed96",
31
+ "name": "/the-grid",
32
+ "type": "value",
33
+ "version_created_at": "1985-01-01T01:01:01Z"
34
+ }'
35
+ end
36
+
37
+ it 'instantiates a new Credential object with the correct values' do
38
+ credential = subject.from_json(json_response)
39
+
40
+ expect(credential).to be_a(CredHubble::Resources::Credential)
41
+ expect(credential.id).to eq('cdbb371a-cc03-4a6f-aa21-c6461d66ed96')
42
+ expect(credential.name).to eq('/the-grid')
43
+ expect(credential.version_created_at).to eq('1985-01-01T01:01:01Z')
44
+ end
45
+ end
46
+
47
+ describe '#attributes_for_put' do
48
+ let(:json_response) do
49
+ '{
50
+ "id": "cdbb371a-cc03-4a6f-aa21-c6461d66ed96",
51
+ "name": "/the-grid",
52
+ "type": "value",
53
+ "version_created_at": "1985-01-01T01:01:01Z"
54
+ }'
55
+ end
56
+
57
+ it 'returns only the attributes that can be updated with CredHub' do
58
+ credential = subject.from_json(json_response)
59
+ expect(credential.attributes_for_put.keys).to_not include :id
60
+ expect(credential.attributes_for_put.keys).to_not include :version_created_at
61
+ end
62
+ end
63
+ end
64
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cred_hubble
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1.pre
4
+ version: 0.1.0.pre
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tim Downey
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-09-25 00:00:00.000000000 Z
11
+ date: 2017-10-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -50,6 +50,20 @@ dependencies:
50
50
  - - "<"
51
51
  - !ruby/object:Gem::Version
52
52
  version: '2.0'
53
+ - !ruby/object:Gem::Dependency
54
+ name: addressable
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: '2.0'
60
+ type: :runtime
61
+ prerelease: false
62
+ version_requirements: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - "~>"
65
+ - !ruby/object:Gem::Version
66
+ version: '2.0'
53
67
  - !ruby/object:Gem::Dependency
54
68
  name: bundler
55
69
  requirement: !ruby/object:Gem::Requirement
@@ -145,15 +159,41 @@ files:
145
159
  - lib/cred_hubble/exceptions/error.rb
146
160
  - lib/cred_hubble/http/client.rb
147
161
  - lib/cred_hubble/http/errors.rb
148
- - lib/cred_hubble/resources/base_resource.rb
162
+ - lib/cred_hubble/resources/certificate_credential.rb
163
+ - lib/cred_hubble/resources/credential.rb
164
+ - lib/cred_hubble/resources/credential_collection.rb
165
+ - lib/cred_hubble/resources/credential_factory.rb
149
166
  - lib/cred_hubble/resources/health.rb
150
167
  - lib/cred_hubble/resources/immutable_resource.rb
151
168
  - lib/cred_hubble/resources/info.rb
169
+ - lib/cred_hubble/resources/json_credential.rb
170
+ - lib/cred_hubble/resources/password_credential.rb
171
+ - lib/cred_hubble/resources/permission.rb
172
+ - lib/cred_hubble/resources/permission_collection.rb
173
+ - lib/cred_hubble/resources/resource.rb
174
+ - lib/cred_hubble/resources/resources.rb
175
+ - lib/cred_hubble/resources/rest_resource.rb
176
+ - lib/cred_hubble/resources/rsa_credential.rb
177
+ - lib/cred_hubble/resources/ssh_credential.rb
178
+ - lib/cred_hubble/resources/user_credential.rb
179
+ - lib/cred_hubble/resources/value_credential.rb
152
180
  - lib/cred_hubble/version.rb
153
181
  - spec/cred_hubble/client_spec.rb
154
182
  - spec/cred_hubble/http/client_spec.rb
183
+ - spec/cred_hubble/resources/certificate_credential_spec.rb
184
+ - spec/cred_hubble/resources/credential_collection_spec.rb
185
+ - spec/cred_hubble/resources/credential_factory_spec.rb
186
+ - spec/cred_hubble/resources/credential_spec.rb
155
187
  - spec/cred_hubble/resources/health_spec.rb
156
188
  - spec/cred_hubble/resources/info_spec.rb
189
+ - spec/cred_hubble/resources/json_credential_spec.rb
190
+ - spec/cred_hubble/resources/password_credential_spec.rb
191
+ - spec/cred_hubble/resources/permission_collection_spec.rb
192
+ - spec/cred_hubble/resources/permission_spec.rb
193
+ - spec/cred_hubble/resources/rsa_credential_spec.rb
194
+ - spec/cred_hubble/resources/ssh_credential_spec.rb
195
+ - spec/cred_hubble/resources/user_credential_spec.rb
196
+ - spec/cred_hubble/resources/value_credential_spec.rb
157
197
  - spec/cred_hubble_spec.rb
158
198
  - spec/spec_helper.rb
159
199
  - spec/support/shared_examples/resource_examples.rb
@@ -167,9 +207,9 @@ require_paths:
167
207
  - lib
168
208
  required_ruby_version: !ruby/object:Gem::Requirement
169
209
  requirements:
170
- - - ">="
210
+ - - "~>"
171
211
  - !ruby/object:Gem::Version
172
- version: '0'
212
+ version: '2.1'
173
213
  required_rubygems_version: !ruby/object:Gem::Requirement
174
214
  requirements:
175
215
  - - ">"
@@ -185,8 +225,20 @@ summary: Unofficial Ruby Client for interacting with the Cloud Foundry CredHub c
185
225
  test_files:
186
226
  - spec/cred_hubble/client_spec.rb
187
227
  - spec/cred_hubble/http/client_spec.rb
228
+ - spec/cred_hubble/resources/certificate_credential_spec.rb
229
+ - spec/cred_hubble/resources/credential_collection_spec.rb
230
+ - spec/cred_hubble/resources/credential_factory_spec.rb
231
+ - spec/cred_hubble/resources/credential_spec.rb
188
232
  - spec/cred_hubble/resources/health_spec.rb
189
233
  - spec/cred_hubble/resources/info_spec.rb
234
+ - spec/cred_hubble/resources/json_credential_spec.rb
235
+ - spec/cred_hubble/resources/password_credential_spec.rb
236
+ - spec/cred_hubble/resources/permission_collection_spec.rb
237
+ - spec/cred_hubble/resources/permission_spec.rb
238
+ - spec/cred_hubble/resources/rsa_credential_spec.rb
239
+ - spec/cred_hubble/resources/ssh_credential_spec.rb
240
+ - spec/cred_hubble/resources/user_credential_spec.rb
241
+ - spec/cred_hubble/resources/value_credential_spec.rb
190
242
  - spec/cred_hubble_spec.rb
191
243
  - spec/spec_helper.rb
192
244
  - spec/support/shared_examples/resource_examples.rb