stormpath-sdk 1.6.0 → 1.7.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.
Files changed (147) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +21 -0
  3. data/CHANGES.md +11 -0
  4. data/README.md +23 -25
  5. data/lib/stormpath-sdk.rb +11 -2
  6. data/lib/stormpath-sdk/api_key.rb +0 -1
  7. data/lib/stormpath-sdk/auth/basic_authenticator.rb +7 -7
  8. data/lib/stormpath-sdk/auth/basic_login_attempt.rb +7 -11
  9. data/lib/stormpath-sdk/auth/create_factor.rb +1 -1
  10. data/lib/stormpath-sdk/auth/register_service_provider.rb +41 -0
  11. data/lib/stormpath-sdk/auth/username_password_request.rb +3 -5
  12. data/lib/stormpath-sdk/cache/cache.rb +3 -3
  13. data/lib/stormpath-sdk/cache/cache_entry.rb +2 -2
  14. data/lib/stormpath-sdk/cache/cache_manager.rb +3 -4
  15. data/lib/stormpath-sdk/cache/cache_stats.rb +1 -3
  16. data/lib/stormpath-sdk/cache/disabled_cache_store.rb +5 -8
  17. data/lib/stormpath-sdk/cache/memory_store.rb +1 -1
  18. data/lib/stormpath-sdk/cache/redis_store.rb +4 -4
  19. data/lib/stormpath-sdk/client.rb +35 -33
  20. data/lib/stormpath-sdk/data_store.rb +278 -257
  21. data/lib/stormpath-sdk/error.rb +18 -7
  22. data/lib/stormpath-sdk/http/authc/sauthc1_signer.rb +76 -82
  23. data/lib/stormpath-sdk/http/http_client_request_executor.rb +10 -8
  24. data/lib/stormpath-sdk/http/response.rb +5 -7
  25. data/lib/stormpath-sdk/id_site/id_site_result.rb +5 -6
  26. data/lib/stormpath-sdk/oauth/access_token_authentication_result.rb +5 -9
  27. data/lib/stormpath-sdk/oauth/authenticator.rb +2 -2
  28. data/lib/stormpath-sdk/oauth/error.rb +4 -4
  29. data/lib/stormpath-sdk/oauth/id_site_grant_request.rb +1 -1
  30. data/lib/stormpath-sdk/oauth/password_grant_request.rb +1 -1
  31. data/lib/stormpath-sdk/oauth/refresh_grant_request.rb +2 -2
  32. data/lib/stormpath-sdk/oauth/stormpath_grant_request.rb +2 -2
  33. data/lib/stormpath-sdk/provider/account_access.rb +0 -2
  34. data/lib/stormpath-sdk/provider/account_result.rb +1 -2
  35. data/lib/stormpath-sdk/provider/facebook/facebook_provider.rb +6 -2
  36. data/lib/stormpath-sdk/provider/facebook/facebook_provider_data.rb +7 -3
  37. data/lib/stormpath-sdk/provider/github/github_provider.rb +6 -2
  38. data/lib/stormpath-sdk/provider/github/github_provider_data.rb +6 -2
  39. data/lib/stormpath-sdk/provider/google/google_provider.rb +7 -3
  40. data/lib/stormpath-sdk/provider/google/google_provider_data.rb +6 -2
  41. data/lib/stormpath-sdk/provider/linkedin/linkedin_provider.rb +6 -2
  42. data/lib/stormpath-sdk/provider/linkedin/linkedin_provider_data.rb +6 -2
  43. data/lib/stormpath-sdk/provider/provider.rb +8 -4
  44. data/lib/stormpath-sdk/provider/provider_data.rb +6 -2
  45. data/lib/stormpath-sdk/provider/saml/saml_provider.rb +10 -4
  46. data/lib/stormpath-sdk/provider/saml/saml_provider_data.rb +6 -3
  47. data/lib/stormpath-sdk/provider/stormpath/stormpath_provider.rb +6 -2
  48. data/lib/stormpath-sdk/provider/stormpath/stormpath_provider_data.rb +6 -2
  49. data/lib/stormpath-sdk/provider/twitter/twitter_provider.rb +6 -2
  50. data/lib/stormpath-sdk/provider/twitter/twitter_provider_data.rb +6 -2
  51. data/lib/stormpath-sdk/resource/account.rb +46 -40
  52. data/lib/stormpath-sdk/resource/account_link.rb +9 -5
  53. data/lib/stormpath-sdk/resource/account_linking_policy.rb +8 -4
  54. data/lib/stormpath-sdk/resource/account_membership.rb +1 -1
  55. data/lib/stormpath-sdk/resource/account_overrides.rb +20 -16
  56. data/lib/stormpath-sdk/resource/account_store.rb +15 -11
  57. data/lib/stormpath-sdk/resource/account_store_mapping.rb +14 -13
  58. data/lib/stormpath-sdk/resource/application.rb +147 -136
  59. data/lib/stormpath-sdk/resource/application_web_config.rb +11 -7
  60. data/lib/stormpath-sdk/resource/associations.rb +36 -43
  61. data/lib/stormpath-sdk/resource/attribute_statement_mapping_rules.rb +8 -0
  62. data/lib/stormpath-sdk/resource/base.rb +201 -200
  63. data/lib/stormpath-sdk/resource/challenge.rb +12 -8
  64. data/lib/stormpath-sdk/resource/collection.rb +77 -76
  65. data/lib/stormpath-sdk/resource/custom_data.rb +60 -61
  66. data/lib/stormpath-sdk/resource/custom_data_hash_methods.rb +28 -25
  67. data/lib/stormpath-sdk/resource/custom_data_storage.rb +18 -16
  68. data/lib/stormpath-sdk/resource/directory.rb +37 -60
  69. data/lib/stormpath-sdk/resource/email_verification_token.rb +7 -3
  70. data/lib/stormpath-sdk/resource/error.rb +8 -4
  71. data/lib/stormpath-sdk/resource/expansion.rb +22 -20
  72. data/lib/stormpath-sdk/resource/factor.rb +12 -8
  73. data/lib/stormpath-sdk/resource/field.rb +8 -4
  74. data/lib/stormpath-sdk/resource/group.rb +21 -16
  75. data/lib/stormpath-sdk/resource/group_membership.rb +7 -5
  76. data/lib/stormpath-sdk/resource/instance.rb +10 -6
  77. data/lib/stormpath-sdk/resource/linked_account.rb +7 -3
  78. data/lib/stormpath-sdk/resource/oauth_policy.rb +7 -3
  79. data/lib/stormpath-sdk/resource/organization.rb +14 -10
  80. data/lib/stormpath-sdk/resource/organization_account_store_mapping.rb +8 -4
  81. data/lib/stormpath-sdk/resource/password_reset_token.rb +9 -5
  82. data/lib/stormpath-sdk/resource/phone.rb +8 -4
  83. data/lib/stormpath-sdk/resource/registered_saml_service_provider.rb +8 -0
  84. data/lib/stormpath-sdk/resource/saml_identity_provider.rb +14 -0
  85. data/lib/stormpath-sdk/resource/saml_identity_provider_metadata.rb +9 -0
  86. data/lib/stormpath-sdk/resource/saml_policy.rb +10 -0
  87. data/lib/stormpath-sdk/resource/saml_service_provider.rb +7 -0
  88. data/lib/stormpath-sdk/{provider/saml/saml_mapping_rules.rb → resource/saml_service_provider_metadata.rb} +6 -5
  89. data/lib/stormpath-sdk/resource/saml_service_provider_registration.rb +11 -0
  90. data/lib/stormpath-sdk/resource/schema.rb +8 -4
  91. data/lib/stormpath-sdk/resource/tenant.rb +11 -8
  92. data/lib/stormpath-sdk/resource/user_info_mapping_rules.rb +7 -3
  93. data/lib/stormpath-sdk/resource/utils.rb +7 -10
  94. data/lib/stormpath-sdk/resource/verification_email.rb +7 -3
  95. data/lib/stormpath-sdk/resource/x_509_certificate.rb +7 -0
  96. data/lib/stormpath-sdk/util/assert.rb +1 -3
  97. data/lib/stormpath-sdk/version.rb +2 -2
  98. data/spec/auth/basic_authenticator_spec.rb +28 -24
  99. data/spec/auth/register_service_provider_spec.rb +68 -0
  100. data/spec/auth/sauthc1_signer_spec.rb +8 -4
  101. data/spec/cache/cache_entry_spec.rb +28 -29
  102. data/spec/cache/cache_spec.rb +9 -9
  103. data/spec/cache/cache_stats_spec.rb +1 -1
  104. data/spec/client_spec.rb +63 -63
  105. data/spec/data_store_spec.rb +23 -14
  106. data/spec/oauth/access_token_authentication_result_spec.rb +8 -2
  107. data/spec/provider/account_resolver_spec.rb +6 -4
  108. data/spec/provider/provider_spec.rb +6 -6
  109. data/spec/resource/account_creation_policy_spec.rb +1 -1
  110. data/spec/resource/account_link_spec.rb +7 -15
  111. data/spec/resource/account_spec.rb +17 -17
  112. data/spec/resource/account_store_mapping_spec.rb +16 -22
  113. data/spec/resource/account_store_spec.rb +3 -3
  114. data/spec/resource/application_spec.rb +324 -330
  115. data/spec/resource/base_spec.rb +7 -31
  116. data/spec/resource/collection_spec.rb +63 -114
  117. data/spec/resource/custom_data_spec.rb +1 -1
  118. data/spec/resource/directory_spec.rb +91 -87
  119. data/spec/resource/expansion_spec.rb +10 -10
  120. data/spec/resource/factor_spec.rb +1 -1
  121. data/spec/resource/group_spec.rb +1 -1
  122. data/spec/resource/linked_account_spec.rb +7 -7
  123. data/spec/resource/organization_spec.rb +12 -11
  124. data/spec/resource/phone_spec.rb +1 -1
  125. data/spec/resource/registered_saml_service_provider_spec.rb +35 -0
  126. data/spec/resource/saml_identity_provider_metadata_spec.rb +27 -0
  127. data/spec/resource/saml_identity_provider_spec.rb +94 -0
  128. data/spec/resource/saml_policy_spec.rb +27 -0
  129. data/spec/resource/saml_service_provider_registration_spec.rb +58 -0
  130. data/spec/resource/saml_service_provider_spec.rb +19 -0
  131. data/spec/resource/status_spec.rb +4 -3
  132. data/spec/resource/tenant_spec.rb +4 -6
  133. data/spec/spec_helper.rb +1 -1
  134. data/spec/support/custom_data_save_period.rb +4 -0
  135. data/spec/support/custom_data_storage_behavior.rb +7 -8
  136. data/spec/support/mocked_provider_accounts.rb +101 -101
  137. data/spec/support/mocked_saml_responses.rb +130 -0
  138. data/spec/support/resource_factory.rb +4 -4
  139. data/spec/support/resource_helpers.rb +10 -4
  140. data/spec/support/resource_matchers.rb +4 -4
  141. data/spec/support/test_request_executor.rb +2 -2
  142. metadata +21 -8
  143. data/lib/stormpath-sdk/provider/saml/saml_provider_metadata.rb +0 -19
  144. data/spec/fixtures/response/create_saml_directory.json +0 -26
  145. data/spec/fixtures/response/create_saml_directory_mapping_rules.json +0 -12
  146. data/spec/fixtures/response/get_saml_directory_provider.json +0 -16
  147. data/spec/fixtures/response/get_saml_directory_provider_metadata.json +0 -12
