cred_hubble 0.0.1.pre → 0.1.0.pre

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.
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