stormpath-rails 2.6.0 → 2.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (34) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +8 -0
  3. data/README.md +1 -1
  4. data/app/controllers/stormpath/rails/base_controller.rb +10 -2
  5. data/app/controllers/stormpath/rails/forgot_password/create_controller.rb +2 -1
  6. data/app/controllers/stormpath/rails/id_site_callback/new_controller.rb +45 -12
  7. data/app/controllers/stormpath/rails/login/create_controller.rb +2 -1
  8. data/app/controllers/stormpath/rails/logout/create_controller.rb +3 -2
  9. data/app/controllers/stormpath/rails/register/create_controller.rb +2 -0
  10. data/app/forms/stormpath/rails/organization_form.rb +3 -1
  11. data/app/forms/stormpath/rails/registration_form.rb +4 -1
  12. data/app/helpers/social_helper.rb +38 -0
  13. data/app/services/stormpath/rails/delete_access_token.rb +4 -2
  14. data/app/services/stormpath/rails/social_directories.rb +29 -0
  15. data/app/services/stormpath/rails/social_login_url_builder.rb +64 -0
  16. data/app/services/stormpath/rails/token_cookie_setter.rb +3 -1
  17. data/app/services/stormpath/rails/url_builder.rb +2 -4
  18. data/app/views/stormpath/rails/shared/_social_login.html.erb +10 -16
  19. data/bin/rails +2 -1
  20. data/docs/changelog.rst +8 -0
  21. data/lib/stormpath/rails.rb +2 -0
  22. data/lib/stormpath/rails/base_url_initializer.rb +32 -0
  23. data/lib/stormpath/rails/client.rb +3 -1
  24. data/lib/stormpath/rails/config/account_store_verification.rb +4 -2
  25. data/lib/stormpath/rails/config/application_client_api.rb +16 -0
  26. data/lib/stormpath/rails/config/application_resolution.rb +4 -8
  27. data/lib/stormpath/rails/config/dynamic_configuration.rb +5 -0
  28. data/lib/stormpath/rails/config/multitenancy_verification.rb +2 -1
  29. data/lib/stormpath/rails/config/social_login_verification.rb +8 -10
  30. data/lib/stormpath/rails/configuration.rb +2 -0
  31. data/lib/stormpath/rails/content_type_negotiator.rb +1 -2
  32. data/lib/stormpath/rails/version.rb +1 -2
  33. data/stormpath-rails.gemspec +1 -1
  34. metadata +8 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ebee53dc4f55842adcb065bbddb0383e93d2bc5c
4
- data.tar.gz: 7a5795af616685fce590251a0dcc629acb4dd313
3
+ metadata.gz: 212204b2cb03d9b5dfaa4f7b63fc3ab0d9b033e2
4
+ data.tar.gz: fd25eb7f34d2bb5a70d513080683a65ca646ed7f
5
5
  SHA512:
6
- metadata.gz: 9a6d8b681aaeff9abd022554028e40112fe8374f937078d0376f2f1d49a87da1291e748640b1a6ef685500f8c989f10ed6a5fb4080dc60702f9feac5d555f1e6
7
- data.tar.gz: b6d88b5c183a76b71c6c6abdd9ef3f821ce701a48cb721c7dc9c848b875b987e33dafaa5e1a9bfe2e22ebcb0c0fe2d603e6e933411ae9ceeb4ee5512e2dfa89e
6
+ metadata.gz: 22d981c58901860bf5dc410f243a0c25a02079de19e569ac07f68fb9fd5634c9980a0f7ff7343b4b443b1f0448a7f1f45aa7a3332b1a4de15381a0daec1869fc
7
+ data.tar.gz: bcd83712b69cd7d1eee54294fc1d63cfc5a3166e5e04537b01a9d840c2b98c34862faf812b1b150ab829ece331e5bc0609f1af4f2d5b7fc75bb11039f89e85d3
@@ -1,6 +1,14 @@
1
1
  Stormpath Rails Changelog
2
2
  ============================