@@ -0,0 +1,19 @@
1
+ require 'spec_helper'
2
+
3
+ describe Stormpath::Resource::SamlServiceProvider, :vcr do
4
+ let(:application) { test_api_client.applications.create(application_attrs) }
5
+ let(:service_provider) { application.saml_policy.service_provider }
6
+
7
+ after { application.delete }
8
+
9
+ it 'instances should respond to attribute property methods' do
10
+ expect(service_provider).to be_a Stormpath::Resource::SamlServiceProvider
11
+
12
+ [:created_at, :modified_at].each do |property_getter|
13
+ expect(service_provider).to respond_to(property_getter)
14
+ expect(service_provider.send(property_getter)).to be_a String
15
+ end
16
+
17
+ expect(service_provider.sso_initiation_endpoint).to be_a Hash
18
+ end
19
+ end
@@ -1,8 +1,9 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe 'StatusOnDirectoryAndAccount', :vcr do
4
+ let(:username) { "rubytest-#{random_number}" }
4
5
  let(:auth_request) do
5
- Stormpath::Authentication::UsernamePasswordRequest.new("rubytest#{default_domain}", 'P@$$w0rd')
6
+ Stormpath::Authentication::UsernamePasswordRequest.new("#{username}#{default_domain}", 'P@$$w0rd')
6
7
  end
