stormpath-rails 1.0.0.beta.2 → 1.1.0.beta
Sign up to get free protection for your applications and to get access to all the features.
- 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
|