stormpath-rails 1.0.0.beta.2 → 1.1.0.beta
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +12 -19
- data/.rspec +0 -1
- data/.travis.yml +4 -23
- data/Gemfile +18 -0
- data/README.md +163 -73
- data/Rakefile +18 -3
- data/app/assets/stylesheets/stormpath.css.scss +283 -0
- data/app/controllers/stormpath/rails/base_controller.rb +10 -0
- data/app/controllers/stormpath/rails/omniauth_controller.rb +11 -0
- data/app/controllers/stormpath/rails/passwords_controller.rb +56 -0
- data/app/controllers/stormpath/rails/sessions_controller.rb +52 -0
- data/app/controllers/stormpath/rails/users_controller.rb +65 -0
- data/app/helpers/social_helper.rb +13 -0
- data/app/views/layouts/stormpath.html.erb +31 -0
- data/app/views/passwords/edit.html.erb +0 -0
- data/app/views/passwords/email_sent.html.erb +15 -0
- data/app/views/passwords/forgot.html.erb +33 -0
- data/app/views/passwords/forgot_change.html.erb +38 -0
- data/app/views/passwords/forgot_change_failed.html.erb +14 -0
- data/app/views/passwords/forgot_complete.html.erb +19 -0
- data/app/views/sessions/_facebook_login_form.erb +31 -0
- data/app/views/sessions/_form.html.erb +31 -0
- data/app/views/sessions/_google_login_form.html.erb +3 -0
- data/app/views/sessions/_social_auth.html.erb +7 -0
- data/app/views/sessions/new.html.erb +21 -0
- data/app/views/users/_form.html.erb +43 -0
- data/app/views/users/new.html.erb +10 -0
- data/app/views/users/verification_complete.html.erb +20 -0
- data/app/views/users/verification_email_sent.html.erb +15 -0
- data/app/views/users/verification_failed.html.erb +14 -0
- data/app/views/users/verification_resend.html.erb +14 -0
- data/bin/console +14 -0
- data/bin/rails +12 -0
- data/bin/rake +16 -0
- data/bin/rspec +16 -0
- data/bin/setup +8 -0
- data/config/initializers/assets.rb +1 -0
- data/config/routes.rb +16 -0
- data/lib/generators/stormpath/install/install_generator.rb +114 -0
- data/lib/generators/stormpath/install/templates/db/migrate/add_stormpath_to_users.rb +21 -0
- data/lib/generators/stormpath/install/templates/db/migrate/create_users.rb +12 -0
- data/lib/generators/stormpath/install/templates/stormpath.rb +4 -0
- data/lib/generators/stormpath/install/templates/user.rb +3 -0
- data/lib/generators/stormpath/routes/routes_generator.rb +23 -0
- data/lib/generators/stormpath/routes/templates/routes.rb +5 -0
- data/lib/generators/stormpath/views/USAGE +11 -0
- data/lib/generators/stormpath/views/views_generator.rb +29 -0
- data/lib/stormpath/rails/account.rb +2 -116
- data/lib/stormpath/rails/account_status.rb +28 -0
- data/lib/stormpath/rails/authentication.rb +72 -0
- data/lib/stormpath/rails/authentication_status.rb +22 -0
- data/lib/stormpath/rails/client.rb +73 -60
- data/lib/stormpath/rails/configuration.rb +56 -0
- data/lib/stormpath/rails/controller.rb +13 -0
- data/lib/stormpath/rails/engine.rb +6 -0
- data/lib/stormpath/rails/session.rb +37 -0
- data/lib/stormpath/rails/social.rb +34 -0
- data/lib/stormpath/rails/user.rb +25 -0
- data/lib/stormpath/rails/user_config/api_key.rb +17 -0
- data/lib/stormpath/rails/user_config/application.rb +12 -0
- data/lib/stormpath/rails/user_config/facebook.rb +16 -0
- data/lib/stormpath/rails/user_config/forgot_password.rb +12 -0
- data/lib/stormpath/rails/user_config/google.rb +16 -0
- data/lib/stormpath/rails/user_config/id_site.rb +13 -0
- data/lib/stormpath/rails/user_config/login.rb +13 -0
- data/lib/stormpath/rails/user_config/logout.rb +13 -0
- data/lib/stormpath/rails/user_config/register.rb +13 -0
- data/lib/stormpath/rails/user_config/verify_email.rb +14 -0
- data/lib/stormpath/rails/version.rb +1 -2
- data/lib/stormpath/rails.rb +32 -0
- data/lib/stormpath/testing/helpers.rb +49 -0
- data/lib/stormpath-rails.rb +6 -1
- data/stormpath-rails.gemspec +22 -28
- metadata +97 -256
- data/.ruby-gemset +0 -1
- data/.ruby-version +0 -1
- data/CHANGES.md +0 -19
- data/Guardfile +0 -23
- data/LICENSE.txt +0 -22
- data/lib/generators/stormpath/rails/migration/migration_generator.rb +0 -17
- data/lib/generators/stormpath/rails/templates/update_account_model.rb +0 -10
- data/lib/stormpath/rails/railtie.rb +0 -13
- data/spec/client_spec.rb +0 -222
- data/spec/generators/migration_generator_spec.rb +0 -19
- data/spec/integration/active_record_spec.rb +0 -23
- data/spec/integration/mongoid_spec.rb +0 -19
- data/spec/spec_helper.rb +0 -96
- data/spec/support/stormpath_account_shared_examples.rb +0 -212
@@ -0,0 +1,56 @@
|
|
1
|
+
module Stormpath
|
2
|
+
module Rails
|
3
|
+
class Configuration
|
4
|
+
attr_accessor :secret_key, :expand_custom_data, :user_model
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
@expand_custom_data = true
|
8
|
+
end
|
9
|
+
|
10
|
+
def user_model
|
11
|
+
@user_model ||= ::User
|
12
|
+
end
|
13
|
+
|
14
|
+
[:login, :logout, :register, :id_site, :api_key, :application, :verify_email,
|
15
|
+
:forgot_password, :facebook, :google].each do |action|
|
16
|
+
define_method("#{action}=") do |options|
|
17
|
+
klass = user_config_class(action)
|
18
|
+
instance_variable_set("@#{action}", klass.new(options))
|
19
|
+
end
|
20
|
+
|
21
|
+
define_method("#{action}") do |&block|
|
22
|
+
action_value = instance_variable_get("@#{action}")
|
23
|
+
|
24
|
+
if action_value.nil?
|
25
|
+
klass = user_config_class(action)
|
26
|
+
instance_variable_set("@#{action}", klass.new())
|
27
|
+
end
|
28
|
+
|
29
|
+
if block
|
30
|
+
block.call(instance_variable_get("@#{action}"))
|
31
|
+
end
|
32
|
+
|
33
|
+
instance_variable_get("@#{action}")
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
private
|
38
|
+
|
39
|
+
def user_config_class(action)
|
40
|
+
UserConfig.const_get(action.to_s.camelize)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
# Return a single instance of Configuration class
|
45
|
+
# @return [Stormpath::Configuration] single instance
|
46
|
+
def self.config
|
47
|
+
@configuration ||= Configuration.new
|
48
|
+
end
|
49
|
+
|
50
|
+
# Configure the settings for this module
|
51
|
+
# @param [lambda] which will be passed isntance of configuration class
|
52
|
+
def self.configure
|
53
|
+
yield(config)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'stormpath/rails/authentication'
|
2
|
+
|
3
|
+
module Stormpath
|
4
|
+
module Rails
|
5
|
+
module Controller
|
6
|
+
extend ActiveSupport::Concern
|
7
|
+
|
8
|
+
include Stormpath::Rails::Authentication
|
9
|
+
include Stormpath::Rails::Session
|
10
|
+
include Stormpath::Rails::Social
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module Stormpath
|
2
|
+
module Rails
|
3
|
+
module Session
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
included do
|
7
|
+
helper_method :current_user, :signed_in?, :signed_out?
|
8
|
+
end
|
9
|
+
|
10
|
+
private
|
11
|
+
|
12
|
+
def initialize_session(user)
|
13
|
+
session[:user_id] = user.id
|
14
|
+
end
|
15
|
+
|
16
|
+
def reset_session
|
17
|
+
session[:user_id] = nil
|
18
|
+
end
|
19
|
+
|
20
|
+
def logout
|
21
|
+
reset_session
|
22
|
+
end
|
23
|
+
|
24
|
+
def signed_in?
|
25
|
+
!session[:user_id].nil?
|
26
|
+
end
|
27
|
+
|
28
|
+
def signed_out?
|
29
|
+
!signed_in?
|
30
|
+
end
|
31
|
+
|
32
|
+
def current_user
|
33
|
+
@current_user ||= configuration.user_model.find(session[:user_id]) if session[:user_id]
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module Stormpath
|
2
|
+
module Rails
|
3
|
+
module Social
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
included do
|
7
|
+
helper_method :facebook_login_enabled?, :facebook_app_id,
|
8
|
+
:google_login_enabled?, :google_client_id, :social_auth?
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def facebook_login_enabled?
|
14
|
+
configuration.facebook.enabled?
|
15
|
+
end
|
16
|
+
|
17
|
+
def google_login_enabled?
|
18
|
+
configuration.google.enabled?
|
19
|
+
end
|
20
|
+
|
21
|
+
def facebook_app_id
|
22
|
+
configuration.facebook.app_id
|
23
|
+
end
|
24
|
+
|
25
|
+
def google_client_id
|
26
|
+
configuration.google.client_id
|
27
|
+
end
|
28
|
+
|
29
|
+
def social_auth?
|
30
|
+
facebook_login_enabled? || google_login_enabled?
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Stormpath
|
2
|
+
module Rails
|
3
|
+
module User
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
included do
|
7
|
+
attr_accessor :password
|
8
|
+
|
9
|
+
validates :email, presence: true, uniqueness: true
|
10
|
+
validates_presence_of :given_name
|
11
|
+
validates_presence_of :surname
|
12
|
+
end
|
13
|
+
|
14
|
+
module ClassMethods
|
15
|
+
def find_user(email)
|
16
|
+
find_by email: normalize_email(email)
|
17
|
+
end
|
18
|
+
|
19
|
+
def normalize_email(email)
|
20
|
+
email.to_s.downcase.gsub(/\s+/, "")
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Stormpath
|
2
|
+
module Rails
|
3
|
+
module UserConfig
|
4
|
+
class ApiKey
|
5
|
+
include Virtus.model
|
6
|
+
|
7
|
+
attribute :file, String
|
8
|
+
attribute :id, String
|
9
|
+
attribute :secret, String
|
10
|
+
|
11
|
+
def file_location_provided?
|
12
|
+
!self.file.nil?
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Stormpath
|
2
|
+
module Rails
|
3
|
+
module UserConfig
|
4
|
+
class Facebook
|
5
|
+
include Virtus.model
|
6
|
+
|
7
|
+
attribute :app_id, String
|
8
|
+
attribute :app_secret, String
|
9
|
+
|
10
|
+
def enabled?
|
11
|
+
!(self.app_id.blank? && self.app_secret.blank?)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Stormpath
|
2
|
+
module Rails
|
3
|
+
module UserConfig
|
4
|
+
class Google
|
5
|
+
include Virtus.model
|
6
|
+
|
7
|
+
attribute :client_id, String
|
8
|
+
attribute :client_secret, String
|
9
|
+
|
10
|
+
def enabled?
|
11
|
+
!(self.client_id.blank? && self.client_secret.blank?)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Stormpath
|
2
|
+
module Rails
|
3
|
+
module UserConfig
|
4
|
+
class IdSite
|
5
|
+
include Virtus.model
|
6
|
+
|
7
|
+
attribute :enabled, Boolean, default: false
|
8
|
+
attribute :uri, String, default: '/redirect'
|
9
|
+
attribute :next_uri, String, default: '/'
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Stormpath
|
2
|
+
module Rails
|
3
|
+
module UserConfig
|
4
|
+
class Register
|
5
|
+
include Virtus.model
|
6
|
+
|
7
|
+
attribute :enabled, Boolean, default: true
|
8
|
+
attribute :uri, String, default: '/register'
|
9
|
+
attribute :next_uri, String, default: '/'
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Stormpath
|
2
|
+
module Rails
|
3
|
+
module UserConfig
|
4
|
+
class VerifyEmail
|
5
|
+
include Virtus.model
|
6
|
+
|
7
|
+
attribute :enabled, Boolean, default: false
|
8
|
+
attribute :uri, String, default: '/verify'
|
9
|
+
attribute :next_uri, String
|
10
|
+
attribute :view, String
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'stormpath-sdk'
|
2
|
+
require 'stormpath/rails/engine'
|
3
|
+
require 'stormpath/rails/configuration'
|
4
|
+
require 'virtus'
|
5
|
+
|
6
|
+
module Stormpath
|
7
|
+
module Rails
|
8
|
+
autoload :Client, 'stormpath/rails/client'
|
9
|
+
autoload :Authentication, 'stormpath/rails/authentication'
|
10
|
+
autoload :Session, 'stormpath/rails/session'
|
11
|
+
autoload :Controller, 'stormpath/rails/controller'
|
12
|
+
autoload :Account, 'stormpath/rails/account'
|
13
|
+
autoload :Version, 'stormpath/rails/version'
|
14
|
+
autoload :User, 'stormpath/rails/user'
|
15
|
+
autoload :AuthenticationStatus, 'stormpath/rails/authentication_status'
|
16
|
+
autoload :AccountStatus, 'stormpath/rails/account_status'
|
17
|
+
autoload :Social, 'stormpath/rails/social'
|
18
|
+
|
19
|
+
module UserConfig
|
20
|
+
autoload :ApiKey, 'stormpath/rails/user_config/api_key'
|
21
|
+
autoload :Application, 'stormpath/rails/user_config/application'
|
22
|
+
autoload :ForgotPassword, 'stormpath/rails/user_config/forgot_password'
|
23
|
+
autoload :IdSite, 'stormpath/rails/user_config/id_site'
|
24
|
+
autoload :VerifyEmail, 'stormpath/rails/user_config/verify_email'
|
25
|
+
autoload :Facebook, 'stormpath/rails/user_config/facebook'
|
26
|
+
autoload :Google, 'stormpath/rails/user_config/google'
|
27
|
+
autoload :Login, 'stormpath/rails/user_config/login'
|
28
|
+
autoload :Logout, 'stormpath/rails/user_config/logout'
|
29
|
+
autoload :Register, 'stormpath/rails/user_config/register'
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
module Stormpath
|
2
|
+
module Testing
|
3
|
+
module Helpers
|
4
|
+
def sign_in
|
5
|
+
create_test_account
|
6
|
+
@controller.send(:authenticate, test_user)
|
7
|
+
@controller.send(:initialize_session, test_user)
|
8
|
+
test_user
|
9
|
+
end
|
10
|
+
|
11
|
+
def create_test_account
|
12
|
+
create_store_mapping
|
13
|
+
@test_account_result ||= Stormpath::Rails::Client.create_stormpath_account(test_user)
|
14
|
+
end
|
15
|
+
|
16
|
+
def delete_test_account
|
17
|
+
if @test_account_result && @test_account_result.success?
|
18
|
+
@test_account_result.response.delete
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_user
|
23
|
+
factory = Stormpath::Rails.config.user_model.to_s.underscore.to_sym
|
24
|
+
@test_user ||= FactoryGirl.create(factory)
|
25
|
+
@test_user.attributes = @test_user.attributes.merge!("password" => @test_user.password)
|
26
|
+
@test_user
|
27
|
+
end
|
28
|
+
|
29
|
+
def create_test_directory
|
30
|
+
unless @test_directory
|
31
|
+
@test_directory ||= Stormpath::Rails::Client.client.directories.create(name: 'test-directory')
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def delete_test_directory
|
36
|
+
@test_directory.delete if @test_directory
|
37
|
+
end
|
38
|
+
|
39
|
+
def create_store_mapping
|
40
|
+
@store_mapping ||= Stormpath::Rails::Client.client.account_store_mappings.create(
|
41
|
+
application: Stormpath::Rails::Client.application,
|
42
|
+
account_store: create_test_directory,
|
43
|
+
is_default_account_store: true,
|
44
|
+
is_default_group_store: true
|
45
|
+
)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
data/lib/stormpath-rails.rb
CHANGED
data/stormpath-rails.gemspec
CHANGED
@@ -1,36 +1,30 @@
|
|
1
|
+
# coding: utf-8
|
1
2
|
lib = File.expand_path('../lib', __FILE__)
|
2
3
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
4
|
require 'stormpath/rails/version'
|
4
5
|
|
5
|
-
Gem::Specification.new do |
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
gem.email = ['liquidautumn@gmail.com']
|
11
|
-
gem.homepage = 'http://www.stormpath.com'
|
12
|
-
gem.description = %q{Stormpath Rails integration}
|
13
|
-
gem.summary = %q{Stormpath SDK API Wrapper}
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "stormpath-rails"
|
8
|
+
spec.version = Stormpath::Rails::VERSION
|
9
|
+
spec.authors = ["Nenad Nikolic"]
|
10
|
+
spec.email = ["nenad.nikolic@infinum.hr"]
|
14
11
|
|
15
|
-
|
16
|
-
|
12
|
+
spec.summary = %q{TODO: Write a short summary, because Rubygems requires one.}
|
13
|
+
spec.description = %q{TODO: Write a longer description or delete this line.}
|
14
|
+
spec.homepage = "TODO: Put your gem's website or public repo URL here."
|
17
15
|
|
18
|
-
|
19
|
-
|
20
|
-
|
16
|
+
spec.summary = %q{Stormpath Rails integration}
|
17
|
+
spec.description = %q{Stormpath Rails integration}
|
18
|
+
spec.homepage = 'http://www.stormpath.com'
|
21
19
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
gem.add_development_dependency('webmock')
|
33
|
-
gem.add_development_dependency('vcr')
|
34
|
-
gem.add_development_dependency('pry')
|
35
|
-
gem.add_development_dependency('pry-debugger')
|
20
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
21
|
+
spec.bindir = "exe"
|
22
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
23
|
+
spec.require_paths = ["lib"]
|
24
|
+
|
25
|
+
spec.add_dependency 'stormpath-sdk', '>= 1.0.0.beta.8'
|
26
|
+
spec.add_dependency 'virtus'
|
27
|
+
spec.add_dependency 'rails', '>= 3.1'
|
28
|
+
|
29
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
36
30
|
end
|