7
8
  let(:authenticate_user) do
8
9
  application.authenticate_account(auth_request)
@@ -11,9 +12,9 @@ describe 'StatusOnDirectoryAndAccount', :vcr do
11
12
  let(:application) { test_api_client.applications.create(application_attrs) }
12
13
  let(:group) { directory.groups.create(group_attrs) }
13
14
  let!(:account) do
14
- directory.accounts.create(account_attrs(email: 'rubytest', password: 'P@$$w0rd'))
15
+ directory.accounts.create(account_attrs(email: username, password: 'P@$$w0rd'))
15
16
  end
16
- let(:reloaded_account) { test_api_client.accounts.get account.href }
17
+ let(:reloaded_account) { test_api_client.accounts.get(account.href) }
17
18
  before { map_account_store(application, directory, 0, true, true) }
18
19
 
19
20
  after do
@@ -1,8 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Stormpath::Resource::Tenant, :vcr do
4
-
5
- describe "instances should respond to attribute property methods" do
4
+ describe 'instances should respond to attribute property methods' do
6
5
  let(:tenant) { test_api_client.tenant }
7
6
 
8
7
  it do
@@ -10,7 +9,7 @@ describe Stormpath::Resource::Tenant, :vcr do
10
9
 
11
10
  [:name, :key, :created_at, :modified_at].each do |property_getter|
12
11
  expect(tenant).to respond_to(property_getter)
13
- expect(tenant.send property_getter).to be_a String
12
+ expect(tenant.send(property_getter)).to be_a String
14
13
  end
15
14
 
16
15
  expect(tenant.applications).to be_a Stormpath::Resource::Collection
@@ -24,11 +23,10 @@ describe Stormpath::Resource::Tenant, :vcr do
24
23
  let(:tenant) { test_api_client.tenant }
25
24
 
26
25
  it 'creates an tenant with custom data' do
27
- tenant.custom_data["category"] = "classified"
26
+ tenant.custom_data['category'] = 'classified'
28
27
 
29
28
  tenant.save
30
- expect(tenant.custom_data["category"]).to eq("classified")
29
+ expect(tenant.custom_data['category']).to eq('classified')
31
30
  end
32
31
  end
33
-
34
32
  end
@@ -25,7 +25,7 @@ VCR.configure do |c|
25
25
  c.before_record do |i|
26
26
  i.request.headers.delete('Authorization')
27
27
  u = URI.parse(i.request.uri)
28
- i.request.uri.sub!(/:\/\/.*#{Regexp.escape(u.host)}/, "://#{u.host}" )
28
+ i.request.uri.sub!(/:\/\/.*#{Regexp.escape(u.host)}/, "://#{u.host}")
29
29
  end
30
30
  end
31
31
 
@@ -7,6 +7,10 @@ module Stormpath
7
7
  def wait_for_custom_data_indexing
8
8
  sleep 5
9
9
  end
10
+
11
+ def wait_for_resource_creation
12
+ sleep rand(2..6)
13
+ end
10
14
  end
11
15
  end
12
16
  end
@@ -15,8 +15,8 @@ shared_examples_for 'account_custom_data' do
15
15
  }
16
16
  )
17
17
  end
18
- let(:reloaded_custom_data_storage) { test_api_client.accounts.get custom_data_storage.href }
19
- let(:reloaded_custom_data_storage_2) { test_api_client.accounts.get custom_data_storage.href }
18
+ let(:reloaded_custom_data_storage) { test_api_client.accounts.get(custom_data_storage.href) }
19
+ let(:reloaded_custom_data_storage_2) { test_api_client.accounts.get(custom_data_storage.href) }
20
20
 
21
21
  it_behaves_like 'custom_data_storage'
22
22
  end
@@ -37,8 +37,8 @@ shared_examples_for 'group_custom_data' do
37
37
  )
38
38
  end
39
39
 
40
- let(:reloaded_custom_data_storage) { test_api_client.groups.get custom_data_storage.href }
41
- let(:reloaded_custom_data_storage_2) { test_api_client.groups.get custom_data_storage.href }
40
+ let(:reloaded_custom_data_storage) { test_api_client.groups.get(custom_data_storage.href) }
41
+ let(:reloaded_custom_data_storage_2) { test_api_client.groups.get(custom_data_storage.href) }
42
42
 
43
43
  it_behaves_like 'custom_data_storage'
44
44
  end
@@ -104,7 +104,7 @@ shared_examples_for 'custom_data_storage' do
104
104
  end
105
105
 
106
106
  it 'update custom data through custom_data_storage.save, cache should be cleared' do
107
- custom_data_storage.custom_data[:permissions] = {'crew_quarters' => '93-601'}
107
+ custom_data_storage.custom_data[:permissions] = { 'crew_quarters' => '93-601' }
108
108
  custom_data_storage.custom_data.save
109
109
 
110
110
  expect(reloaded_custom_data_storage.custom_data[:permissions]).to eq('crew_quarters' => '93-601')
@@ -117,11 +117,11 @@ shared_examples_for 'custom_data_storage' do
117
117
 
118
118
  it 'first level keys can be saved as symbols or strings, they will default to the same (saved as strings)' do
119
119
  custom_data_storage.custom_data[:permissions] = 'Drive the boat'
120
- expect(custom_data_storage.custom_data[:permissions]).to eq('Drive the boat');
120
+ expect(custom_data_storage.custom_data[:permissions]).to eq('Drive the boat')
121
121
  expect(custom_data_storage.custom_data['permissions']).to eq(custom_data_storage.custom_data[:permissions])
122
122
 
123
123
  custom_data_storage.custom_data.save
