loyal_devise 2.1.2 → 2.1.3
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 +2 -0
- data/.travis.yml +14 -9
- data/.yardopts +9 -0
- data/CHANGELOG.rdoc +60 -5
- data/CONTRIBUTING.md +4 -2
- data/Gemfile +7 -7
- data/Gemfile.lock +107 -101
- data/MIT-LICENSE +1 -1
- data/README.md +110 -48
- data/Rakefile +1 -0
- data/app/controllers/devise/confirmations_controller.rb +2 -4
- data/app/controllers/devise/omniauth_callbacks_controller.rb +0 -1
- data/app/controllers/devise/passwords_controller.rb +16 -5
- data/app/controllers/devise/registrations_controller.rb +13 -7
- data/app/controllers/devise/sessions_controller.rb +6 -6
- data/app/controllers/devise/unlocks_controller.rb +3 -4
- data/app/controllers/devise_controller.rb +12 -33
- data/app/helpers/devise_helper.rb +0 -1
- data/app/mailers/devise/mailer.rb +7 -8
- data/app/views/devise/mailer/confirmation_instructions.html.erb +1 -1
- data/app/views/devise/mailer/reset_password_instructions.html.erb +1 -1
- data/app/views/devise/registrations/edit.html.erb +5 -1
- data/config/locales/en.yml +48 -48
- data/devise.gemspec +6 -6
- data/devise.png +0 -0
- data/gemfiles/{Gemfile.rails-3.1.x → Gemfile.rails-3.2.x} +8 -12
- data/gemfiles/Gemfile.rails-3.2.x.lock +156 -0
- data/lib/devise.rb +34 -11
- data/lib/devise/controllers/helpers.rb +33 -7
- data/lib/devise/controllers/rememberable.rb +6 -3
- data/lib/devise/controllers/scoped_views.rb +1 -2
- data/lib/devise/controllers/url_helpers.rb +0 -1
- data/lib/devise/delegator.rb +0 -1
- data/lib/devise/failure_app.rb +8 -2
- data/lib/devise/hooks/activatable.rb +1 -2
- data/lib/devise/hooks/forgetable.rb +0 -1
- data/lib/devise/hooks/lockable.rb +1 -2
- data/lib/devise/hooks/rememberable.rb +1 -2
- data/lib/devise/hooks/timeoutable.rb +0 -1
- data/lib/devise/hooks/trackable.rb +0 -1
- data/lib/devise/mailers/helpers.rb +18 -14
- data/lib/devise/mapping.rb +6 -7
- data/lib/devise/models.rb +0 -1
- data/lib/devise/models/authenticatable.rb +50 -27
- data/lib/devise/models/confirmable.rb +37 -16
- data/lib/devise/models/database_authenticatable.rb +17 -3
- data/lib/devise/models/lockable.rb +1 -2
- data/lib/devise/models/omniauthable.rb +1 -2
- data/lib/devise/models/recoverable.rb +10 -6
- data/lib/devise/models/registerable.rb +0 -1
- data/lib/devise/models/rememberable.rb +1 -2
- data/lib/devise/models/timeoutable.rb +1 -2
- data/lib/devise/models/token_authenticatable.rb +0 -1
- data/lib/devise/models/trackable.rb +0 -1
- data/lib/devise/models/validatable.rb +0 -1
- data/lib/devise/modules.rb +1 -2
- data/lib/devise/omniauth.rb +0 -1
- data/lib/devise/omniauth/config.rb +0 -1
- data/lib/devise/omniauth/url_helpers.rb +0 -1
- data/lib/devise/orm/active_record.rb +1 -2
- data/lib/devise/orm/mongoid.rb +1 -2
- data/lib/devise/{param_filter.rb → parameter_filter.rb} +10 -12
- data/lib/devise/parameter_sanitizer.rb +59 -0
- data/lib/devise/rails.rb +0 -1
- data/lib/devise/rails/routes.rb +22 -18
- data/lib/devise/rails/warden_compat.rb +0 -30
- data/lib/devise/strategies/authenticatable.rb +8 -6
- data/lib/devise/strategies/base.rb +1 -2
- data/lib/devise/strategies/database_authenticatable.rb +1 -2
- data/lib/devise/strategies/rememberable.rb +1 -2
- data/lib/devise/strategies/token_authenticatable.rb +38 -4
- data/lib/devise/test_helpers.rb +0 -1
- data/lib/devise/time_inflector.rb +1 -2
- data/lib/devise/version.rb +1 -2
- data/lib/generators/active_record/devise_generator.rb +1 -5
- data/lib/generators/active_record/templates/migration.rb +0 -1
- data/lib/generators/active_record/templates/migration_existing.rb +0 -1
- data/lib/generators/devise/devise_generator.rb +0 -1
- data/lib/generators/devise/install_generator.rb +0 -1
- data/lib/generators/devise/orm_helpers.rb +1 -2
- data/lib/generators/devise/views_generator.rb +8 -3
- data/lib/generators/mongoid/devise_generator.rb +1 -2
- data/lib/generators/templates/README +1 -1
- data/lib/generators/templates/devise.rb +10 -5
- data/lib/generators/templates/markerb/confirmation_instructions.markerb +1 -1
- data/lib/generators/templates/simple_form_for/confirmations/new.html.erb +1 -0
- data/lib/generators/templates/simple_form_for/registrations/edit.html.erb +6 -1
- data/lib/generators/templates/simple_form_for/unlocks/new.html.erb +1 -0
- data/loyal_devise.gemspec +27 -0
- data/test/controllers/custom_strategy_test.rb +0 -1
- data/test/controllers/helpers_test.rb +0 -1
- data/test/controllers/internal_helpers_test.rb +13 -4
- data/test/controllers/passwords_controller_test.rb +32 -0
- data/test/controllers/sessions_controller_test.rb +28 -1
- data/test/controllers/url_helpers_test.rb +0 -1
- data/test/delegator_test.rb +0 -1
- data/test/devise_test.rb +12 -2
- data/test/failure_app_test.rb +3 -4
- data/test/generators/active_record_generator_test.rb +1 -4
- data/test/generators/devise_generator_test.rb +0 -1
- data/test/generators/install_generator_test.rb +0 -1
- data/test/generators/mongoid_generator_test.rb +0 -1
- data/test/generators/views_generator_test.rb +16 -2
- data/test/helpers/devise_helper_test.rb +1 -2
- data/test/integration/authenticatable_test.rb +92 -27
- data/test/integration/confirmable_test.rb +7 -7
- data/test/integration/database_authenticatable_test.rb +8 -7
- data/test/integration/http_authenticatable_test.rb +19 -2
- data/test/integration/lockable_test.rb +1 -2
- data/test/integration/omniauthable_test.rb +2 -3
- data/test/integration/recoverable_test.rb +40 -12
- data/test/integration/registerable_test.rb +17 -14
- data/test/integration/rememberable_test.rb +16 -10
- data/test/integration/timeoutable_test.rb +11 -2
- data/test/integration/token_authenticatable_test.rb +45 -2
- data/test/integration/trackable_test.rb +1 -2
- data/test/mailers/confirmation_instructions_test.rb +11 -3
- data/test/mailers/reset_password_instructions_test.rb +11 -3
- data/test/mailers/unlock_instructions_test.rb +11 -2
- data/test/mapping_test.rb +0 -1
- data/test/models/authenticatable_test.rb +6 -1
- data/test/models/confirmable_test.rb +53 -2
- data/test/models/database_authenticatable_test.rb +57 -21
- data/test/models/lockable_test.rb +1 -2
- data/test/models/omniauthable_test.rb +0 -1
- data/test/models/recoverable_test.rb +21 -5
- data/test/models/registerable_test.rb +0 -1
- data/test/models/rememberable_test.rb +4 -4
- data/test/models/serializable_test.rb +8 -8
- data/test/models/timeoutable_test.rb +0 -1
- data/test/models/token_authenticatable_test.rb +0 -1
- data/test/models/trackable_test.rb +0 -1
- data/test/models/validatable_test.rb +16 -6
- data/test/models_test.rb +7 -24
- data/test/omniauth/config_test.rb +1 -2
- data/test/omniauth/url_helpers_test.rb +4 -2
- data/test/orm/active_record.rb +1 -1
- data/test/orm/mongoid.rb +2 -4
- data/test/parameter_sanitizer_test.rb +51 -0
- data/test/rails_app/Rakefile +0 -4
- data/test/rails_app/app/active_record/admin.rb +0 -1
- data/test/rails_app/app/active_record/shim.rb +1 -2
- data/test/rails_app/app/active_record/user.rb +0 -1
- data/test/rails_app/app/controllers/admins/sessions_controller.rb +1 -2
- data/test/rails_app/app/controllers/admins_controller.rb +0 -1
- data/test/rails_app/app/controllers/application_controller.rb +1 -1
- data/test/rails_app/app/controllers/home_controller.rb +0 -1
- data/test/rails_app/app/controllers/publisher/registrations_controller.rb +1 -2
- data/test/rails_app/app/controllers/publisher/sessions_controller.rb +1 -2
- data/test/rails_app/app/controllers/users/omniauth_callbacks_controller.rb +1 -2
- data/test/rails_app/app/controllers/users_controller.rb +8 -1
- data/test/rails_app/app/helpers/application_helper.rb +0 -1
- data/test/rails_app/app/mailers/users/mailer.rb +4 -1
- data/test/rails_app/app/mongoid/admin.rb +4 -3
- data/test/rails_app/app/mongoid/shim.rb +3 -5
- data/test/rails_app/app/mongoid/user.rb +2 -3
- data/test/rails_app/app/views/users/edit_form.html.erb +1 -0
- data/test/rails_app/bin/bundle +3 -0
- data/test/rails_app/bin/rails +4 -0
- data/test/rails_app/bin/rake +4 -0
- data/test/rails_app/config/application.rb +1 -3
- data/test/rails_app/config/boot.rb +3 -4
- data/test/rails_app/config/environment.rb +2 -3
- data/test/rails_app/config/environments/development.rb +23 -8
- data/test/rails_app/config/environments/production.rb +68 -18
- data/test/rails_app/config/environments/test.rb +18 -16
- data/test/rails_app/config/initializers/backtrace_silencers.rb +0 -1
- data/test/rails_app/config/initializers/devise.rb +0 -1
- data/test/rails_app/config/initializers/inflections.rb +0 -1
- data/test/rails_app/config/initializers/secret_token.rb +8 -3
- data/test/rails_app/config/initializers/session_store.rb +1 -0
- data/test/rails_app/config/routes.rb +20 -17
- data/test/rails_app/db/migrate/20100401102949_create_tables.rb +0 -1
- data/test/rails_app/db/schema.rb +0 -1
- data/test/rails_app/lib/shared_admin.rb +0 -1
- data/test/rails_app/lib/shared_user.rb +0 -2
- data/test/routes_test.rb +22 -21
- data/test/support/assertions.rb +0 -1
- data/test/support/helpers.rb +1 -2
- data/test/support/integration.rb +0 -1
- data/test/support/webrat/integrations/rails.rb +0 -1
- data/test/test_helper.rb +8 -2
- data/test/test_helpers_test.rb +0 -1
- data/test/test_models.rb +26 -0
- metadata +65 -27
- data/gemfiles/Gemfile.rails-3.1.x.lock +0 -167
- data/test/indifferent_hash.rb +0 -34
- data/test/rails_app/script/rails +0 -10
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
# -*- encoding : utf-8 -*-
|
|
2
1
|
require 'devise/strategies/database_authenticatable'
|
|
3
2
|
require 'bcrypt'
|
|
4
3
|
|
|
@@ -76,13 +75,13 @@ module Devise
|
|
|
76
75
|
end
|
|
77
76
|
|
|
78
77
|
# Updates record attributes without asking for the current password.
|
|
79
|
-
# Never allows
|
|
78
|
+
# Never allows a change to the current password. If you are using this
|
|
80
79
|
# method, you should probably override this method to protect other
|
|
81
80
|
# attributes you would not like to be updated without a password.
|
|
82
81
|
#
|
|
83
82
|
# Example:
|
|
84
83
|
#
|
|
85
|
-
# def update_without_password(params
|
|
84
|
+
# def update_without_password(params, *options)
|
|
86
85
|
# params.delete(:email)
|
|
87
86
|
# super(params)
|
|
88
87
|
# end
|
|
@@ -96,6 +95,21 @@ module Devise
|
|
|
96
95
|
result
|
|
97
96
|
end
|
|
98
97
|
|
|
98
|
+
# Destroy record when :current_password matches, otherwise returns
|
|
99
|
+
# error on :current_password. It also automatically rejects
|
|
100
|
+
# :current_password if it is blank.
|
|
101
|
+
def destroy_with_password(current_password)
|
|
102
|
+
result = if valid_password?(current_password)
|
|
103
|
+
destroy
|
|
104
|
+
else
|
|
105
|
+
self.valid?
|
|
106
|
+
self.errors.add(:current_password, current_password.blank? ? :blank : :invalid)
|
|
107
|
+
false
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
result
|
|
111
|
+
end
|
|
112
|
+
|
|
99
113
|
def after_database_authentication
|
|
100
114
|
end
|
|
101
115
|
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
# -*- encoding : utf-8 -*-
|
|
2
1
|
require "devise/hooks/lockable"
|
|
3
2
|
|
|
4
3
|
module Devise
|
|
@@ -56,7 +55,7 @@ module Devise
|
|
|
56
55
|
|
|
57
56
|
# Verifies whether a user is locked or not.
|
|
58
57
|
def access_locked?
|
|
59
|
-
locked_at && !lock_expired?
|
|
58
|
+
!!locked_at && !lock_expired?
|
|
60
59
|
end
|
|
61
60
|
|
|
62
61
|
# Send unlock instructions by email
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
# -*- encoding : utf-8 -*-
|
|
2
1
|
require 'devise/omniauth'
|
|
3
2
|
|
|
4
3
|
module Devise
|
|
@@ -9,7 +8,7 @@ module Devise
|
|
|
9
8
|
#
|
|
10
9
|
# Oauthable adds the following options to devise_for:
|
|
11
10
|
#
|
|
12
|
-
# * +omniauth_providers+: Which providers are
|
|
11
|
+
# * +omniauth_providers+: Which providers are available to this model. It expects an array:
|
|
13
12
|
#
|
|
14
13
|
# devise_for :database_authenticatable, :omniauthable, :omniauth_providers => [:twitter]
|
|
15
14
|
#
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
# -*- encoding : utf-8 -*-
|
|
2
1
|
module Devise
|
|
3
2
|
module Models
|
|
4
3
|
|
|
5
|
-
# Recoverable takes care of
|
|
4
|
+
# Recoverable takes care of resetting the user password and send reset instructions.
|
|
6
5
|
#
|
|
7
6
|
# ==Options
|
|
8
7
|
#
|
|
@@ -45,10 +44,15 @@ module Devise
|
|
|
45
44
|
|
|
46
45
|
# Resets reset password token and send reset password instructions by email
|
|
47
46
|
def send_reset_password_instructions
|
|
48
|
-
|
|
47
|
+
ensure_reset_password_token!
|
|
49
48
|
send_devise_notification(:reset_password_instructions)
|
|
50
49
|
end
|
|
51
|
-
|
|
50
|
+
|
|
51
|
+
# Generate reset password token unless already exists and save the record.
|
|
52
|
+
def ensure_reset_password_token!
|
|
53
|
+
generate_reset_password_token! if should_generate_reset_token?
|
|
54
|
+
end
|
|
55
|
+
|
|
52
56
|
# Checks if the reset password token sent is within the limit time.
|
|
53
57
|
# We do this by calculating if the difference between today and the
|
|
54
58
|
# sending date does not exceed the confirm in time configured.
|
|
@@ -103,9 +107,9 @@ module Devise
|
|
|
103
107
|
|
|
104
108
|
module ClassMethods
|
|
105
109
|
# Attempt to find a user by its email. If a record is found, send new
|
|
106
|
-
# password instructions to it. If
|
|
110
|
+
# password instructions to it. If user is not found, returns a new user
|
|
107
111
|
# with an email not found error.
|
|
108
|
-
# Attributes must contain the user email
|
|
112
|
+
# Attributes must contain the user's email
|
|
109
113
|
def send_reset_password_instructions(attributes={})
|
|
110
114
|
recoverable = find_or_initialize_with_errors(reset_password_keys, attributes, :not_found)
|
|
111
115
|
recoverable.send_reset_password_instructions if recoverable.persisted?
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
# -*- encoding : utf-8 -*-
|
|
2
1
|
require 'devise/strategies/rememberable'
|
|
3
2
|
require 'devise/hooks/rememberable'
|
|
4
3
|
require 'devise/hooks/forgetable'
|
|
@@ -51,7 +50,7 @@ module Devise
|
|
|
51
50
|
def remember_me!(extend_period=false)
|
|
52
51
|
self.remember_token = self.class.remember_token if generate_remember_token?
|
|
53
52
|
self.remember_created_at = Time.now.utc if generate_remember_timestamp?(extend_period)
|
|
54
|
-
save(:validate => false)
|
|
53
|
+
save(:validate => false) if self.changed?
|
|
55
54
|
end
|
|
56
55
|
|
|
57
56
|
# If the record is persisted, remove the remember token (but only if
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
# -*- encoding : utf-8 -*-
|
|
2
1
|
require 'devise/hooks/timeoutable'
|
|
3
2
|
|
|
4
3
|
module Devise
|
|
5
4
|
module Models
|
|
6
|
-
# Timeoutable takes care of
|
|
5
|
+
# Timeoutable takes care of verifyng whether a user session has already
|
|
7
6
|
# expired or not. When a session expires after the configured time, the user
|
|
8
7
|
# will be asked for credentials again, it means, he/she will be redirected
|
|
9
8
|
# to the sign in page.
|
data/lib/devise/modules.rb
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
# -*- encoding : utf-8 -*-
|
|
2
1
|
require 'active_support/core_ext/object/with_options'
|
|
3
2
|
|
|
4
3
|
Devise.with_options :model => true do |d|
|
|
@@ -27,4 +26,4 @@ Devise.with_options :model => true do |d|
|
|
|
27
26
|
|
|
28
27
|
# Stats for last, so we make sure the user is really signed in
|
|
29
28
|
d.add_module :trackable
|
|
30
|
-
end
|
|
29
|
+
end
|
data/lib/devise/omniauth.rb
CHANGED
data/lib/devise/orm/mongoid.rb
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
# -*- encoding : utf-8 -*-
|
|
2
1
|
module Devise
|
|
3
|
-
class
|
|
2
|
+
class ParameterFilter
|
|
4
3
|
def initialize(case_insensitive_keys, strip_whitespace_keys)
|
|
5
4
|
@case_insensitive_keys = case_insensitive_keys || []
|
|
6
5
|
@strip_whitespace_keys = strip_whitespace_keys || []
|
|
@@ -9,16 +8,16 @@ module Devise
|
|
|
9
8
|
def filter(conditions)
|
|
10
9
|
conditions = stringify_params(conditions.dup)
|
|
11
10
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
11
|
+
conditions.merge!(filtered_hash_by_method_for_given_keys(conditions.dup, :downcase, @case_insensitive_keys))
|
|
12
|
+
conditions.merge!(filtered_hash_by_method_for_given_keys(conditions.dup, :strip, @strip_whitespace_keys))
|
|
13
|
+
|
|
14
|
+
conditions
|
|
15
|
+
end
|
|
17
16
|
|
|
18
|
-
|
|
17
|
+
def filtered_hash_by_method_for_given_keys(conditions, method, condition_keys)
|
|
18
|
+
condition_keys.each do |k|
|
|
19
19
|
value = conditions[k]
|
|
20
|
-
|
|
21
|
-
conditions[k] = value.strip
|
|
20
|
+
conditions[k] = value.send(method) if value.respond_to?(method)
|
|
22
21
|
end
|
|
23
22
|
|
|
24
23
|
conditions
|
|
@@ -34,9 +33,8 @@ module Devise
|
|
|
34
33
|
|
|
35
34
|
private
|
|
36
35
|
|
|
37
|
-
# Determine which values should be transformed to string or passed as-is to the query builder underneath
|
|
38
36
|
def param_requires_string_conversion?(value)
|
|
39
|
-
|
|
37
|
+
true
|
|
40
38
|
end
|
|
41
39
|
end
|
|
42
40
|
end
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
module Devise
|
|
2
|
+
class BaseSanitizer
|
|
3
|
+
attr_reader :params, :resource_name, :resource_class
|
|
4
|
+
|
|
5
|
+
def initialize(resource_class, resource_name, params)
|
|
6
|
+
@resource_class = resource_class
|
|
7
|
+
@resource_name = resource_name
|
|
8
|
+
@params = params
|
|
9
|
+
@blocks = Hash.new
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def for(kind, &block)
|
|
13
|
+
if block_given?
|
|
14
|
+
@blocks[kind] = block
|
|
15
|
+
else
|
|
16
|
+
block = @blocks[kind]
|
|
17
|
+
block ? block.call(default_params) : fallback_for(kind)
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
private
|
|
22
|
+
|
|
23
|
+
def fallback_for(kind)
|
|
24
|
+
default_params
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def default_params
|
|
28
|
+
params.fetch(resource_name, {})
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
class ParameterSanitizer < BaseSanitizer
|
|
33
|
+
private
|
|
34
|
+
|
|
35
|
+
def fallback_for(kind)
|
|
36
|
+
if respond_to?(kind, true)
|
|
37
|
+
send(kind)
|
|
38
|
+
else
|
|
39
|
+
raise NotImplementedError, "Devise Parameter Sanitizer doesn't know how to sanitize parameters for #{kind}"
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def sign_in
|
|
44
|
+
default_params.permit(*auth_keys)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def sign_up
|
|
48
|
+
default_params.permit(*(auth_keys + [:password, :password_confirmation]))
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def account_update
|
|
52
|
+
default_params.permit(*(auth_keys + [:password, :password_confirmation, :current_password]))
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def auth_keys
|
|
56
|
+
resource_class.authentication_keys
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
data/lib/devise/rails.rb
CHANGED
data/lib/devise/rails/routes.rb
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
# -*- encoding : utf-8 -*-
|
|
2
1
|
require "active_support/core_ext/object/try"
|
|
3
2
|
require "active_support/core_ext/hash/slice"
|
|
4
3
|
|
|
@@ -251,15 +250,11 @@ module ActionDispatch::Routing
|
|
|
251
250
|
# end
|
|
252
251
|
#
|
|
253
252
|
# authenticate :user, lambda {|u| u.role == "admin"} do
|
|
254
|
-
# root :to => "admin/dashboard#show"
|
|
253
|
+
# root :to => "admin/dashboard#show", :as => :user_root
|
|
255
254
|
# end
|
|
256
255
|
#
|
|
257
256
|
def authenticate(scope=nil, block=nil)
|
|
258
|
-
|
|
259
|
-
request.env["warden"].authenticate!(:scope => scope) && (block.nil? || block.call(request.env["warden"].user(scope)))
|
|
260
|
-
end
|
|
261
|
-
|
|
262
|
-
constraints(constraint) do
|
|
257
|
+
constraints_for(:authenticate!, scope, block) do
|
|
263
258
|
yield
|
|
264
259
|
end
|
|
265
260
|
end
|
|
@@ -269,25 +264,21 @@ module ActionDispatch::Routing
|
|
|
269
264
|
# a model and allows extra constraints to be done on the instance.
|
|
270
265
|
#
|
|
271
266
|
# authenticated :admin do
|
|
272
|
-
# root :to => 'admin/dashboard#show'
|
|
267
|
+
# root :to => 'admin/dashboard#show', :as => :admin_root
|
|
273
268
|
# end
|
|
274
269
|
#
|
|
275
270
|
# authenticated do
|
|
276
|
-
# root :to => 'dashboard#show'
|
|
271
|
+
# root :to => 'dashboard#show', :as => :authenticated_root
|
|
277
272
|
# end
|
|
278
273
|
#
|
|
279
274
|
# authenticated :user, lambda {|u| u.role == "admin"} do
|
|
280
|
-
# root :to => "admin/dashboard#show"
|
|
275
|
+
# root :to => "admin/dashboard#show", :as => :user_root
|
|
281
276
|
# end
|
|
282
277
|
#
|
|
283
278
|
# root :to => 'landing#show'
|
|
284
279
|
#
|
|
285
280
|
def authenticated(scope=nil, block=nil)
|
|
286
|
-
|
|
287
|
-
request.env["warden"].authenticate?(:scope => scope) && (block.nil? || block.call(request.env["warden"].user(scope)))
|
|
288
|
-
end
|
|
289
|
-
|
|
290
|
-
constraints(constraint) do
|
|
281
|
+
constraints_for(:authenticate?, scope, block) do
|
|
291
282
|
yield
|
|
292
283
|
end
|
|
293
284
|
end
|
|
@@ -330,7 +321,7 @@ module ActionDispatch::Routing
|
|
|
330
321
|
# good and working example.
|
|
331
322
|
#
|
|
332
323
|
# devise_scope :user do
|
|
333
|
-
#
|
|
324
|
+
# get "/some/route" => "some_devise_controller"
|
|
334
325
|
# end
|
|
335
326
|
# devise_for :users
|
|
336
327
|
#
|
|
@@ -402,12 +393,14 @@ module ActionDispatch::Routing
|
|
|
402
393
|
match "#{path_prefix}/:provider",
|
|
403
394
|
:constraints => { :provider => providers },
|
|
404
395
|
:to => "#{controllers[:omniauth_callbacks]}#passthru",
|
|
405
|
-
:as => :omniauth_authorize
|
|
396
|
+
:as => :omniauth_authorize,
|
|
397
|
+
:via => [:get, :post]
|
|
406
398
|
|
|
407
399
|
match "#{path_prefix}/:action/callback",
|
|
408
400
|
:constraints => { :action => providers },
|
|
409
401
|
:to => controllers[:omniauth_callbacks],
|
|
410
|
-
:as => :omniauth_callback
|
|
402
|
+
:as => :omniauth_callback,
|
|
403
|
+
:via => [:get, :post]
|
|
411
404
|
ensure
|
|
412
405
|
@scope[:path] = path
|
|
413
406
|
end
|
|
@@ -427,6 +420,17 @@ module ActionDispatch::Routing
|
|
|
427
420
|
@scope.merge!(old)
|
|
428
421
|
end
|
|
429
422
|
|
|
423
|
+
def constraints_for(method_to_apply, scope=nil, block=nil)
|
|
424
|
+
constraint = lambda do |request|
|
|
425
|
+
request.env['warden'].send(method_to_apply, :scope => scope) &&
|
|
426
|
+
(block.nil? || block.call(request.env["warden"].user(scope)))
|
|
427
|
+
end
|
|
428
|
+
|
|
429
|
+
constraints(constraint) do
|
|
430
|
+
yield
|
|
431
|
+
end
|
|
432
|
+
end
|
|
433
|
+
|
|
430
434
|
def set_omniauth_path_prefix!(path_prefix) #:nodoc:
|
|
431
435
|
if ::OmniAuth.config.path_prefix && ::OmniAuth.config.path_prefix != path_prefix
|
|
432
436
|
raise "Wrong OmniAuth configuration. If you are getting this exception, it means that either:\n\n" \
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
# -*- encoding : utf-8 -*-
|
|
2
1
|
module Warden::Mixins::Common
|
|
3
2
|
def request
|
|
4
3
|
@request ||= ActionDispatch::Request.new(env)
|
|
@@ -13,32 +12,3 @@ module Warden::Mixins::Common
|
|
|
13
12
|
request.cookie_jar
|
|
14
13
|
end
|
|
15
14
|
end
|
|
16
|
-
|
|
17
|
-
class Warden::SessionSerializer
|
|
18
|
-
def serialize(record)
|
|
19
|
-
klass = record.class
|
|
20
|
-
array = klass.serialize_into_session(record)
|
|
21
|
-
array.unshift(klass.name)
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
def deserialize(keys)
|
|
25
|
-
klass_name, *args = keys
|
|
26
|
-
|
|
27
|
-
begin
|
|
28
|
-
klass = ActiveSupport::Inflector.constantize(klass_name)
|
|
29
|
-
if klass.respond_to? :serialize_from_session
|
|
30
|
-
klass.serialize_from_session(*args)
|
|
31
|
-
else
|
|
32
|
-
Rails.logger.warn "[Devise] Stored serialized class #{klass_name} seems not to be Devise enabled anymore. Did you do that on purpose?"
|
|
33
|
-
nil
|
|
34
|
-
end
|
|
35
|
-
rescue NameError => e
|
|
36
|
-
if e.message =~ /uninitialized constant/
|
|
37
|
-
Rails.logger.debug "[Devise] Trying to deserialize invalid class #{klass_name}"
|
|
38
|
-
nil
|
|
39
|
-
else
|
|
40
|
-
raise
|
|
41
|
-
end
|
|
42
|
-
end
|
|
43
|
-
end
|
|
44
|
-
end
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
# -*- encoding : utf-8 -*-
|
|
2
1
|
require 'devise/strategies/base'
|
|
3
2
|
|
|
4
3
|
module Devise
|
|
@@ -101,7 +100,7 @@ module Devise
|
|
|
101
100
|
|
|
102
101
|
# Extract a hash with attributes:values from the http params.
|
|
103
102
|
def http_auth_hash
|
|
104
|
-
keys = [
|
|
103
|
+
keys = [http_authentication_key, :password]
|
|
105
104
|
Hash[*keys.zip(decode_credentials).flatten]
|
|
106
105
|
end
|
|
107
106
|
|
|
@@ -135,24 +134,27 @@ module Devise
|
|
|
135
134
|
parse_authentication_key_values(request_values, request_keys)
|
|
136
135
|
end
|
|
137
136
|
|
|
138
|
-
# Holds the authentication keys.
|
|
139
137
|
def authentication_keys
|
|
140
138
|
@authentication_keys ||= mapping.to.authentication_keys
|
|
141
139
|
end
|
|
142
140
|
|
|
143
|
-
|
|
141
|
+
def http_authentication_key
|
|
142
|
+
@http_authentication_key ||= mapping.to.http_authentication_key || case authentication_keys
|
|
143
|
+
when Array then authentication_keys.first
|
|
144
|
+
when Hash then authentication_keys.keys.first
|
|
145
|
+
end
|
|
146
|
+
end
|
|
147
|
+
|
|
144
148
|
def request_keys
|
|
145
149
|
@request_keys ||= mapping.to.request_keys
|
|
146
150
|
end
|
|
147
151
|
|
|
148
|
-
# Returns values from the request object.
|
|
149
152
|
def request_values
|
|
150
153
|
keys = request_keys.respond_to?(:keys) ? request_keys.keys : request_keys
|
|
151
154
|
values = keys.map { |k| self.request.send(k) }
|
|
152
155
|
Hash[keys.zip(values)]
|
|
153
156
|
end
|
|
154
157
|
|
|
155
|
-
# Parse authentication keys considering if they should be enforced or not.
|
|
156
158
|
def parse_authentication_key_values(hash, keys)
|
|
157
159
|
keys.each do |key, enforce|
|
|
158
160
|
value = hash[key].presence
|