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.
- checksums.yaml +4 -4
- data/.rubocop.yml +21 -0
- data/CHANGES.md +11 -0
- data/README.md +23 -25
- data/lib/stormpath-sdk.rb +11 -2
- data/lib/stormpath-sdk/api_key.rb +0 -1
- data/lib/stormpath-sdk/auth/basic_authenticator.rb +7 -7
- data/lib/stormpath-sdk/auth/basic_login_attempt.rb +7 -11
- data/lib/stormpath-sdk/auth/create_factor.rb +1 -1
- data/lib/stormpath-sdk/auth/register_service_provider.rb +41 -0
- data/lib/stormpath-sdk/auth/username_password_request.rb +3 -5
- data/lib/stormpath-sdk/cache/cache.rb +3 -3
- data/lib/stormpath-sdk/cache/cache_entry.rb +2 -2
- data/lib/stormpath-sdk/cache/cache_manager.rb +3 -4
- data/lib/stormpath-sdk/cache/cache_stats.rb +1 -3
- data/lib/stormpath-sdk/cache/disabled_cache_store.rb +5 -8
- data/lib/stormpath-sdk/cache/memory_store.rb +1 -1
- data/lib/stormpath-sdk/cache/redis_store.rb +4 -4
- data/lib/stormpath-sdk/client.rb +35 -33
- data/lib/stormpath-sdk/data_store.rb +278 -257
- data/lib/stormpath-sdk/error.rb +18 -7
- data/lib/stormpath-sdk/http/authc/sauthc1_signer.rb +76 -82
- data/lib/stormpath-sdk/http/http_client_request_executor.rb +10 -8
- data/lib/stormpath-sdk/http/response.rb +5 -7
- data/lib/stormpath-sdk/id_site/id_site_result.rb +5 -6
- data/lib/stormpath-sdk/oauth/access_token_authentication_result.rb +5 -9
- data/lib/stormpath-sdk/oauth/authenticator.rb +2 -2
- data/lib/stormpath-sdk/oauth/error.rb +4 -4
- data/lib/stormpath-sdk/oauth/id_site_grant_request.rb +1 -1
- data/lib/stormpath-sdk/oauth/password_grant_request.rb +1 -1
- data/lib/stormpath-sdk/oauth/refresh_grant_request.rb +2 -2
- data/lib/stormpath-sdk/oauth/stormpath_grant_request.rb +2 -2
- data/lib/stormpath-sdk/provider/account_access.rb +0 -2
- data/lib/stormpath-sdk/provider/account_result.rb +1 -2
- data/lib/stormpath-sdk/provider/facebook/facebook_provider.rb +6 -2
- data/lib/stormpath-sdk/provider/facebook/facebook_provider_data.rb +7 -3
- data/lib/stormpath-sdk/provider/github/github_provider.rb +6 -2
- data/lib/stormpath-sdk/provider/github/github_provider_data.rb +6 -2
- data/lib/stormpath-sdk/provider/google/google_provider.rb +7 -3
- data/lib/stormpath-sdk/provider/google/google_provider_data.rb +6 -2
- data/lib/stormpath-sdk/provider/linkedin/linkedin_provider.rb +6 -2
- data/lib/stormpath-sdk/provider/linkedin/linkedin_provider_data.rb +6 -2
- data/lib/stormpath-sdk/provider/provider.rb +8 -4
- data/lib/stormpath-sdk/provider/provider_data.rb +6 -2
- data/lib/stormpath-sdk/provider/saml/saml_provider.rb +10 -4
- data/lib/stormpath-sdk/provider/saml/saml_provider_data.rb +6 -3
- data/lib/stormpath-sdk/provider/stormpath/stormpath_provider.rb +6 -2
- data/lib/stormpath-sdk/provider/stormpath/stormpath_provider_data.rb +6 -2
- data/lib/stormpath-sdk/provider/twitter/twitter_provider.rb +6 -2
- data/lib/stormpath-sdk/provider/twitter/twitter_provider_data.rb +6 -2
- data/lib/stormpath-sdk/resource/account.rb +46 -40
- data/lib/stormpath-sdk/resource/account_link.rb +9 -5
- data/lib/stormpath-sdk/resource/account_linking_policy.rb +8 -4
- data/lib/stormpath-sdk/resource/account_membership.rb +1 -1
- data/lib/stormpath-sdk/resource/account_overrides.rb +20 -16
- data/lib/stormpath-sdk/resource/account_store.rb +15 -11
- data/lib/stormpath-sdk/resource/account_store_mapping.rb +14 -13
- data/lib/stormpath-sdk/resource/application.rb +147 -136
- data/lib/stormpath-sdk/resource/application_web_config.rb +11 -7
- data/lib/stormpath-sdk/resource/associations.rb +36 -43
- data/lib/stormpath-sdk/resource/attribute_statement_mapping_rules.rb +8 -0
- data/lib/stormpath-sdk/resource/base.rb +201 -200
- data/lib/stormpath-sdk/resource/challenge.rb +12 -8
- data/lib/stormpath-sdk/resource/collection.rb +77 -76
- data/lib/stormpath-sdk/resource/custom_data.rb +60 -61
- data/lib/stormpath-sdk/resource/custom_data_hash_methods.rb +28 -25
- data/lib/stormpath-sdk/resource/custom_data_storage.rb +18 -16
- data/lib/stormpath-sdk/resource/directory.rb +37 -60
- data/lib/stormpath-sdk/resource/email_verification_token.rb +7 -3
- data/lib/stormpath-sdk/resource/error.rb +8 -4
- data/lib/stormpath-sdk/resource/expansion.rb +22 -20
- data/lib/stormpath-sdk/resource/factor.rb +12 -8
- data/lib/stormpath-sdk/resource/field.rb +8 -4
- data/lib/stormpath-sdk/resource/group.rb +21 -16
- data/lib/stormpath-sdk/resource/group_membership.rb +7 -5
- data/lib/stormpath-sdk/resource/instance.rb +10 -6
- data/lib/stormpath-sdk/resource/linked_account.rb +7 -3
- data/lib/stormpath-sdk/resource/oauth_policy.rb +7 -3
- data/lib/stormpath-sdk/resource/organization.rb +14 -10
- data/lib/stormpath-sdk/resource/organization_account_store_mapping.rb +8 -4
- data/lib/stormpath-sdk/resource/password_reset_token.rb +9 -5
- data/lib/stormpath-sdk/resource/phone.rb +8 -4
- data/lib/stormpath-sdk/resource/registered_saml_service_provider.rb +8 -0
- data/lib/stormpath-sdk/resource/saml_identity_provider.rb +14 -0
- data/lib/stormpath-sdk/resource/saml_identity_provider_metadata.rb +9 -0
- data/lib/stormpath-sdk/resource/saml_policy.rb +10 -0
- data/lib/stormpath-sdk/resource/saml_service_provider.rb +7 -0
- data/lib/stormpath-sdk/{provider/saml/saml_mapping_rules.rb → resource/saml_service_provider_metadata.rb} +6 -5
- data/lib/stormpath-sdk/resource/saml_service_provider_registration.rb +11 -0
- data/lib/stormpath-sdk/resource/schema.rb +8 -4
- data/lib/stormpath-sdk/resource/tenant.rb +11 -8
- data/lib/stormpath-sdk/resource/user_info_mapping_rules.rb +7 -3
- data/lib/stormpath-sdk/resource/utils.rb +7 -10
- data/lib/stormpath-sdk/resource/verification_email.rb +7 -3
- data/lib/stormpath-sdk/resource/x_509_certificate.rb +7 -0
- data/lib/stormpath-sdk/util/assert.rb +1 -3
- data/lib/stormpath-sdk/version.rb +2 -2
- data/spec/auth/basic_authenticator_spec.rb +28 -24
- data/spec/auth/register_service_provider_spec.rb +68 -0
- data/spec/auth/sauthc1_signer_spec.rb +8 -4
- data/spec/cache/cache_entry_spec.rb +28 -29
- data/spec/cache/cache_spec.rb +9 -9
- data/spec/cache/cache_stats_spec.rb +1 -1
- data/spec/client_spec.rb +63 -63
- data/spec/data_store_spec.rb +23 -14
- data/spec/oauth/access_token_authentication_result_spec.rb +8 -2
- data/spec/provider/account_resolver_spec.rb +6 -4
- data/spec/provider/provider_spec.rb +6 -6
- data/spec/resource/account_creation_policy_spec.rb +1 -1
- data/spec/resource/account_link_spec.rb +7 -15
- data/spec/resource/account_spec.rb +17 -17
- data/spec/resource/account_store_mapping_spec.rb +16 -22
- data/spec/resource/account_store_spec.rb +3 -3
- data/spec/resource/application_spec.rb +324 -330
- data/spec/resource/base_spec.rb +7 -31
- data/spec/resource/collection_spec.rb +63 -114
- data/spec/resource/custom_data_spec.rb +1 -1
- data/spec/resource/directory_spec.rb +91 -87
- data/spec/resource/expansion_spec.rb +10 -10
- data/spec/resource/factor_spec.rb +1 -1
- data/spec/resource/group_spec.rb +1 -1
- data/spec/resource/linked_account_spec.rb +7 -7
- data/spec/resource/organization_spec.rb +12 -11
- data/spec/resource/phone_spec.rb +1 -1
- data/spec/resource/registered_saml_service_provider_spec.rb +35 -0
- data/spec/resource/saml_identity_provider_metadata_spec.rb +27 -0
- data/spec/resource/saml_identity_provider_spec.rb +94 -0
- data/spec/resource/saml_policy_spec.rb +27 -0
- data/spec/resource/saml_service_provider_registration_spec.rb +58 -0
- data/spec/resource/saml_service_provider_spec.rb +19 -0
- data/spec/resource/status_spec.rb +4 -3
- data/spec/resource/tenant_spec.rb +4 -6
- data/spec/spec_helper.rb +1 -1
- data/spec/support/custom_data_save_period.rb +4 -0
- data/spec/support/custom_data_storage_behavior.rb +7 -8
- data/spec/support/mocked_provider_accounts.rb +101 -101
- data/spec/support/mocked_saml_responses.rb +130 -0
- data/spec/support/resource_factory.rb +4 -4
- data/spec/support/resource_helpers.rb +10 -4
- data/spec/support/resource_matchers.rb +4 -4
- data/spec/support/test_request_executor.rb +2 -2
- metadata +21 -8
- data/lib/stormpath-sdk/provider/saml/saml_provider_metadata.rb +0 -19
- data/spec/fixtures/response/create_saml_directory.json +0 -26
- data/spec/fixtures/response/create_saml_directory_mapping_rules.json +0 -12
- data/spec/fixtures/response/get_saml_directory_provider.json +0 -16
- 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("
|
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:
|
15
|
+
directory.accounts.create(account_attrs(email: username, password: 'P@$$w0rd'))
|
15
16
|
end
|
16
|
-
let(:reloaded_account) { test_api_client.accounts.get
|
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
|
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[
|
26
|
+
tenant.custom_data['category'] = 'classified'
|
28
27
|
|
29
28
|
tenant.save
|
30
|
-
expect(tenant.custom_data[
|
29
|
+
expect(tenant.custom_data['category']).to eq('classified')
|
31
30
|
end
|
32
31
|
end
|
33
|
-
|
34
32
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -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
|
|
@@ -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
|
19
|
-
let(:reloaded_custom_data_storage_2) { test_api_client.accounts.get
|
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
|
41
|
-
let(:reloaded_custom_data_storage_2) { test_api_client.groups.get
|
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:
|
61
|
-
username:
|
62
|
-
email:
|
63
|
-
givenName:
|
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:
|
66
|
-
fullName:
|
67
|
-
status:
|
65
|
+
surname: 'Svrtan',
|
66
|
+
fullName: 'Damir Svrtan',
|
67
|
+
status: 'ENABLED',
|
68
68
|
emailVerificationToken: nil,
|
69
|
-
customData: { href:
|
70
|
-
providerData: { href:
|
71
|
-
directory: { href:
|
72
|
-
tenant: { href:
|
73
|
-
groups: { href:
|
74
|
-
groupMemberships: { href:
|
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:
|
79
|
-
createdAt:
|
80
|
-
modifiedAt:
|
81
|
-
accessToken:
|
82
|
-
providerId:
|
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:
|
87
|
-
username:
|
88
|
-
email:
|
89
|
-
givenName:
|
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:
|
92
|
-
fullName:
|
93
|
-
status:
|
91
|
+
surname: 'Nikolic',
|
92
|
+
fullName: 'Nenad Nikolic',
|
93
|
+
status: 'ENABLED',
|
94
94
|
emailVerificationToken: nil,
|
95
|
-
customData: { href:
|
96
|
-
providerData: { href:
|
97
|
-
directory: { href:
|
98
|
-
tenant: { href:
|
99
|
-
groups: { href:
|
100
|
-
groupMemberships: { href:
|
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:
|
105
|
-
createdAt:
|
106
|
-
modifiedAt:
|
107
|
-
accessToken:
|
108
|
-
providerId:
|
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:
|
113
|
-
username:
|
114
|
-
email:
|
115
|
-
givenName:
|
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:
|
118
|
-
fullName:
|
119
|
-
status:
|
117
|
+
surname: 'Nikolic',
|
118
|
+
fullName: 'Nenad Nikolic',
|
119
|
+
status: 'ENABLED',
|
120
120
|
emailVerificationToken: nil,
|
121
|
-
customData: { href:
|
122
|
-
providerData: { href:
|
123
|
-
directory: { href:
|
124
|
-
tenant: { href:
|
125
|
-
groups: { href:
|
126
|
-
groupMemberships: { href:
|
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:
|
131
|
-
username:
|
132
|
-
email:
|
133
|
-
givenName:
|
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:
|
136
|
-
fullName:
|
137
|
-
status:
|
135
|
+
surname: 'Nikolic',
|
136
|
+
fullName: 'Nenad Nikolic',
|
137
|
+
status: 'ENABLED',
|
138
138
|
emailVerificationToken: nil,
|
139
|
-
customData: { href:
|
140
|
-
providerData: { href:
|
141
|
-
directory: { href:
|
142
|
-
tenant: { href:
|
143
|
-
groups: { href:
|
144
|
-
groupMemberships: { href:
|
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:
|
149
|
-
createdAt:
|
150
|
-
modifiedAt:
|
151
|
-
accessToken:
|
152
|
-
providerId:
|
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:
|
157
|
-
createdAt:
|
158
|
-
modifiedAt:
|
159
|
-
accessToken:
|
160
|
-
providerId:
|
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:
|
165
|
-
username:
|
166
|
-
email:
|
167
|
-
givenName:
|
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:
|
170
|
-
fullName:
|
171
|
-
status:
|
169
|
+
surname: 'Svrtan',
|
170
|
+
fullName: 'Damir Svrtan',
|
171
|
+
status: 'ENABLED',
|
172
172
|
emailVerificationToken: nil,
|
173
|
-
customData: { href:
|
174
|
-
providerData: { href:
|
175
|
-
directory: { href:
|
176
|
-
tenant: { href:
|
177
|
-
groups: { href:
|
178
|
-
groupMemberships: { href:
|
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:
|
183
|
-
createdAt:
|
184
|
-
modifiedAt:
|
185
|
-
accessToken:
|
186
|
-
providerId:
|
187
|
-
refreshToken:
|
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
|