124
- expect(custom_data_storage.custom_data[:permissions]).to eq('Drive the boat');
124
+ expect(custom_data_storage.custom_data[:permissions]).to eq('Drive the boat')
125
125
  expect(custom_data_storage.custom_data['permissions']).to eq(custom_data_storage.custom_data[:permissions])
126
126
  end
127
127
 
@@ -261,7 +261,6 @@ shared_examples_for 'custom_data_storage' do
261
261
  expect(reloaded_custom_data_storage.custom_data['favorite_drink']).to eq('Earl Grey Tea')
262
262
  end
263
263
 
264
-
265
264
  it '#has_key?' do
266
265
  expect(custom_data_storage.custom_data.has_key?('createdAt')).to be_truthy
267
266
  expect(custom_data_storage.custom_data.has_key?('created_at')).to be_falsey
@@ -57,135 +57,135 @@ module Stormpath
57
57
  end
58
58
 
59
59
  FACEBOOK_ACCOUNT = {
60
- href: "https://api.stormpath.com/v1/accounts/7jdiPam0PWES317hwRR5a7",
61
- username: "damir.svrtan",
62
- email: "hladnidamir@hotmail.com",
63
- givenName: "Damir",
60
+ href: 'https://api.stormpath.com/v1/accounts/7jdiPam0PWES317hwRR5a7',
61
+ username: 'damir.svrtan',
62
+ email: 'hladnidamir@hotmail.com',
63
+ givenName: 'Damir',
64
64
  middleName: nil,
65
- surname: "Svrtan",
66
- fullName: "Damir Svrtan",
67
- status: "ENABLED",
65
+ surname: 'Svrtan',
66
+ fullName: 'Damir Svrtan',
67
+ status: 'ENABLED',
68
68
  emailVerificationToken: nil,
69
- customData: { href: "https://api.stormpath.com/v1/accounts/7jdiPam0PWES317hwRR5a7/customData"},
70
- providerData: { href:"https://api.stormpath.com/v1/accounts/7jdiPam0PWES317hwRR5a7/providerData"},
71
- directory: { href: "https://api.stormpath.com/v1/directories/7ibyn2idP1d9p3qJOomeNP"},
72
- tenant: { href: "https://api.stormpath.com/v1/tenants/60bD3bKLej6JoFhyKFHiOk"},
73
- groups: { href: "https://api.stormpath.com/v1/accounts/7jdiPam0PWES317hwRR5a7/groups"},
74
- groupMemberships: { href: "https://api.stormpath.com/v1/accounts/7jdiPam0PWES317hwRR5a7/groupMemberships"}
75
- }
69
+ customData: { href: 'https://api.stormpath.com/v1/accounts/7jdiPam0PWES317hwRR5a7/customData' },
70
+ providerData: { href: 'https://api.stormpath.com/v1/accounts/7jdiPam0PWES317hwRR5a7/providerData' },
71
+ directory: { href: 'https://api.stormpath.com/v1/directories/7ibyn2idP1d9p3qJOomeNP' },
72
+ tenant: { href: 'https://api.stormpath.com/v1/tenants/60bD3bKLej6JoFhyKFHiOk' },
73
+ groups: { href: 'https://api.stormpath.com/v1/accounts/7jdiPam0PWES317hwRR5a7/groups' },
74
+ groupMemberships: { href: 'https://api.stormpath.com/v1/accounts/7jdiPam0PWES317hwRR5a7/groupMemberships' }
75
+ }.freeze
76
76
 
77
77
  FACEBOOK_PROVIDER_DATA = {
78
- href: "https://api.stormpath.com/v1/accounts/7jdiPam0PWES317hwRR5a7/providerData",
79
- createdAt: "2014-05-19T13:32:16.884Z",
80
- modifiedAt: "2014-05-19T13:32:16.927Z",
81
- accessToken: "CAATmZBgxF6rMBAPYbfBhGrVPRw27nn9fAz6bR0DBV1XGfOcSYXSBrhZCkE1y1lWue348fboRxqX7nz88KBYi05qCHw4AQoZCqyIaWedEXrV2vFVzVHo2glq6Vb1ofAWcEHva7baZAaojA8KN5DVz4UTToKgvoIMa1kjyvZCmFZBpYXoG7H3aIKoyWJzUGCDIUrcFjvjnNZBvAZDZD",
82
- providerId: "facebook"
83
- }
78
+ href: 'https://api.stormpath.com/v1/accounts/7jdiPam0PWES317hwRR5a7/providerData',
79
+ createdAt: '2014-05-19T13:32:16.884Z',
80
+ modifiedAt: '2014-05-19T13:32:16.927Z',
81
+ accessToken: 'CAATmZBgxF6rMBAPYbfBhGrVPRw27nn9fAz6bR0DBV1XGfOcSYXSBrhZCkE1y1lWue348fboRxqX7nz88KBYi05qCHw4AQoZCqyIaWedEXrV2vFVzVHo2glq6Vb1ofAWcEHva7baZAaojA8KN5DVz4UTToKgvoIMa1kjyvZCmFZBpYXoG7H3aIKoyWJzUGCDIUrcFjvjnNZBvAZDZD',
82
+ providerId: 'facebook'
83
+ }.freeze
84
84
 