3
3
 
4
+ Version 2.7.0
5
+ -------------
6
+ Released on Feb 06, 2017
7
+ - Social login now uses the Client API for authentication (Social login v2)
8
+ - Automatically initialize base href from application href (after this version you don't have to set the basePath explicitly in the stormpath.yml)
9
+ - Code refactoring
10
+
11
+
4
12
  Version 2.6.0
5
13
  -------------
6
14
  Released on Jan 24, 2017
data/README.md CHANGED
@@ -16,7 +16,7 @@ Add the stormpath-rails integration gem to your Gemfile.
16
16
  Stormpath is currently in beta so it is necessary to include the gem version:
17
17
 
18
18
  ```ruby
19
- gem 'stormpath-rails', '~> 2.6.0'
19
+ gem 'stormpath-rails', '~> 2.7.0'
20
20
  ```
21
21
 
22
22
  Bundle the Gemfile
@@ -41,8 +41,9 @@ module Stormpath
41
41
 
42
42
  def current_organization
43
43
  if stormpath_config.web.multi_tenancy.enabled
44
- Stormpath::Rails::OrganizationResolver.new(req, params[:organization_name_key])
45
- .organization
44
+ Stormpath::Rails::OrganizationResolver.new(
45
+ req, params[:organization_name_key]
46
+ ).organization
46
47
  end
47
48
  end
48
49
 
@@ -55,6 +56,13 @@ module Stormpath
55
56
  end
56
57
  helper_method :current_organization_name_key
57
58
 
59
+ def social_auth
60
+ @social_auth ||= SocialLoginUrlBuilder.call(
61
+ req.base_url, organization_name_key: current_organization_name_key
62
+ )
63
+ end
64
+ helper_method :social_auth
65
+
58
66
  def req
59
67
  request
60
68
  end
@@ -12,7 +12,8 @@ module Stormpath
12
12
  respond_with_success
13
13
  rescue SendPasswordResetEmail::UnexistingEmailError
14
14
  respond_with_success
15
- rescue SendPasswordResetEmail::NoEmailError, Stormpath::Rails::OrganizationForm::FormError => error
15
+ rescue SendPasswordResetEmail::NoEmailError,
16
+ Stormpath::Rails::OrganizationForm::FormError => error
16
17
  respond_with_error(error)
17
18
  end
18
19
  end
@@ -7,8 +7,10 @@ module Stormpath
7
7
  begin
8
8
  if id_site_result.status == 'LOGOUT'
9
9
  TokenAndCookiesCleaner.new(cookies).remove
10
- else
11
- login_the_account
10
+ elsif id_site_result.status == 'AUTHENTICATED'
11
+ login_account_and_set_cookies
12
+ elsif id_site_result.status == 'REGISTERED'
13
+ login_account_and_set_cookies if valid_for_login?
12
14
  end
13
15
 
14
16
  respond_with_success
@@ -19,7 +21,7 @@ module Stormpath
19
21
 
20
22
  private
21
23
 
22
- def login_the_account
24
+ def login_account_and_set_cookies
23
25
  AccountLoginWithStormpathToken.new(
24
26
  cookies, account,
25
27
  Stormpath::Rails::Client.application,
@@ -30,13 +32,21 @@ module Stormpath
30
32
  def respond_with_success
31
33
  if id_site_result.status == 'LOGOUT'
32
34
  respond_to do |format|
33
- format.html { redirect_to stormpath_config.web.logout.next_uri, notice: 'Successfully logged out' }
34
- format.json { head :no_content }
35
+ format.html do
36
+ redirect_to(stormpath_config.web.logout.next_uri,
37
+ notice: 'You have been logged out successfully.')
38
+ end
39
+ format.json { render nothing: true, status: 200 }
35
40
  end
36
- else
41
+ elsif id_site_result.status == 'AUTHENTICATED'
37
42
  respond_to do |format|
38
43
  format.html { redirect_to login_redirect_route, notice: 'Successfully signed in' }
39
- format.json { render json: AccountSerializer.to_h(account) }
44
+ format.json { render json: serialized_account }
45
+ end
46
+ elsif id_site_result.status == 'REGISTERED'
47
+ respond_to do |format|
48
+ format.html { redirect_to register_redirect_route }
49
+ format.json { render json: serialized_account }
40
50
  end
41
51
  end
42
52
  end
@@ -53,16 +63,39 @@ module Stormpath
53
63
  end
54
64
  end
55
65
 
56
- def login_redirect_route
57
- if params[:next]
58
- URI(params[:next]).path
66
+ def valid_for_login?
67
+ auto_login_enabled? && !email_verification_enabled?
68
+ end
69
+
70
+ def register_redirect_route
71
+ if email_verification_enabled?
72
+ "#{stormpath_config.web.login.uri}?status=unverified"
73
+ elsif auto_login_enabled?
74
+ stormpath_config.web.register.next_uri
59
75
  else
60
- stormpath_config.web.login.next_uri
76
+ "#{stormpath_config.web.login.uri}?status=created"
61
77
  end
62
78
  end
63
79
 
80
+ def email_verification_enabled?
81
+ account.status == 'UNVERIFIED'
82
+ end
83
+
84
+ def auto_login_enabled?
85
+ stormpath_config.web.register.auto_login
86
+ end
87
+
88
+ def serialized_account
89
+ AccountSerializer.to_h(account)
90
+ end
91
+
92
+ def login_redirect_route
93
+ params[:next] ? URI(params[:next]).path : stormpath_config.web.login.next_uri
94
+ end
95
+
64
96
  def id_site_result
65
- @id_site_result ||= Stormpath::Rails::Client.application.handle_id_site_callback(request.url)
97
+ @id_site_result ||=
98
+ Stormpath::Rails::Client.application.handle_id_site_callback(request.url)
66
99
  end
67
100
 
68
101
  def account
@@ -9,7 +9,8 @@ module Stormpath
9
9
  form.save!
10
10
  set_cookies if account_login?
11
11
  respond_with_success
12
- rescue Stormpath::Error, LoginForm::FormError, SocialLoginForm::FormError, OrganizationForm::FormError, OrganizationResolver::Error => error
12
+ rescue Stormpath::Error, LoginForm::FormError, SocialLoginForm::FormError,
13
+ OrganizationForm::FormError, OrganizationResolver::Error => error
13
14
  respond_with_error(error)
14
15
  end
15
16
  end
@@ -40,8 +40,9 @@ module Stormpath
40
40
  end
41
41
 
42
42
  def stormpath_id_site_logout_url
43
- Stormpath::Rails::Client.application.create_id_site_url(callback_uri: id_site_result_url,
44
- logout: true)
43
+ Stormpath::Rails::Client.application.create_id_site_url(
44
+ callback_uri: id_site_result_url, logout: true
45
+ )
45
46
  end
46
47
  end
47
48
  end
@@ -4,7 +4,9 @@ module Stormpath
4
4
  class CreateController < BaseController
5
5
  def call
6
6
  form.save!
7
+
7
8
  login_the_account if valid_for_login?
9
+
8
10
  respond_with_success
9
11
  rescue RegistrationForm::FormError, OrganizationForm::FormError => error
10
12
  respond_with_error(error)
@@ -16,7 +16,9 @@ module Stormpath
16
16
 
17
17
  def save!
18
18
  begin
19
- Stormpath::Rails::OrganizationResolver.new(OpenStruct.new(subdomains: [name_key])).organization
19
+ Stormpath::Rails::OrganizationResolver.new(
20
+ OpenStruct.new(subdomains: [name_key])
21
+ ).organization
20
22
  rescue Stormpath::Rails::OrganizationResolver::Error
21
23
  raise FormError, 'Organization could not be found'
22
24
  end
@@ -74,7 +74,10 @@ module Stormpath
74
74
 
75
75
  def organization
76
76
  begin
77
- @organization ||= Stormpath::Rails::Client.client.organizations.search(name_key: organization_name_key).first
77
+ @organization ||=
78
+ Stormpath::Rails::Client.client.organizations.search(
79
+ name_key: organization_name_key
80
+ ).first
78
81
  rescue Stormpath::Error
79
82
  nil
80
83
  end
@@ -11,6 +11,44 @@ module SocialHelper
11
11
  social_providers_present? ? 'col-sm-12' : 'col-sm-8'
12
12
  end
13
13
 
14
+ def social_login_v2_enabled?
15
+ Stormpath::Rails.config.web.callback.enabled &&
16
+ Stormpath::Rails.config.web.client_api.enabled &&
17
+ Stormpath::Rails.config.web.client_api.domain_name.present?
18
+ end
19
+
20
+ def facebook_enabled?
21
+ Stormpath::Rails.config.web.facebook_app_id
22
+ end
23
+
24
+ def github_enabled?
25
+ Stormpath::Rails.config.web.github_app_id
26
+ end
27
+
28
+ def google_enabled?
29
+ Stormpath::Rails.config.web.google_app_id
30
+ end
31
+
32
+ def linkedin_enabled?
33
+ Stormpath::Rails.config.web.linkedin_app_id
34
+ end
35
+
36
+ def link_to_facebook_login(url)
37
+ link_to 'Facebook', url, class: 'btn btn-social btn-facebook' if facebook_enabled? && url.present?
38
+ end
39
+
40
+ def link_to_google_login(url)
41
+ link_to 'Google', url, class: 'btn btn-social btn-google' if google_enabled? && url.present?
42
+ end
43
+
44
+ def link_to_linkedin_login(url)
45
+ link_to 'LinkedIn', url, class: 'btn btn-social btn-linkedin' if linkedin_enabled? && url.present?
46
+ end
47
+
48
+ def link_to_github_login(url)
49
+ link_to 'GitHub', url, class: 'btn btn-social btn-github' if github_enabled? && url.present?
50
+ end
51
+
14
52
  def facebook_oauth_url
15
53
  URI::HTTPS.build(
16
54
  host: 'www.facebook.com',
@@ -16,8 +16,10 @@ module Stormpath
16
16
  private
17
17
 
18
18
  def delete_token
19
- token_resource.delete
20
- rescue JWT::ExpiredSignature, JWT::DecodeError
19
+ begin
20
+ token_resource.delete
21
+ rescue JWT::ExpiredSignature, JWT::DecodeError
22
+ end
21
23
  end
22
24
 
23
25
  def token_resource
@@ -0,0 +1,29 @@
1
+ module Stormpath
2
+ module Rails
3
+ class SocialDirectories
4
+ def self.for(application)
5
+ new(application).call
6
+ end
7
+
8
+ def initialize(application)
9
+ @application = application
10
+ end
11
+
12
+ def call
13
+ application.account_store_mappings.select do |mapping|
14
+ account_store = mapping.account_store
15
+ account_store if social_directory?(account_store)
16
+ end.map(&:account_store)
17
+ end
18
+
19
+ private
20
+
21
+ def social_directory?(account_store)
22
+ account_store.class == Stormpath::Resource::Directory &&
23
+ account_store.provider.respond_to?(:client_id)
24
+ end
25
+
26
+ attr_reader :application
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,64 @@
1
+ module Stormpath
2
+ module Rails
3
+ class SocialLoginUrlBuilder
4
+ attr_reader :base_url, :organization_name_key
5
+
6
+ def self.call(base_url, options = {})
7
+ new(base_url, options[:organization_name_key])
8
+ end
9
+
10
+ def initialize(base_url, organization_name_key = nil)
11
+ @base_url = base_url
12
+ @organization_name_key = organization_name_key
13
+ initialize_directories
14
+ end
15
+
16
+ private
17
+
18
+ def initialize_directories
19
+ social_directories.each do |account_store|
20
+ instance_variable_set("@#{account_store.provider.provider_id}_login_url",
21
+ login_url_for(account_store))
22
+ end
23
+ end
24
+
25
+ def login_url_for(directory)
26
+ URI.unescape(URI::HTTPS.build(
27
+ host: Stormpath::Rails.config.web.client_api.domain_name,
28
+ path: '/authorize',
29
+ query: query_parameters_for(directory).to_query
30
+ ).to_s)
31
+ end
32
+
33
+ def query_parameters_for(directory)
34
+ {}.tap do |body|
35
+ body[:response_type] = 'stormpath_token'
36
+ body[:account_store_href] = directory.href
37
+ body[:scope] = directory.provider.scope.join('+')
38
+ body[:redirect_uri] = "#{base_url}#{Stormpath::Rails.config.web.callback.uri}"
39
+ body[:organization_name_key] = organization_name_key if organization_name_key.present?
40
+ end
41
+ end
42
+
43
+ def application
44
+ @application ||= Stormpath::Rails::Client.application
45
+ end
46
+
47
+ def social_directories
48
+ @social_directories ||= SocialDirectories.for(application)
49
+ end
50
+
51
+ def method_missing(method_name, *args, &block)
52
+ if instance_variable_names.include? "@#{method_name}"
53
+ instance_variable_get "@#{method_name}"
54
+ else
55
+ ''
56
+ end
57
+ end
58
+
59
+ def respond_to_missing?(method_name, include_private = false)
60
+ method_name.to_s.end_with?('_login_url') || super
61
+ end
62
+ end
63
+ end
64
+ end
@@ -58,7 +58,9 @@ class SingleTokenCookieSetter
58
58
  end
59
59
 
60
60
  def expires
61
- Time.zone.at(JWT.decode(token, Stormpath::Rails::Client.client.data_store.api_key.secret).first['exp'])
61
+ Time.zone.at(
62
+ JWT.decode(token, Stormpath::Rails::Client.client.data_store.api_key.secret).first['exp']
63
+ )
62
64
  end
63
65
 
64
66
  def http_only
@@ -24,10 +24,8 @@ module Stormpath
24
24
  end
25
25
 
26
26
  def host_and_path
27
- {
28
- host: host,
29
- path: path
30
- }
27
+ { host: host,
28
+ path: path }
31
29
  end
32
30
  end
33
31
  end
@@ -4,21 +4,15 @@
4
4
  </div>
5
5
 
6
6
  <label>Easy 1-click login:</label>
7
-
8
- <% if Stormpath::Rails.config.web.facebook_app_id %>
9
- <%= link_to 'Facebook', facebook_oauth_url, class: 'btn btn-social btn-facebook' %>
10
- <% end %>
11
-
12
- <% if Stormpath::Rails.config.web.google_app_id %>
13
- <%= link_to 'Google', google_oauth_url, class: 'btn btn-social btn-google' %>
14
- <% end %>
15
-
16
- <% if Stormpath::Rails.config.web.linkedin_app_id %>
17
- <%= link_to 'LinkedIn', linkedin_oauth_url, class: 'btn btn-social btn-linkedin' %>
18
- <% end %>
19
-
20
- <% if Stormpath::Rails.config.web.github_app_id %>
21
- <%= link_to 'GitHub', github_oauth_url, class: 'btn btn-social btn-github' %>
7
+ <% if social_login_v2_enabled? %>
8
+ <%= link_to_facebook_login(social_auth.facebook_login_url) %>
9
+ <%= link_to_google_login(social_auth.google_login_url) %>
10
+ <%= link_to_linkedin_login(social_auth.linkedin_login_url) %>
11
+ <%= link_to_github_login(social_auth.github_login_url) %>
12
+ <% else %>
13
+ <%= link_to_facebook_login(facebook_oauth_url) %>
14
+ <%= link_to_google_login(google_oauth_url) %>
15
+ <%= link_to_linkedin_login(linkedin_oauth_url) %>
16
+ <%= link_to_github_login(github_oauth_url) %>
22
17
  <% end %>
23
-
24
18
  </div>
data/bin/rails CHANGED
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
- # This command will automatically be run when you run "rails" with Rails 4 gems installed from the root of your application.
2
+ # This command will automatically be run when you run "rails" with Rails 4 gems installed from the
3
+ # root of your application.
3
4
 
4
5
  ENGINE_ROOT = File.expand_path('../..', __FILE__)
5
6
  ENGINE_PATH = File.expand_path('../../lib/stormpath/rails/engine', __FILE__)
@@ -6,6 +6,14 @@ Change Log
6
6
 
7
7
  Gem changes until version 2.0.1, in descending order.
8
8
 
9
+ Version 2.7.0
10
+ -------------
11
+ Released on Feb 06, 2017
12
+ - Social login now uses the Client API for authentication (Social login v2)
13
+ - Automatically initialize base href from application href (after this version you don't have to set the basePath explicitly in the stormpath.yml)
14
+ - Code refactoring
15
+
16
+
9
17
  Version 2.6.0
10
18
  -------------
11
19
  Released on Jan 24, 2017
@@ -3,6 +3,7 @@ require 'stormpath/rails/engine'
3
3
  require 'stormpath/rails/config/read_file'
4
4
  require 'stormpath/rails/config/application_resolution'
5
5
  require 'stormpath/rails/config/account_store_verification'
6
+ require 'stormpath/rails/config/application_client_api'
6
7
  require 'stormpath/rails/config/dynamic_configuration'
7
8
  require 'stormpath/rails/config/multitenancy_verification'
8
9
  require 'stormpath/rails/config/id_site_verification'
@@ -18,6 +19,7 @@ module Stormpath
18
19
  autoload :Version, 'stormpath/rails/version'
19
20
  autoload :Social, 'stormpath/rails/social'
20
21
  autoload :ApiKey, 'stormpath/rails/api_key'
22
+ autoload :BaseUrlInitializer, 'stormpath/rails/base_url_initializer'
21
23
  autoload :ContentTypeNegotiator, 'stormpath/rails/content_type_negotiator'
22
24
  autoload :RoutingConstraint, 'stormpath/rails/routing_constraint'
23
25
  autoload :InvalidSptokenError, 'stormpath/rails/errors/invalid_sptoken_error'
@@ -0,0 +1,32 @@
1
+ module Stormpath
2
+ module Rails
3
+ class BaseUrlInitializer
4
+ DEFAULT_API_VERSION = 1
5
+ DEFAULT_API_SCHEME = 'https'.freeze
6
+ attr_reader :application_uri, :base_url
7
+
8
+ def initialize(application_href)
9
+ @application_uri = URI(application_href)
10
+ @base_url = extract_base_url_from_uri
11
+ end
12
+
13
+ def self.call(application_href)
14
+ if application_href.blank?
15
+ raise(InvalidConfiguration,
16
+ 'Please set the application href in your configuration options.')
17
+ end
18
+ new(application_href).base_url
19
+ end
20
+
21
+ private
22
+
23
+ def extract_base_url_from_uri
24
+ "#{DEFAULT_API_SCHEME}://#{host}/v#{DEFAULT_API_VERSION}"
25
+ end
26
+
27
+ def host
28
+ application_uri.host
29
+ end
30
+ end
31
+ end
32
+ end
@@ -32,7 +32,9 @@ module Stormpath
32
32
  end
33
33
 
34
34
  def self.base_url
35
- Stormpath::Rails.config.merged_config_hashes['stormpath']['web']['base_path']
35
+ Stormpath::Rails::BaseUrlInitializer.call(
36
+ Stormpath::Rails.config.merged_config_hashes['stormpath']['application']['href']
37
+ )
36
38
  end
37
39
  end
38
40
  end
@@ -20,7 +20,8 @@ module Stormpath
20
20
  return if app_has_account_store_mappings?
21
21
  raise(
22
22
  InvalidConfiguration,
23
- 'No account stores are mapped to the specified application. Account stores are required for login and registration.'
23
+ 'No account stores are mapped to the specified application. Account stores are '\
24
+ 'required for login and registration.'
24
25
  )
25
26
  end
26
27
 
@@ -28,7 +29,8 @@ module Stormpath
28
29
  return if app_has_default_account_store_mapping?
29
30
  raise(
30
31
  InvalidConfiguration,
31
- 'No default account store is mapped to the specified application. A default account store is required for registration.'
32
+ 'No default account store is mapped to the specified application. A default account '\
33
+ 'store is required for registration.'
32
34
  )
33
35
  end
34
36
 
@@ -0,0 +1,16 @@
1
+ module Stormpath
2
+ module Rails
3
+ module Config
4
+ class ApplicationClientApi
5
+ attr_reader :app, :web_config, :client_api_enabled, :client_api_domain
6
+
7
+ def initialize(app)
8
+ @app = app
9
+ @web_config = app.web_config
10
+ @client_api_enabled = web_config.status == 'ENABLED'
11
+ @client_api_domain = web_config.domain_name
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -56,19 +56,15 @@ module Stormpath
56
56
 
57
57
  def verify_application_href
58
58
  if href && href !~ /applications/
59
- raise(
60
- InvalidConfiguration,
61
- "#{href} is not a valid Stormpath Application href."
62
- )
59
+ raise(InvalidConfiguration, "#{href} is not a valid Stormpath Application href.")
63
60
  end
64
61
  end
65
62
 
66
63
  def app_from_name
67
64
  application = Stormpath::Rails::Client.client.applications.search(name: name).first
68
- application || raise(
69
- InvalidConfiguration,
70
- "The provided application could not be found. The provided application name was: #{name}"
71
- )
65
+ application || raise(InvalidConfiguration,
66
+ 'The provided application could not be found. The provided'\
67
+ " application name was: #{name}")
72
68
  end
73
69
  end
74
70
  end
@@ -13,6 +13,7 @@ module Stormpath
13
13
  :linkedin_app_id,
14
14
  to: :social_login_verification
15
15
  )
16
+ delegate(:client_api_enabled, :client_api_domain, to: :application_client_api)
16
17
 
17
18
  def initialize(static_config)
18
19
  @static_config = static_config
@@ -71,6 +72,10 @@ module Stormpath
71
72
  ).call
72
73
  end
73
74
 
75
+ def application_client_api
76
+ ApplicationClientApi.new(app)
77
+ end
78
+
74
79
  def process_multitenancy_verification
75
80
  MultitenancyVerification.new(static_config.stormpath.web).call
76
81
  end
@@ -18,7 +18,8 @@ module Stormpath
18
18
  return if multitenancy_set_correctly?
19
19
  raise(
20
20
  InvalidConfiguration,
21
- "Multitenancy is not set correctly in the configuration file. It needs to have a domainName and multitenancy strategy set to 'subdomain'"
21
+ 'Multitenancy is not set correctly in the configuration file. '\
22
+ "It needs to have a domainName and multitenancy strategy set to 'subdomain'"
22
23
  )
23
24
  end
24
25
 
@@ -2,13 +2,9 @@ module Stormpath
2
2
  module Rails
3
3
  module Config
4
4
  class SocialLoginVerification
5
- attr_reader :app,
6
- :facebook_app_id,
7
- :facebook_app_secret,
8
- :github_app_id,
9
- :github_app_secret,
10
- :google_app_id,
11
- :linkedin_app_id
5
+ attr_reader :app, :facebook_app_id, :facebook_app_secret,
6
+ :github_app_id, :github_app_secret,
7
+ :google_app_id, :linkedin_app_id
12
8
 
13
9
  def initialize(app_href)
14
10
  @app = Stormpath::Rails::Client.client.applications.get(app_href)
@@ -18,9 +14,7 @@ module Stormpath
18
14
  private
19
15
 
20
16
  def initialize_directories
21
- app.account_store_mappings.each do |mapping|
22
- account_store = mapping.account_store
23
- next unless account_store.class == Stormpath::Resource::Directory
17
+ social_directories.each do |account_store|
24
18
  case account_store.provider.provider_id
25
19
  when 'facebook'
26
20
  @facebook_app_id = account_store.provider.client_id
@@ -35,6 +29,10 @@ module Stormpath
35
29
  end
36
30
  end
37
31
  end
32
+
33
+ def social_directories
34
+ @social_directories ||= SocialDirectories.for(app)
35
+ end
38
36
  end
39
37
  end
40
38
  end
@@ -34,6 +34,8 @@ module Stormpath
34
34
  config.stormpath.web.linkedin_app_id = dynamic_config.linkedin_app_id
35
35
  config.stormpath.web.has_social_providers = dynamic_config.has_social_providers?
36
36
  config.stormpath.web.verify_email.enabled = dynamic_config.verify_email_enabled?
37
+ config.stormpath.web.client_api = { enabled: dynamic_config.client_api_enabled,
38
+ domain_name: dynamic_config.client_api_domain }
37
39
  end
38
40
  end
39
41
 
@@ -1,4 +1,3 @@
1
- # frozen_string_literal: true
2
1
  module Stormpath
3
2
  module Rails
4
3
  class ContentTypeNegotiator
@@ -43,7 +42,7 @@ module Stormpath
43
42
  HTTP_ACCEPT_JSON
44
43
  elsif accept_header.include?(HTTP_ACCEPT_HTML)
45
44
  HTTP_ACCEPT_HTML
46
- end
45
+ end
47
46
  end
48
47
  end
49
48
  end
@@ -1,6 +1,5 @@
1
- # frozen_string_literal: true
2
1
  module Stormpath
3
2
  module Rails
4
- VERSION = '2.6.0'.freeze
3
+ VERSION = '2.7.0'.freeze
5
4
  end
6
5
  end
@@ -22,7 +22,7 @@ Gem::Specification.new do |spec|
22
22
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
23
23
  spec.require_paths = ['lib']
24
24
 
25
- spec.add_dependency 'stormpath-sdk', '>= 1.3.1'
25
+ spec.add_dependency 'stormpath-sdk', '>= 1.6.0'
26
26
  spec.add_dependency 'virtus'
27
27
  spec.add_dependency 'rails', '>= 3.1'
28
28
  spec.add_dependency 'recursive-open-struct'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stormpath-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.6.0
4
+ version: 2.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nenad Nikolic
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-01-24 00:00:00.000000000 Z
11
+ date: 2017-02-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: stormpath-sdk
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 1.3.1
19
+ version: 1.6.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 1.3.1
26
+ version: 1.6.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: virtus
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -157,6 +157,8 @@ files:
157
157
  - app/services/stormpath/rails/refresh_token_authentication.rb
158
158
  - app/services/stormpath/rails/resend_email_verification.rb
159
159
  - app/services/stormpath/rails/send_password_reset_email.rb
160
+ - app/services/stormpath/rails/social_directories.rb
161
+ - app/services/stormpath/rails/social_login_url_builder.rb
160
162
  - app/services/stormpath/rails/token_and_cookies_cleaner.rb
161
163
  - app/services/stormpath/rails/token_cookie_setter.rb
162
164
  - app/services/stormpath/rails/url_builder.rb
@@ -242,8 +244,10 @@ files:
242
244
  - lib/stormpath-rails.rb
243
245
  - lib/stormpath/rails.rb
244
246
  - lib/stormpath/rails/api_key.rb
247
+ - lib/stormpath/rails/base_url_initializer.rb
245
248
  - lib/stormpath/rails/client.rb
246
249
  - lib/stormpath/rails/config/account_store_verification.rb
250
+ - lib/stormpath/rails/config/application_client_api.rb
247
251
  - lib/stormpath/rails/config/application_resolution.rb
248
252
  - lib/stormpath/rails/config/dynamic_configuration.rb
249
253
  - lib/stormpath/rails/config/id_site_verification.rb