stormpath-sdk 1.6.0 → 1.7.0

Sign up to get free protection for your applications and to get access to all the features.
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