85
85
  LINKEDIN_ACCOUNT = {
86
- href: "https://api.stormpath.com/v1/accounts/7jdiPam0PWES317hwRR5a7",
87
- username: "nenad.nikolic",
88
- email: "nnikolic87@gmail.com",
89
- givenName: "Nenad",
86
+ href: 'https://api.stormpath.com/v1/accounts/7jdiPam0PWES317hwRR5a7',
87
+ username: 'nenad.nikolic',
88
+ email: 'nnikolic87@gmail.com',
89
+ givenName: 'Nenad',
90
90
  middleName: nil,
91
- surname: "Nikolic",
92
- fullName: "Nenad Nikolic",
93
- status: "ENABLED",
91
+ surname: 'Nikolic',
92
+ fullName: 'Nenad Nikolic',
93
+ status: 'ENABLED',
94
94
  emailVerificationToken: nil,
95
- customData: { href: "https://api.stormpath.com/v1/accounts/7jdiPam0PWES317hwRR5a7/customData"},
96
- providerData: { href:"https://api.stormpath.com/v1/accounts/7jdiPam0PWES317hwRR5a7/providerData"},
97
- directory: { href: "https://api.stormpath.com/v1/directories/7ibyn2idP1d9p3qJOomeNP"},
98
- tenant: { href: "https://api.stormpath.com/v1/tenants/60bD3bKLej6JoFhyKFHiOk"},
99
- groups: { href: "https://api.stormpath.com/v1/accounts/7jdiPam0PWES317hwRR5a7/groups"},
100
- groupMemberships: { href: "https://api.stormpath.com/v1/accounts/7jdiPam0PWES317hwRR5a7/groupMemberships"}
101
- }
95
+ customData: { href: 'https://api.stormpath.com/v1/accounts/7jdiPam0PWES317hwRR5a7/customData' },
96
+ providerData: { href: 'https://api.stormpath.com/v1/accounts/7jdiPam0PWES317hwRR5a7/providerData' },
97
+ directory: { href: 'https://api.stormpath.com/v1/directories/7ibyn2idP1d9p3qJOomeNP' },
98
+ tenant: { href: 'https://api.stormpath.com/v1/tenants/60bD3bKLej6JoFhyKFHiOk' },
99
+ groups: { href: 'https://api.stormpath.com/v1/accounts/7jdiPam0PWES317hwRR5a7/groups' },
100
+ groupMemberships: { href: 'https://api.stormpath.com/v1/accounts/7jdiPam0PWES317hwRR5a7/groupMemberships' }
101
+ }.freeze
102
102
 
103
103
  LINKEDIN_PROVIDER_DATA = {
104
- href: "https://api.stormpath.com/v1/accounts/7jdiPam0PWES317hwRR5a7/providerData",
105
- createdAt: "2014-05-19T13:32:16.884Z",
106
- modifiedAt: "2014-05-19T13:32:16.927Z",
107
- accessToken: "CAATmZBgxF6rMBAPYbfBhGrVPRw27nn9fAz6bR0DBV1XGfOcSYXSBrhZCkE1y1lWue348fboRxqX7nz88KBYi05qCHw4AQoZCqyIaWedEXrV2vFVzVHo2glq6Vb1ofAWcEHva7baZAaojA8KN5DVz4UTToKgvoIMa1kjyvZCmFZBpYXoG7H3aIKoyWJzUGCDIUrcFjvjnNZBvAZDZD",
108
- providerId: "linkedin"
109
- }
104
+ href: 'https://api.stormpath.com/v1/accounts/7jdiPam0PWES317hwRR5a7/providerData',
105
+ createdAt: '2014-05-19T13:32:16.884Z',
106
+ modifiedAt: '2014-05-19T13:32:16.927Z',
107
+ accessToken: 'CAATmZBgxF6rMBAPYbfBhGrVPRw27nn9fAz6bR0DBV1XGfOcSYXSBrhZCkE1y1lWue348fboRxqX7nz88KBYi05qCHw4AQoZCqyIaWedEXrV2vFVzVHo2glq6Vb1ofAWcEHva7baZAaojA8KN5DVz4UTToKgvoIMa1kjyvZCmFZBpYXoG7H3aIKoyWJzUGCDIUrcFjvjnNZBvAZDZD',
108
+ providerId: 'linkedin'
109
+ }.freeze
110
110
 
111
111
  GITHUB_ACCOUNT = {
112
- href: "https://api.stormpath.com/v1/accounts/7jdiPam0PWES317hwRR5a7",
113
- username: "nenad.nikolic",
114
- email: "nnikolic87@gmail.com",
115
- givenName: "Nenad",
112
+ href: 'https://api.stormpath.com/v1/accounts/7jdiPam0PWES317hwRR5a7',
113
+ username: 'nenad.nikolic',
114
+ email: 'nnikolic87@gmail.com',
115
+ givenName: 'Nenad',
116
116
  middleName: nil,
117
- surname: "Nikolic",
118
- fullName: "Nenad Nikolic",
119
- status: "ENABLED",
117
+ surname: 'Nikolic',
118
+ fullName: 'Nenad Nikolic',
119
+ status: 'ENABLED',
120
120
  emailVerificationToken: nil,
121
- customData: { href: "https://api.stormpath.com/v1/accounts/7jdiPam0PWES317hwRR5a7/customData"},
122
- providerData: { href:"https://api.stormpath.com/v1/accounts/7jdiPam0PWES317hwRR5a7/providerData"},
123
- directory: { href: "https://api.stormpath.com/v1/directories/7ibyn2idP1d9p3qJOomeNP"},
124
- tenant: { href: "https://api.stormpath.com/v1/tenants/60bD3bKLej6JoFhyKFHiOk"},
125
- groups: { href: "https://api.stormpath.com/v1/accounts/7jdiPam0PWES317hwRR5a7/groups"},
126
- groupMemberships: { href: "https://api.stormpath.com/v1/accounts/7jdiPam0PWES317hwRR5a7/groupMemberships"}
127
- }
121
+ customData: { href: 'https://api.stormpath.com/v1/accounts/7jdiPam0PWES317hwRR5a7/customData' },
122
+ providerData: { href: 'https://api.stormpath.com/v1/accounts/7jdiPam0PWES317hwRR5a7/providerData' },
123
+ directory: { href: 'https://api.stormpath.com/v1/directories/7ibyn2idP1d9p3qJOomeNP' },
124
+ tenant: { href: 'https://api.stormpath.com/v1/tenants/60bD3bKLej6JoFhyKFHiOk' },
125
+ groups: { href: 'https://api.stormpath.com/v1/accounts/7jdiPam0PWES317hwRR5a7/groups' },
126
+ groupMemberships: { href: 'https://api.stormpath.com/v1/accounts/7jdiPam0PWES317hwRR5a7/groupMemberships' }
127
+ }.freeze
128
128
 
