cloudfoundry-devise 1.5.2
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.
- data/.gitignore +12 -0
- data/.travis.yml +13 -0
- data/CHANGELOG.rdoc +755 -0
- data/Gemfile +35 -0
- data/MIT-LICENSE +20 -0
- data/README.rdoc +366 -0
- data/Rakefile +34 -0
- data/app/controllers/devise/confirmations_controller.rb +46 -0
- data/app/controllers/devise/omniauth_callbacks_controller.rb +26 -0
- data/app/controllers/devise/passwords_controller.rb +50 -0
- data/app/controllers/devise/registrations_controller.rb +114 -0
- data/app/controllers/devise/sessions_controller.rb +49 -0
- data/app/controllers/devise/unlocks_controller.rb +34 -0
- data/app/helpers/devise_helper.rb +25 -0
- data/app/mailers/devise/mailer.rb +15 -0
- data/app/views/devise/confirmations/new.html.erb +12 -0
- data/app/views/devise/mailer/confirmation_instructions.html.erb +5 -0
- data/app/views/devise/mailer/reset_password_instructions.html.erb +8 -0
- data/app/views/devise/mailer/unlock_instructions.html.erb +7 -0
- data/app/views/devise/passwords/edit.html.erb +16 -0
- data/app/views/devise/passwords/new.html.erb +12 -0
- data/app/views/devise/registrations/edit.html.erb +25 -0
- data/app/views/devise/registrations/new.html.erb +18 -0
- data/app/views/devise/sessions/new.html.erb +17 -0
- data/app/views/devise/shared/_links.erb +25 -0
- data/app/views/devise/unlocks/new.html.erb +12 -0
- data/cloudfoundry-devise.gemspec +25 -0
- data/config/locales/en.yml +59 -0
- data/lib/devise.rb +453 -0
- data/lib/devise/controllers/helpers.rb +260 -0
- data/lib/devise/controllers/internal_helpers.rb +161 -0
- data/lib/devise/controllers/rememberable.rb +52 -0
- data/lib/devise/controllers/scoped_views.rb +33 -0
- data/lib/devise/controllers/shared_helpers.rb +26 -0
- data/lib/devise/controllers/url_helpers.rb +53 -0
- data/lib/devise/delegator.rb +16 -0
- data/lib/devise/encryptors/authlogic_sha512.rb +19 -0
- data/lib/devise/encryptors/base.rb +20 -0
- data/lib/devise/encryptors/clearance_sha1.rb +17 -0
- data/lib/devise/encryptors/restful_authentication_sha1.rb +22 -0
- data/lib/devise/encryptors/sha1.rb +25 -0
- data/lib/devise/encryptors/sha512.rb +25 -0
- data/lib/devise/failure_app.rb +149 -0
- data/lib/devise/hooks/activatable.rb +11 -0
- data/lib/devise/hooks/forgetable.rb +9 -0
- data/lib/devise/hooks/rememberable.rb +6 -0
- data/lib/devise/hooks/timeoutable.rb +24 -0
- data/lib/devise/hooks/trackable.rb +9 -0
- data/lib/devise/mailers/helpers.rb +86 -0
- data/lib/devise/mapping.rb +175 -0
- data/lib/devise/models.rb +91 -0
- data/lib/devise/models/authenticatable.rb +181 -0
- data/lib/devise/models/confirmable.rb +220 -0
- data/lib/devise/models/database_authenticatable.rb +122 -0
- data/lib/devise/models/encryptable.rb +72 -0
- data/lib/devise/models/lockable.rb +169 -0
- data/lib/devise/models/omniauthable.rb +23 -0
- data/lib/devise/models/recoverable.rb +136 -0
- data/lib/devise/models/registerable.rb +21 -0
- data/lib/devise/models/rememberable.rb +114 -0
- data/lib/devise/models/serializable.rb +43 -0
- data/lib/devise/models/timeoutable.rb +45 -0
- data/lib/devise/models/token_authenticatable.rb +72 -0
- data/lib/devise/models/trackable.rb +30 -0
- data/lib/devise/models/validatable.rb +62 -0
- data/lib/devise/modules.rb +30 -0
- data/lib/devise/omniauth.rb +28 -0
- data/lib/devise/omniauth/config.rb +45 -0
- data/lib/devise/omniauth/url_helpers.rb +33 -0
- data/lib/devise/orm/active_record.rb +44 -0
- data/lib/devise/orm/mongoid.rb +31 -0
- data/lib/devise/param_filter.rb +41 -0
- data/lib/devise/path_checker.rb +18 -0
- data/lib/devise/rails.rb +73 -0
- data/lib/devise/rails/routes.rb +385 -0
- data/lib/devise/rails/warden_compat.rb +120 -0
- data/lib/devise/schema.rb +109 -0
- data/lib/devise/strategies/authenticatable.rb +155 -0
- data/lib/devise/strategies/base.rb +15 -0
- data/lib/devise/strategies/database_authenticatable.rb +21 -0
- data/lib/devise/strategies/rememberable.rb +53 -0
- data/lib/devise/strategies/token_authenticatable.rb +57 -0
- data/lib/devise/test_helpers.rb +90 -0
- data/lib/devise/version.rb +3 -0
- data/lib/generators/active_record/devise_generator.rb +71 -0
- data/lib/generators/active_record/templates/migration.rb +29 -0
- data/lib/generators/active_record/templates/migration_existing.rb +26 -0
- data/lib/generators/devise/devise_generator.rb +22 -0
- data/lib/generators/devise/install_generator.rb +24 -0
- data/lib/generators/devise/orm_helpers.rb +31 -0
- data/lib/generators/devise/views_generator.rb +98 -0
- data/lib/generators/mongoid/devise_generator.rb +60 -0
- data/lib/generators/templates/README +32 -0
- data/lib/generators/templates/devise.rb +215 -0
- data/lib/generators/templates/markerb/confirmation_instructions.markerb +5 -0
- data/lib/generators/templates/markerb/reset_password_instructions.markerb +8 -0
- data/lib/generators/templates/markerb/unlock_instructions.markerb +7 -0
- data/lib/generators/templates/simple_form_for/confirmations/new.html.erb +15 -0
- data/lib/generators/templates/simple_form_for/passwords/edit.html.erb +19 -0
- data/lib/generators/templates/simple_form_for/passwords/new.html.erb +15 -0
- data/lib/generators/templates/simple_form_for/registrations/edit.html.erb +22 -0
- data/lib/generators/templates/simple_form_for/registrations/new.html.erb +17 -0
- data/lib/generators/templates/simple_form_for/sessions/new.html.erb +15 -0
- data/lib/generators/templates/simple_form_for/unlocks/new.html.erb +15 -0
- data/test/controllers/helpers_test.rb +254 -0
- data/test/controllers/internal_helpers_test.rb +96 -0
- data/test/controllers/sessions_controller_test.rb +16 -0
- data/test/controllers/url_helpers_test.rb +59 -0
- data/test/delegator_test.rb +19 -0
- data/test/devise_test.rb +72 -0
- data/test/encryptors_test.rb +30 -0
- data/test/failure_app_test.rb +207 -0
- data/test/generators/active_record_generator_test.rb +47 -0
- data/test/generators/devise_generator_test.rb +39 -0
- data/test/generators/install_generator_test.rb +13 -0
- data/test/generators/mongoid_generator_test.rb +23 -0
- data/test/generators/views_generator_test.rb +52 -0
- data/test/helpers/devise_helper_test.rb +51 -0
- data/test/indifferent_hash.rb +33 -0
- data/test/integration/authenticatable_test.rb +590 -0
- data/test/integration/confirmable_test.rb +262 -0
- data/test/integration/database_authenticatable_test.rb +82 -0
- data/test/integration/http_authenticatable_test.rb +82 -0
- data/test/integration/lockable_test.rb +212 -0
- data/test/integration/omniauthable_test.rb +133 -0
- data/test/integration/recoverable_test.rb +287 -0
- data/test/integration/registerable_test.rb +335 -0
- data/test/integration/rememberable_test.rb +158 -0
- data/test/integration/timeoutable_test.rb +98 -0
- data/test/integration/token_authenticatable_test.rb +148 -0
- data/test/integration/trackable_test.rb +92 -0
- data/test/mailers/confirmation_instructions_test.rb +95 -0
- data/test/mailers/reset_password_instructions_test.rb +83 -0
- data/test/mailers/unlock_instructions_test.rb +77 -0
- data/test/mapping_test.rb +128 -0
- data/test/models/confirmable_test.rb +334 -0
- data/test/models/database_authenticatable_test.rb +167 -0
- data/test/models/encryptable_test.rb +67 -0
- data/test/models/lockable_test.rb +225 -0
- data/test/models/recoverable_test.rb +198 -0
- data/test/models/rememberable_test.rb +168 -0
- data/test/models/serializable_test.rb +38 -0
- data/test/models/timeoutable_test.rb +42 -0
- data/test/models/token_authenticatable_test.rb +49 -0
- data/test/models/trackable_test.rb +5 -0
- data/test/models/validatable_test.rb +113 -0
- data/test/models_test.rb +109 -0
- data/test/omniauth/config_test.rb +57 -0
- data/test/omniauth/url_helpers_test.rb +58 -0
- data/test/orm/active_record.rb +9 -0
- data/test/orm/mongoid.rb +14 -0
- data/test/rails_app/Rakefile +10 -0
- data/test/rails_app/app/active_record/admin.rb +6 -0
- data/test/rails_app/app/active_record/shim.rb +2 -0
- data/test/rails_app/app/active_record/user.rb +6 -0
- data/test/rails_app/app/controllers/admins/sessions_controller.rb +6 -0
- data/test/rails_app/app/controllers/admins_controller.rb +6 -0
- data/test/rails_app/app/controllers/application_controller.rb +8 -0
- data/test/rails_app/app/controllers/home_controller.rb +25 -0
- data/test/rails_app/app/controllers/publisher/registrations_controller.rb +2 -0
- data/test/rails_app/app/controllers/publisher/sessions_controller.rb +2 -0
- data/test/rails_app/app/controllers/users/omniauth_callbacks_controller.rb +14 -0
- data/test/rails_app/app/controllers/users_controller.rb +23 -0
- data/test/rails_app/app/helpers/application_helper.rb +3 -0
- data/test/rails_app/app/mailers/users/mailer.rb +3 -0
- data/test/rails_app/app/mongoid/admin.rb +24 -0
- data/test/rails_app/app/mongoid/shim.rb +24 -0
- data/test/rails_app/app/mongoid/user.rb +45 -0
- data/test/rails_app/app/views/admins/index.html.erb +1 -0
- data/test/rails_app/app/views/admins/sessions/new.html.erb +2 -0
- data/test/rails_app/app/views/home/admin_dashboard.html.erb +1 -0
- data/test/rails_app/app/views/home/index.html.erb +1 -0
- data/test/rails_app/app/views/home/join.html.erb +1 -0
- data/test/rails_app/app/views/home/private.html.erb +1 -0
- data/test/rails_app/app/views/home/user_dashboard.html.erb +1 -0
- data/test/rails_app/app/views/layouts/application.html.erb +24 -0
- data/test/rails_app/app/views/users/index.html.erb +1 -0
- data/test/rails_app/app/views/users/mailer/confirmation_instructions.erb +1 -0
- data/test/rails_app/app/views/users/sessions/new.html.erb +1 -0
- data/test/rails_app/config.ru +4 -0
- data/test/rails_app/config/application.rb +41 -0
- data/test/rails_app/config/boot.rb +8 -0
- data/test/rails_app/config/database.yml +18 -0
- data/test/rails_app/config/environment.rb +5 -0
- data/test/rails_app/config/environments/development.rb +18 -0
- data/test/rails_app/config/environments/production.rb +33 -0
- data/test/rails_app/config/environments/test.rb +33 -0
- data/test/rails_app/config/initializers/backtrace_silencers.rb +7 -0
- data/test/rails_app/config/initializers/devise.rb +197 -0
- data/test/rails_app/config/initializers/inflections.rb +2 -0
- data/test/rails_app/config/initializers/secret_token.rb +2 -0
- data/test/rails_app/config/routes.rb +87 -0
- data/test/rails_app/db/migrate/20100401102949_create_tables.rb +71 -0
- data/test/rails_app/db/schema.rb +52 -0
- data/test/rails_app/lib/shared_admin.rb +10 -0
- data/test/rails_app/lib/shared_user.rb +26 -0
- data/test/rails_app/public/404.html +26 -0
- data/test/rails_app/public/422.html +26 -0
- data/test/rails_app/public/500.html +26 -0
- data/test/rails_app/public/favicon.ico +0 -0
- data/test/rails_app/script/rails +10 -0
- data/test/routes_test.rb +240 -0
- data/test/support/assertions.rb +27 -0
- data/test/support/helpers.rb +109 -0
- data/test/support/integration.rb +88 -0
- data/test/support/locale/en.yml +4 -0
- data/test/support/webrat/integrations/rails.rb +24 -0
- data/test/test_helper.rb +27 -0
- data/test/test_helpers_test.rb +134 -0
- metadata +295 -0
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
require 'devise/hooks/trackable'
|
|
2
|
+
|
|
3
|
+
module Devise
|
|
4
|
+
module Models
|
|
5
|
+
# Track information about your user sign in. It tracks the following columns:
|
|
6
|
+
#
|
|
7
|
+
# * sign_in_count - Increased every time a sign in is made (by form, openid, oauth)
|
|
8
|
+
# * current_sign_in_at - A timestamp updated when the user signs in
|
|
9
|
+
# * last_sign_in_at - Holds the timestamp of the previous sign in
|
|
10
|
+
# * current_sign_in_ip - The remote ip updated when the user sign in
|
|
11
|
+
# * last_sign_in_ip - Holds the remote ip of the previous sign in
|
|
12
|
+
#
|
|
13
|
+
module Trackable
|
|
14
|
+
def update_tracked_fields!(request)
|
|
15
|
+
old_current, new_current = self.current_sign_in_at, Time.now.utc
|
|
16
|
+
self.last_sign_in_at = old_current || new_current
|
|
17
|
+
self.current_sign_in_at = new_current
|
|
18
|
+
|
|
19
|
+
old_current, new_current = self.current_sign_in_ip, request.ip
|
|
20
|
+
self.last_sign_in_ip = old_current || new_current
|
|
21
|
+
self.current_sign_in_ip = new_current
|
|
22
|
+
|
|
23
|
+
self.sign_in_count ||= 0
|
|
24
|
+
self.sign_in_count += 1
|
|
25
|
+
|
|
26
|
+
save(:validate => false)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
module Devise
|
|
2
|
+
module Models
|
|
3
|
+
# Validatable creates all needed validations for a user email and password.
|
|
4
|
+
# It's optional, given you may want to create the validations by yourself.
|
|
5
|
+
# Automatically validate if the email is present, unique and its format is
|
|
6
|
+
# valid. Also tests presence of password, confirmation and length.
|
|
7
|
+
#
|
|
8
|
+
# == Options
|
|
9
|
+
#
|
|
10
|
+
# Validatable adds the following options to devise_for:
|
|
11
|
+
#
|
|
12
|
+
# * +email_regexp+: the regular expression used to validate e-mails;
|
|
13
|
+
# * +password_length+: a range expressing password length. Defaults to 6..128.
|
|
14
|
+
#
|
|
15
|
+
module Validatable
|
|
16
|
+
# All validations used by this module.
|
|
17
|
+
VALIDATIONS = [ :validates_presence_of, :validates_uniqueness_of, :validates_format_of,
|
|
18
|
+
:validates_confirmation_of, :validates_length_of ].freeze
|
|
19
|
+
|
|
20
|
+
def self.included(base)
|
|
21
|
+
base.extend ClassMethods
|
|
22
|
+
assert_validations_api!(base)
|
|
23
|
+
|
|
24
|
+
base.class_eval do
|
|
25
|
+
validates_presence_of :email, :if => :email_required?
|
|
26
|
+
validates_uniqueness_of :email, :allow_blank => true, :if => :email_changed?
|
|
27
|
+
validates_format_of :email, :with => email_regexp, :allow_blank => true, :if => :email_changed?
|
|
28
|
+
|
|
29
|
+
validates_presence_of :password, :if => :password_required?
|
|
30
|
+
validates_confirmation_of :password, :if => :password_required?
|
|
31
|
+
validates_length_of :password, :within => password_length, :allow_blank => true
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def self.assert_validations_api!(base) #:nodoc:
|
|
36
|
+
unavailable_validations = VALIDATIONS.select { |v| !base.respond_to?(v) }
|
|
37
|
+
|
|
38
|
+
unless unavailable_validations.empty?
|
|
39
|
+
raise "Could not use :validatable module since #{base} does not respond " <<
|
|
40
|
+
"to the following methods: #{unavailable_validations.to_sentence}."
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
protected
|
|
45
|
+
|
|
46
|
+
# Checks whether a password is needed or not. For validations only.
|
|
47
|
+
# Passwords are always required if it's a new record, or if the password
|
|
48
|
+
# or confirmation are being set somewhere.
|
|
49
|
+
def password_required?
|
|
50
|
+
!persisted? || !password.nil? || !password_confirmation.nil?
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def email_required?
|
|
54
|
+
true
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
module ClassMethods
|
|
58
|
+
Devise::Models.config(self, :email_regexp, :password_length)
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
require 'active_support/core_ext/object/with_options'
|
|
2
|
+
|
|
3
|
+
Devise.with_options :model => true do |d|
|
|
4
|
+
# Strategies first
|
|
5
|
+
d.with_options :strategy => true do |s|
|
|
6
|
+
routes = [nil, :new, :destroy]
|
|
7
|
+
s.add_module :database_authenticatable, :controller => :sessions, :route => { :session => routes }
|
|
8
|
+
s.add_module :token_authenticatable
|
|
9
|
+
s.add_module :rememberable
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
# Other authentications
|
|
13
|
+
d.add_module :encryptable
|
|
14
|
+
d.add_module :omniauthable, :controller => :omniauth_callbacks, :route => :omniauth_callback
|
|
15
|
+
|
|
16
|
+
# Misc after
|
|
17
|
+
routes = [nil, :new, :edit]
|
|
18
|
+
d.add_module :recoverable, :controller => :passwords, :route => { :password => routes }
|
|
19
|
+
d.add_module :registerable, :controller => :registrations, :route => { :registration => (routes << :cancel) }
|
|
20
|
+
d.add_module :validatable
|
|
21
|
+
|
|
22
|
+
# The ones which can sign out after
|
|
23
|
+
routes = [nil, :new]
|
|
24
|
+
d.add_module :confirmable, :controller => :confirmations, :route => { :confirmation => routes }
|
|
25
|
+
d.add_module :lockable, :controller => :unlocks, :route => { :unlock => routes }
|
|
26
|
+
d.add_module :timeoutable
|
|
27
|
+
|
|
28
|
+
# Stats for last, so we make sure the user is really signed in
|
|
29
|
+
d.add_module :trackable
|
|
30
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
begin
|
|
2
|
+
require "omniauth"
|
|
3
|
+
require "omniauth/version"
|
|
4
|
+
rescue LoadError => e
|
|
5
|
+
warn "Could not load 'omniauth'. Please ensure you have the omniauth gem >= 1.0.0 installed and listed in your Gemfile."
|
|
6
|
+
raise
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
unless OmniAuth::VERSION =~ /^1\./
|
|
10
|
+
raise "You are using an old OmniAuth version, please ensure you have 1.0.0.pr2 version or later installed."
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# Clean up the default path_prefix. It will be automatically set by Devise.
|
|
14
|
+
OmniAuth.config.path_prefix = nil
|
|
15
|
+
|
|
16
|
+
OmniAuth.config.on_failure = Proc.new do |env|
|
|
17
|
+
env['devise.mapping'] = Devise::Mapping.find_by_path!(env['PATH_INFO'], :path)
|
|
18
|
+
controller_name = ActiveSupport::Inflector.camelize(env['devise.mapping'].controllers[:omniauth_callbacks])
|
|
19
|
+
controller_klass = ActiveSupport::Inflector.constantize("#{controller_name}Controller")
|
|
20
|
+
controller_klass.action(:failure).call(env)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
module Devise
|
|
24
|
+
module OmniAuth
|
|
25
|
+
autoload :Config, "devise/omniauth/config"
|
|
26
|
+
autoload :UrlHelpers, "devise/omniauth/url_helpers"
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
module Devise
|
|
2
|
+
module OmniAuth
|
|
3
|
+
class StrategyNotFound < NameError
|
|
4
|
+
def initialize(strategy)
|
|
5
|
+
@strategy = strategy
|
|
6
|
+
super("Could not find a strategy with name `#{strategy}'. " \
|
|
7
|
+
"Please ensure it is required or explicitly set it using the :strategy_class option.")
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
class Config
|
|
12
|
+
attr_accessor :strategy
|
|
13
|
+
attr_reader :args, :options, :provider, :strategy_name
|
|
14
|
+
|
|
15
|
+
def initialize(provider, args)
|
|
16
|
+
@provider = provider
|
|
17
|
+
@args = args
|
|
18
|
+
@options = @args.last.is_a?(Hash) ? @args.last : {}
|
|
19
|
+
@strategy = nil
|
|
20
|
+
@strategy_name = options[:name] || @provider
|
|
21
|
+
@strategy_class = options.delete(:strategy_class)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def strategy_class
|
|
25
|
+
@strategy_class ||= find_strategy || autoload_strategy
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def find_strategy
|
|
29
|
+
::OmniAuth.strategies.find do |strategy_class|
|
|
30
|
+
strategy_class.to_s =~ /#{::OmniAuth::Utils.camelize(strategy_name)}$/ ||
|
|
31
|
+
strategy_class.default_options[:name] == strategy_name
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def autoload_strategy
|
|
36
|
+
name = ::OmniAuth::Utils.camelize(provider.to_s)
|
|
37
|
+
if ::OmniAuth::Strategies.const_defined?(name)
|
|
38
|
+
::OmniAuth::Strategies.const_get(name)
|
|
39
|
+
else
|
|
40
|
+
raise StrategyNotFound, name
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
module Devise
|
|
2
|
+
module OmniAuth
|
|
3
|
+
module UrlHelpers
|
|
4
|
+
def self.define_helpers(mapping)
|
|
5
|
+
return unless mapping.omniauthable?
|
|
6
|
+
|
|
7
|
+
class_eval <<-URL_HELPERS, __FILE__, __LINE__ + 1
|
|
8
|
+
def #{mapping.name}_omniauth_authorize_path(provider, params = {})
|
|
9
|
+
if Devise.omniauth_configs[provider.to_sym]
|
|
10
|
+
script_name = request.env["SCRIPT_NAME"]
|
|
11
|
+
|
|
12
|
+
path = "\#{script_name}/#{mapping.path}/auth/\#{provider}\".squeeze("/")
|
|
13
|
+
path << '?' + params.to_param if params.present?
|
|
14
|
+
path
|
|
15
|
+
else
|
|
16
|
+
raise ArgumentError, "Could not find omniauth provider \#{provider.inspect}"
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
URL_HELPERS
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def omniauth_authorize_path(resource_or_scope, *args)
|
|
23
|
+
scope = Devise::Mapping.find_scope!(resource_or_scope)
|
|
24
|
+
send("#{scope}_omniauth_authorize_path", *args)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def omniauth_callback_path(resource_or_scope, *args)
|
|
28
|
+
scope = Devise::Mapping.find_scope!(resource_or_scope)
|
|
29
|
+
send("#{scope}_omniauth_callback_path", *args)
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
require 'orm_adapter/adapters/active_record'
|
|
2
|
+
|
|
3
|
+
module Devise
|
|
4
|
+
module Orm
|
|
5
|
+
# This module contains some helpers and handle schema (migrations):
|
|
6
|
+
#
|
|
7
|
+
# create_table :accounts do |t|
|
|
8
|
+
# t.database_authenticatable
|
|
9
|
+
# t.confirmable
|
|
10
|
+
# t.recoverable
|
|
11
|
+
# t.rememberable
|
|
12
|
+
# t.trackable
|
|
13
|
+
# t.lockable
|
|
14
|
+
# t.timestamps
|
|
15
|
+
# end
|
|
16
|
+
#
|
|
17
|
+
# However this method does not add indexes. If you need them, here is the declaration:
|
|
18
|
+
#
|
|
19
|
+
# add_index "accounts", ["email"], :name => "email", :unique => true
|
|
20
|
+
# add_index "accounts", ["confirmation_token"], :name => "confirmation_token", :unique => true
|
|
21
|
+
# add_index "accounts", ["reset_password_token"], :name => "reset_password_token", :unique => true
|
|
22
|
+
#
|
|
23
|
+
module ActiveRecord
|
|
24
|
+
module Schema
|
|
25
|
+
include Devise::Schema
|
|
26
|
+
|
|
27
|
+
# Tell how to apply schema methods.
|
|
28
|
+
def apply_devise_schema(name, type, options={})
|
|
29
|
+
@__devise_warning_raised ||= begin
|
|
30
|
+
ActiveSupport::Deprecation.warn "You are using t.database_authenticatable and others in your migration " \
|
|
31
|
+
"and this feature is deprecated. Please simply use Rails helpers instead as mentioned here: " \
|
|
32
|
+
"https://github.com/plataformatec/devise/wiki/How-To:-Upgrade-to-Devise-2.0-migration-schema-style"
|
|
33
|
+
true
|
|
34
|
+
end
|
|
35
|
+
column name, type.to_s.downcase.to_sym, options
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
ActiveRecord::Base.extend Devise::Models
|
|
43
|
+
ActiveRecord::ConnectionAdapters::Table.send :include, Devise::Orm::ActiveRecord::Schema
|
|
44
|
+
ActiveRecord::ConnectionAdapters::TableDefinition.send :include, Devise::Orm::ActiveRecord::Schema
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
require 'orm_adapter/adapters/mongoid'
|
|
2
|
+
|
|
3
|
+
module Devise
|
|
4
|
+
module Orm
|
|
5
|
+
module Mongoid
|
|
6
|
+
module Hook
|
|
7
|
+
def devise_modules_hook!
|
|
8
|
+
extend Schema
|
|
9
|
+
yield
|
|
10
|
+
return unless Devise.apply_schema
|
|
11
|
+
devise_modules.each { |m| send(m) if respond_to?(m, true) }
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
module Schema
|
|
16
|
+
include Devise::Schema
|
|
17
|
+
|
|
18
|
+
# Tell how to apply schema methods
|
|
19
|
+
def apply_devise_schema(name, type, options={})
|
|
20
|
+
type = Time if type == DateTime
|
|
21
|
+
field name, { :type => type }.merge!(options)
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
Mongoid::Document::ClassMethods.class_eval do
|
|
29
|
+
include Devise::Models
|
|
30
|
+
include Devise::Orm::Mongoid::Hook
|
|
31
|
+
end
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
module Devise
|
|
2
|
+
class ParamFilter
|
|
3
|
+
def initialize(case_insensitive_keys, strip_whitespace_keys)
|
|
4
|
+
@case_insensitive_keys = case_insensitive_keys || []
|
|
5
|
+
@strip_whitespace_keys = strip_whitespace_keys || []
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def filter(conditions)
|
|
9
|
+
conditions = stringify_params(conditions.dup)
|
|
10
|
+
|
|
11
|
+
@case_insensitive_keys.each do |k|
|
|
12
|
+
value = conditions[k]
|
|
13
|
+
next unless value.respond_to?(:downcase)
|
|
14
|
+
conditions[k] = value.downcase
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
@strip_whitespace_keys.each do |k|
|
|
18
|
+
value = conditions[k]
|
|
19
|
+
next unless value.respond_to?(:strip)
|
|
20
|
+
conditions[k] = value.strip
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
conditions
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# Force keys to be string to avoid injection on mongoid related database.
|
|
27
|
+
def stringify_params(conditions)
|
|
28
|
+
return conditions unless conditions.is_a?(Hash)
|
|
29
|
+
conditions.each do |k, v|
|
|
30
|
+
conditions[k] = v.to_s if param_requires_string_conversion?(v)
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
private
|
|
35
|
+
|
|
36
|
+
# Determine which values should be transformed to string or passed as-is to the query builder underneath
|
|
37
|
+
def param_requires_string_conversion?(value)
|
|
38
|
+
true unless value.is_a?(TrueClass) || value.is_a?(FalseClass) || value.is_a?(Fixnum)
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
module Devise
|
|
2
|
+
class PathChecker
|
|
3
|
+
include Rails.application.routes.url_helpers
|
|
4
|
+
|
|
5
|
+
def self.default_url_options(*args)
|
|
6
|
+
ApplicationController.default_url_options(*args)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def initialize(env, scope)
|
|
10
|
+
@current_path = "/#{env["SCRIPT_NAME"]}/#{env["PATH_INFO"]}".squeeze("/")
|
|
11
|
+
@scope = scope
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def signing_out?
|
|
15
|
+
@current_path == send("destroy_#{@scope}_session_path")
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
data/lib/devise/rails.rb
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
require 'devise/rails/routes'
|
|
2
|
+
require 'devise/rails/warden_compat'
|
|
3
|
+
|
|
4
|
+
module Devise
|
|
5
|
+
class Engine < ::Rails::Engine
|
|
6
|
+
config.devise = Devise
|
|
7
|
+
|
|
8
|
+
# Initialize Warden and copy its configurations.
|
|
9
|
+
config.app_middleware.use Warden::Manager do |config|
|
|
10
|
+
Devise.warden_config = config
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# Force routes to be loaded if we are doing any eager load.
|
|
14
|
+
config.before_eager_load { |app| app.reload_routes! }
|
|
15
|
+
|
|
16
|
+
initializer "devise.url_helpers" do
|
|
17
|
+
Devise.include_helpers(Devise::Controllers)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
initializer "devise.omniauth" do |app|
|
|
21
|
+
Devise.omniauth_configs.each do |provider, config|
|
|
22
|
+
app.middleware.use config.strategy_class, *config.args do |strategy|
|
|
23
|
+
config.strategy = strategy
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
if Devise.omniauth_configs.any?
|
|
28
|
+
Devise.include_helpers(Devise::OmniAuth)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
initializer "devise.mongoid_version_warning" do
|
|
33
|
+
if defined?(Mongoid)
|
|
34
|
+
require 'mongoid/version'
|
|
35
|
+
if Mongoid::VERSION.to_f < 2.1
|
|
36
|
+
puts "\n[DEVISE] Please note that Mongoid versions prior to 2.1 handle dirty model " \
|
|
37
|
+
"object attributes in such a way that the Devise `validatable` module will not apply " \
|
|
38
|
+
"its usual uniqueness and format validations for the email field. It is recommended " \
|
|
39
|
+
"that you upgrade to Mongoid 2.1+ for this and other fixes, but if for some reason you " \
|
|
40
|
+
"are unable to do so, you should add these validations manually.\n"
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
initializer "devise.deprecations" do
|
|
46
|
+
if Devise.case_insensitive_keys == false
|
|
47
|
+
puts "\n[DEVISE] Devise.case_insensitive_keys is false and is no longer " \
|
|
48
|
+
"supported. If you want to continue running on this mode, please ensure " \
|
|
49
|
+
"you are not using validatable in your models and set this value to an empty array."
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
if Devise.apply_schema && defined?(Mongoid)
|
|
53
|
+
puts "\n[DEVISE] Devise.apply_schema is true. This means Devise was " \
|
|
54
|
+
"automatically configuring your DB. This no longer happens. You should " \
|
|
55
|
+
"set Devise.apply_schema to false and manually set the fields used by Devise as shown here: " \
|
|
56
|
+
"https://github.com/plataformatec/devise/wiki/How-To:-Upgrade-to-Devise-2.0-migration-schema-style"
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# TODO: Deprecate the true value of this option as well
|
|
60
|
+
if Devise.use_salt_as_remember_token == false
|
|
61
|
+
puts "\n[DEVISE] Devise.use_salt_as_remember_token is false and is no longer " \
|
|
62
|
+
"supported. Devise will use part of salt as remember token and the remember " \
|
|
63
|
+
"token column can be removed from your models."
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
if Devise.reset_password_within.nil?
|
|
67
|
+
puts "\n[DEVISE] Devise.reset_password_within is nil. Please set this value to " \
|
|
68
|
+
"an interval (for example, 6.hours) and add a reset_password_sent_at field to " \
|
|
69
|
+
"your Devise models (if they don't have one already)."
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|