129
129
  TWITTER_ACCOUNT = {
130
- href: "https://api.stormpath.com/v1/accounts/7jdiPam0PWES317hwRR5a7",
131
- username: "nenad.nikolic",
132
- email: "nnikolic87@gmail.com",
133
- givenName: "Nenad",
130
+ href: 'https://api.stormpath.com/v1/accounts/7jdiPam0PWES317hwRR5a7',
131
+ username: 'nenad.nikolic',
132
+ email: 'nnikolic87@gmail.com',
133
+ givenName: 'Nenad',
134
134
  middleName: nil,
135
- surname: "Nikolic",
136
- fullName: "Nenad Nikolic",
137
- status: "ENABLED",
135
+ surname: 'Nikolic',
136
+ fullName: 'Nenad Nikolic',
137
+ status: 'ENABLED',
138
138
  emailVerificationToken: nil,
139
- customData: { href: "https://api.stormpath.com/v1/accounts/7jdiPam0PWES317hwRR5a7/customData"},
140
- providerData: { href:"https://api.stormpath.com/v1/accounts/7jdiPam0PWES317hwRR5a7/providerData"},
141
- directory: { href: "https://api.stormpath.com/v1/directories/7ibyn2idP1d9p3qJOomeNP"},
142
- tenant: { href: "https://api.stormpath.com/v1/tenants/60bD3bKLej6JoFhyKFHiOk"},
143
- groups: { href: "https://api.stormpath.com/v1/accounts/7jdiPam0PWES317hwRR5a7/groups"},
144
- groupMemberships: { href: "https://api.stormpath.com/v1/accounts/7jdiPam0PWES317hwRR5a7/groupMemberships"}
145
- }
139
+ customData: { href: 'https://api.stormpath.com/v1/accounts/7jdiPam0PWES317hwRR5a7/customData' },
140
+ providerData: { href: 'https://api.stormpath.com/v1/accounts/7jdiPam0PWES317hwRR5a7/providerData' },
141
+ directory: { href: 'https://api.stormpath.com/v1/directories/7ibyn2idP1d9p3qJOomeNP' },
142
+ tenant: { href: 'https://api.stormpath.com/v1/tenants/60bD3bKLej6JoFhyKFHiOk' },
143
+ groups: { href: 'https://api.stormpath.com/v1/accounts/7jdiPam0PWES317hwRR5a7/groups' },
144
+ groupMemberships: { href: 'https://api.stormpath.com/v1/accounts/7jdiPam0PWES317hwRR5a7/groupMemberships' }
145
+ }.freeze
146
146
 
147
147
  GITHUB_PROVIDER_DATA = {
148
- href: "https://api.stormpath.com/v1/accounts/7jdiPam0PWES317hwRR5a7/providerData",
149
- createdAt: "2014-05-19T13:32:16.884Z",
150
- modifiedAt: "2014-05-19T13:32:16.927Z",
151
- accessToken: "CAATmZBgxF6rMBAPYbfBhGrVPRw27nn9fAz6bR0DBV1XGfOcSYXSBrhZCkE1y1lWue348fboRxqX7nz88KBYi05qCHw4AQoZCqyIaWedEXrV2vFVzVHo2glq6Vb1ofAWcEHva7baZAaojA8KN5DVz4UTToKgvoIMa1kjyvZCmFZBpYXoG7H3aIKoyWJzUGCDIUrcFjvjnNZBvAZDZD",
152
- providerId: "github"
153
- }
148
+ href: 'https://api.stormpath.com/v1/accounts/7jdiPam0PWES317hwRR5a7/providerData',
149
+ createdAt: '2014-05-19T13:32:16.884Z',
150
+ modifiedAt: '2014-05-19T13:32:16.927Z',
151
+ accessToken: 'CAATmZBgxF6rMBAPYbfBhGrVPRw27nn9fAz6bR0DBV1XGfOcSYXSBrhZCkE1y1lWue348fboRxqX7nz88KBYi05qCHw4AQoZCqyIaWedEXrV2vFVzVHo2glq6Vb1ofAWcEHva7baZAaojA8KN5DVz4UTToKgvoIMa1kjyvZCmFZBpYXoG7H3aIKoyWJzUGCDIUrcFjvjnNZBvAZDZD',
152
+ providerId: 'github'
153
+ }.freeze
154
154
 
155
155
  TWITTER_PROVIDER_DATA = {
156
- href: "https://api.stormpath.com/v1/accounts/7jdiPam0PWES317hwRR5a7/providerData",
157
- createdAt: "2014-05-19T13:32:16.884Z",
158
- modifiedAt: "2014-05-19T13:32:16.927Z",
159
- accessToken: "CAATmZBgxF6rMBAPYbfBhGrVPRw27nn9fAz6bR0DBV1XGfOcSYXSBrhZCkE1y1lWue348fboRxqX7nz88KBYi05qCHw4AQoZCqyIaWedEXrV2vFVzVHo2glq6Vb1ofAWcEHva7baZAaojA8KN5DVz4UTToKgvoIMa1kjyvZCmFZBpYXoG7H3aIKoyWJzUGCDIUrcFjvjnNZBvAZDZD",
160
- providerId: "twitter"
161
- }
156
+ href: 'https://api.stormpath.com/v1/accounts/7jdiPam0PWES317hwRR5a7/providerData',
157
+ createdAt: '2014-05-19T13:32:16.884Z',
158
+ modifiedAt: '2014-05-19T13:32:16.927Z',
159
+ accessToken: 'CAATmZBgxF6rMBAPYbfBhGrVPRw27nn9fAz6bR0DBV1XGfOcSYXSBrhZCkE1y1lWue348fboRxqX7nz88KBYi05qCHw4AQoZCqyIaWedEXrV2vFVzVHo2glq6Vb1ofAWcEHva7baZAaojA8KN5DVz4UTToKgvoIMa1kjyvZCmFZBpYXoG7H3aIKoyWJzUGCDIUrcFjvjnNZBvAZDZD',
160
+ providerId: 'twitter'
161
+ }.freeze
162
162
 
163
163
  GOOGLE_ACCOUNT = {
164
- href: "https://api.stormpath.com/v1/accounts/2XdHmcyFG8HJCYBTEL1dJj",
165
- username: "damir.svrtan@gmail.com",
166
- email: "damir.svrtan@gmail.com",
167
- givenName: "Damir",
164
+ href: 'https://api.stormpath.com/v1/accounts/2XdHmcyFG8HJCYBTEL1dJj',
165
+ username: 'damir.svrtan@gmail.com',
166
+ email: 'damir.svrtan@gmail.com',
167
+ givenName: 'Damir',
168
168
  middleName: nil,
169
- surname: "Svrtan",
170
- fullName: "Damir Svrtan",
171
- status: "ENABLED",
169
+ surname: 'Svrtan',
170
+ fullName: 'Damir Svrtan',
171
+ status: 'ENABLED',
172
172
  emailVerificationToken: nil,
173
- customData: { href: "https://api.stormpath.com/v1/accounts/2XdHmcyFG8HJCYBTEL1dJj/customData" },
174
- providerData: { href: "https://api.stormpath.com/v1/accounts/2XdHmcyFG8HJCYBTEL1dJj/providerData" },
175
- directory: { href: "https://api.stormpath.com/v1/directories/2WU9sRpSn5jpVADlQTAltT" },
176
- tenant: { href: "https://api.stormpath.com/v1/tenants/60bD3bKLej6JoFhyKFHiOk" },
177
- groups: { href: "https://api.stormpath.com/v1/accounts/2XdHmcyFG8HJCYBTEL1dJj/groups" },
178
- groupMemberships: { href: "https://api.stormpath.com/v1/accounts/2XdHmcyFG8HJCYBTEL1dJj/groupMemberships" }
179
- }
173
+ customData: { href: 'https://api.stormpath.com/v1/accounts/2XdHmcyFG8HJCYBTEL1dJj/customData' },
174
+ providerData: { href: 'https://api.stormpath.com/v1/accounts/2XdHmcyFG8HJCYBTEL1dJj/providerData' },
175
+ directory: { href: 'https://api.stormpath.com/v1/directories/2WU9sRpSn5jpVADlQTAltT' },
176
+ tenant: { href: 'https://api.stormpath.com/v1/tenants/60bD3bKLej6JoFhyKFHiOk' },
177
+ groups: { href: 'https://api.stormpath.com/v1/accounts/2XdHmcyFG8HJCYBTEL1dJj/groups' },
178
+ groupMemberships: { href: 'https://api.stormpath.com/v1/accounts/2XdHmcyFG8HJCYBTEL1dJj/groupMemberships' }
179
+ }.freeze
180
180
 
181
181
  GOOGLE_PROVIDER_DATA = {
182
- href: "https://api.stormpath.com/v1/accounts/2XdHmcyFG8HJCYBTEL1dJj/providerData",
183
- createdAt: "2014-05-19T13:34:40.131Z",
184
- modifiedAt: "2014-05-19T13:34:40.172Z",
185
- accessToken: "ya29.GwCFxf7GuqpKOx8AAACnZZvl-TR_UAqpwVHHfUlt-nM_yjVel2FiqjMgAoOtxQ",
186
- providerId: "google",
187
- refreshToken: "Ox8AAACn"
188
- }
182
+ href: 'https://api.stormpath.com/v1/accounts/2XdHmcyFG8HJCYBTEL1dJj/providerData',
183
+ createdAt: '2014-05-19T13:34:40.131Z',
184
+ modifiedAt: '2014-05-19T13:34:40.172Z',
185
+ accessToken: 'ya29.GwCFxf7GuqpKOx8AAACnZZvl-TR_UAqpwVHHfUlt-nM_yjVel2FiqjMgAoOtxQ',
186
+ providerId: 'google',
187
+ refreshToken: 'Ox8AAACn'
188
+ }.freeze
189
189
 
190
190
  STORMPATH_GRANT_RESPONSE = {
191
191
  'access_token' => 'random_access_token',
@@ -0,0 +1,130 @@
1
+ module Stormpath
2
+ module Test
3
+ def self.mocked_create_saml_directory
4
+ MultiJson.dump(CREATE_SAML_DIRECTORY_REQUEST)
5
+ end
6
+
7
+ def self.mocked_create_saml_directory_rules
8
+ MultiJson.dump(CREATE_SAML_DIRECTORY_RULES_REQUEST)
9
+ end
10
+
11
+ def self.mocked_saml_directory_provider_response
12
+ MultiJson.dump(GET_SAML_DIRECTORY_PROVIDER)
13
+ end
14
+
15
+ def self.mocked_saml_directory_provider_metadata_response
16
+ MultiJson.dump(GET_SAML_DIRECTORY_PROVIDER_METADATA)
17
+ end
18
+
19
+ def self.mocked_encoded_x509_signing_cert
20
+ <<-HEREDOC
21
+ -----BEGIN CERTIFICATE-----
22
+ MIIC2DCCAcCgAwIBAgIRAImmW+DAlRHmm+kiAApR5iswDQYJKoZIhvcNAQELBQAw
23
+ FDESMBAGA1UEAwwJU3Rvcm1wYXRoMB4XDTE2MTIxMjE4MDUxNloXDTI2MTIxMjE4
24
+ MDUxNlowHDEaMBgGA1UEAwwRYXBpLnN0b3JtcGF0aC5jb20wggEiMA0GCSqGSIb3
25
+ DQEBAQUAA4IBDwAwggEKAoIBAQCFy1ClzO6br1+gc8w+G3Y5xRqIM5kE/BqZwZea
26
+ ipDnkANUVOnb2ZnVl8iBXu9lzsam0pmsBt9UidjnAh2d7CF0lRGvNSuiWEO72eyZ
27
+ 99s/EnF8MJwEY+R+M8DQYuKuT9hGcS/mErg8FBY9FFSwXGx6cNAIPvYXl5MbcMb+
28
+ xMVdhvc5cdxppwI2jxZCBtekK1poJ7sBjSJWb09Ocv+xtywctLNPX3RlPp6a59e2
29
+ ktZGJHRd19ZwD7ef52NJS6n5ozkStUE4RrWbRS6VqgXtG4lZHJadKEUEJHN258Rw
30
+ j0qQoa5snG0XM2DTfU7e428MQyU9pzTgSSWQFXZRB8L9LFLFAgMBAAGjHTAbMAkG
31
+ A1UdEwQCMAAwDgYDVR0PAQH/BAQDAgWgMA0GCSqGSIb3DQEBCwUAA4IBAQAZo9CK
32
+ ytanl5AVmYa5ltb3eZm/CnwoyRzVm0wqcm1o6RTwq5l1JxODCyrolk33HH68Sm1l
33
+ v4cmlLqBNtG1XqdBggh9yMX24wAxjXa9SeJnuquJIymL27EcmSL3PVUXWQw+6U8e
34
+ pcDwH+Rp7TH0fpSP14xFX0Fgm+fTwUX4eTemm7F39TZfUpNKrwNrqcl+C/yexuTW
35
+ vZKewyCkzw44BUsCxKzEjM9Lq6n9A2KAz/qnYG1LszHSpoSvjzzdkRmA0xAdll+5
36
+ clqWEoHJw1v932MSZE8+fd+a6AvD85ABvhKci44qs2W6ObXoP8qY6Tov5DlNLEOi
37
+ MfF5DfpjJ/btkuRS
38
+ -----END CERTIFICATE-----
39
+ HEREDOC
40
+ end
41
+
42
+ CREATE_SAML_DIRECTORY_REQUEST = {
43
+ href: 'https://api.stormpath.com/v1/directories/2uH3tJWHS4ZE5R7gcOzmGn',
44
+ name: 'test_directory_',
45
+ description: 'description_for_some_test_directory',
46
+ status: 'ENABLED',
47
+ createdAt: '2016-02-05T11:48:28.970Z',
48
+ modifiedAt: '2016-02-05T11:48:28.970Z',
49
+ tenant: { href: 'https://api.stormpath.com/v1/tenants/3BoGKJZ6kwMlIqWCIYf8hr' },
50
+ provider: {
51
+ href: 'https://api.stormpath.com/v1/directories/2uH3tJWHS4ZE5R7gcOzmGn/provider',
52
+ provider_id: 'saml',
53
+ sso_login_url: 'https://yourIdp.com/saml2/sso/login',
54
+ sso_logout_url: 'https://yourIdp.com/saml2/sso/logout',
55
+ encoded_x509_signing_cert: "-----BEGIN CERTIFICATE-----\n...Certificate goes here...\n-----END CERTIFICATE-----",
56
+ request_signature_algorithm: 'RSA-SHA256'
57
+ },
58
+ customData: {
59
+ href: 'https://api.stormpath.com/v1/directories/2uH3tJWHS4ZE5R7gcOzmGn/customData'
60
+ },
61
+ passwordPolicy: {
62
+ href: 'https://api.stormpath.com/v1/passwordPolicies/2uH3tJWHS4ZE5R7gcOzmGn'
63
+ },
64
+ accountCreationPolicy: {
65
+ href: 'https://api.stormpath.com/v1/accountCreationPolicies/2uH3tJWHS4ZE5R7gcOzmGn'
66
+ },
67
+ accounts: {
68
+ href: 'https://api.stormpath.com/v1/directories/2uH3tJWHS4ZE5R7gcOzmGn/accounts'
69
+ },
70
+ applicationMappings: {
71
+ href: 'https://api.stormpath.com/v1/directories/2uH3tJWHS4ZE5R7gcOzmGn/applicationMappings'
72
+ },
73
+ applications: {
74
+ href: 'https://api.stormpath.com/v1/directories/2uH3tJWHS4ZE5R7gcOzmGn/applications'
75
+ },
76
+ groups: {
77
+ href: 'https://api.stormpath.com/v1/directories/2uH3tJWHS4ZE5R7gcOzmGn/groups'
78
+ },
79
+ organizations: {
80
+ href: 'https://api.stormpath.com/v1/directories/2uH3tJWHS4ZE5R7gcOzmGn/organizations'
81
+ },
82
+ organizationMappings: {
83
+ href: 'https://api.stormpath.com/v1/directories/2uH3tJWHS4ZE5R7gcOzmGn/organizationMappings'
84
+ }
85
+ }.freeze
86
+
87
+ CREATE_SAML_DIRECTORY_RULES_REQUEST = {
88
+ href: 'https://api.stormpath.com/v1/attributeStatementMappingRules/5Gd35dLZfFI1DB29xA6ZMe',
89
+ createdAt: '2016-01-27T09:52:28.564Z',
90
+ modifiedAt: '2016-02-29T12:58:50.496Z',
91
+ items: [
92
+ {
93
+ name: 'uid4',
94
+ name_format: 'nil',
95
+ account_attributes: ['username']
96
+ }
97
+ ]
98
+ }.freeze
99
+
100
+ GET_SAML_DIRECTORY_PROVIDER = {
101
+ href: 'https://api.stormpath.com/v1/directories/5GbnGg4HIqoFdlRjHndYQC/provider',
102
+ createdAt: '2016-01-27T09:52:32.850Z',
103
+ modifiedAt: '2016-01-27T09:52:32.850Z',
104
+ providerId: 'saml',
105
+ ssoLoginUrl: 'https://yourIdp.com/saml2/sso/login',
106
+ ssoLogoutUrl: 'https://yourIdp.com/saml2/sso/logout',
107
+ encoded_x509_signing_cert: "-----BEGIN CERTIFICATE-----\n...Certificate goes here...\n-----END CERTIFICATE-----",
108
+ requestSignatureAlgorithm: 'RSA-SHA256',
109
+ attributeStatementMappingRules: {
110
+ href: 'https://api.stormpath.com/v1/attributeStatementMappingRules/5Gd35dLZfFI1DB29xA6ZMe'
111
+ },
112
+ serviceProviderMetadata: {
113
+ href: 'https://api.stormpath.com/v1/samlServiceProviderMetadatas/5LRVP0EMfrpHYijuqgCUAq'
114
+ }
115
+ }.freeze
116
+
117
+ GET_SAML_DIRECTORY_PROVIDER_METADATA = {
118
+ href: 'https://api.stormpath.com/v1/samlServiceProviderMetadatas/5LRVP0EMfrpHYijuqgCUAq',
119
+ createdAt: '2016-01-27T09:52:32.844Z',
120
+ modifiedAt: '2016-01-27T09:52:32.844Z',
121
+ entityId: 'urn:stormpath:directory:5GbnGg4HIqoFdlRjHndYQC:provider:sp',
122
+ assertionConsumerServicePostEndpoint: {
123
+ href: 'https://api.stormpath.com/v1/directories/5GbnGg4HIqoFdlRjHndYQC/saml/sso/post'
124
+ },
125
+ x509SigningCert: {
126
+ href: 'https://api.stormpath.com/v1/x509certificates/5LR5SeoE66qXOAfB1lRqYK'
127
+ }
128
+ }.freeze
129
+ end
130
+ end