sorcery 0.9.1 → 0.10.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of sorcery might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/.travis.yml +29 -104
- data/CHANGELOG.md +13 -1
- data/Gemfile +2 -16
- data/README.md +124 -272
- data/Rakefile +2 -2
- data/gemfiles/{mongoid-rails40.gemfile → active_record-rails42.gemfile} +1 -3
- data/lib/generators/sorcery/helpers.rb +4 -4
- data/lib/generators/sorcery/install_generator.rb +25 -19
- data/lib/generators/sorcery/templates/initializer.rb +27 -52
- data/lib/generators/sorcery/templates/migration/activity_logging.rb +2 -2
- data/lib/generators/sorcery/templates/migration/brute_force_protection.rb +1 -1
- data/lib/generators/sorcery/templates/migration/core.rb +3 -3
- data/lib/generators/sorcery/templates/migration/external.rb +2 -2
- data/lib/generators/sorcery/templates/migration/remember_me.rb +2 -2
- data/lib/generators/sorcery/templates/migration/reset_password.rb +2 -2
- data/lib/generators/sorcery/templates/migration/user_activation.rb +2 -2
- data/lib/sorcery.rb +0 -28
- data/lib/sorcery/adapters/active_record_adapter.rb +7 -18
- data/lib/sorcery/controller.rb +19 -21
- data/lib/sorcery/controller/config.rb +20 -18
- data/lib/sorcery/controller/submodules/activity_logging.rb +7 -15
- data/lib/sorcery/controller/submodules/brute_force_protection.rb +1 -2
- data/lib/sorcery/controller/submodules/external.rb +22 -14
- data/lib/sorcery/controller/submodules/http_basic_auth.rb +16 -19
- data/lib/sorcery/controller/submodules/remember_me.rb +15 -10
- data/lib/sorcery/controller/submodules/session_timeout.rb +7 -8
- data/lib/sorcery/crypto_providers/aes256.rb +15 -15
- data/lib/sorcery/crypto_providers/bcrypt.rb +19 -21
- data/lib/sorcery/crypto_providers/common.rb +1 -1
- data/lib/sorcery/crypto_providers/md5.rb +5 -5
- data/lib/sorcery/crypto_providers/sha1.rb +5 -5
- data/lib/sorcery/crypto_providers/sha256.rb +2 -2
- data/lib/sorcery/crypto_providers/sha512.rb +3 -3
- data/lib/sorcery/engine.rb +3 -8
- data/lib/sorcery/model.rb +24 -32
- data/lib/sorcery/model/config.rb +64 -49
- data/lib/sorcery/model/submodules/activity_logging.rb +31 -12
- data/lib/sorcery/model/submodules/brute_force_protection.rb +23 -23
- data/lib/sorcery/model/submodules/external.rb +3 -7
- data/lib/sorcery/model/submodules/remember_me.rb +19 -7
- data/lib/sorcery/model/submodules/reset_password.rb +32 -36
- data/lib/sorcery/model/submodules/user_activation.rb +38 -50
- data/lib/sorcery/model/temporary_token.rb +2 -2
- data/lib/sorcery/protocols/oauth.rb +3 -9
- data/lib/sorcery/protocols/oauth2.rb +0 -2
- data/lib/sorcery/providers/base.rb +4 -4
- data/lib/sorcery/providers/facebook.rb +5 -8
- data/lib/sorcery/providers/github.rb +5 -7
- data/lib/sorcery/providers/google.rb +3 -5
- data/lib/sorcery/providers/heroku.rb +6 -8
- data/lib/sorcery/providers/jira.rb +12 -17
- data/lib/sorcery/providers/linkedin.rb +6 -8
- data/lib/sorcery/providers/liveid.rb +4 -7
- data/lib/sorcery/providers/paypal.rb +60 -0
- data/lib/sorcery/providers/salesforce.rb +3 -5
- data/lib/sorcery/providers/slack.rb +45 -0
- data/lib/sorcery/providers/twitter.rb +4 -6
- data/lib/sorcery/providers/vk.rb +3 -5
- data/lib/sorcery/providers/wechat.rb +79 -0
- data/lib/sorcery/providers/xing.rb +7 -10
- data/lib/sorcery/test_helpers/internal.rb +10 -10
- data/lib/sorcery/test_helpers/internal/rails.rb +16 -8
- data/lib/sorcery/test_helpers/rails/controller.rb +1 -1
- data/lib/sorcery/test_helpers/rails/integration.rb +5 -6
- data/lib/sorcery/version.rb +1 -1
- data/sorcery.gemspec +25 -27
- data/spec/active_record/user_activation_spec.rb +2 -3
- data/spec/active_record/user_activity_logging_spec.rb +2 -4
- data/spec/active_record/user_brute_force_protection_spec.rb +3 -4
- data/spec/active_record/user_oauth_spec.rb +3 -4
- data/spec/active_record/user_remember_me_spec.rb +3 -4
- data/spec/active_record/user_reset_password_spec.rb +2 -3
- data/spec/active_record/user_spec.rb +7 -7
- data/spec/controllers/controller_activity_logging_spec.rb +13 -24
- data/spec/controllers/controller_brute_force_protection_spec.rb +6 -8
- data/spec/controllers/controller_http_basic_auth_spec.rb +19 -20
- data/spec/controllers/controller_oauth2_spec.rb +125 -100
- data/spec/controllers/controller_oauth_spec.rb +86 -66
- data/spec/controllers/controller_remember_me_spec.rb +35 -30
- data/spec/controllers/controller_session_timeout_spec.rb +14 -15
- data/spec/controllers/controller_spec.rb +77 -111
- data/spec/orm/active_record.rb +1 -1
- data/spec/rails_app/app/active_record/authentication.rb +1 -1
- data/spec/rails_app/app/active_record/user.rb +2 -2
- data/spec/rails_app/app/controllers/sorcery_controller.rb +89 -24
- data/spec/rails_app/app/mailers/sorcery_mailer.rb +16 -17
- data/spec/rails_app/config.ru +1 -1
- data/spec/rails_app/config/application.rb +7 -7
- data/spec/rails_app/config/boot.rb +1 -1
- data/spec/rails_app/config/environments/test.rb +1 -1
- data/spec/rails_app/config/initializers/compatible_legacy_migration.rb +11 -0
- data/spec/rails_app/config/initializers/session_store.rb +3 -3
- data/spec/rails_app/config/routes.rb +11 -1
- data/spec/rails_app/db/migrate/activation/20101224223622_add_activation_to_users.rb +4 -4
- data/spec/rails_app/db/migrate/activity_logging/20101224223624_add_activity_logging_to_users.rb +8 -8
- data/spec/rails_app/db/migrate/brute_force_protection/20101224223626_add_brute_force_protection_to_users.rb +5 -5
- data/spec/rails_app/db/migrate/core/20101224223620_create_users.rb +5 -5
- data/spec/rails_app/db/migrate/external/20101224223628_create_authentications_and_user_providers.rb +3 -3
- data/spec/rails_app/db/migrate/remember_me/20101224223623_add_remember_me_token_to_users.rb +6 -6
- data/spec/rails_app/db/migrate/reset_password/20101224223622_add_reset_password_to_users.rb +5 -5
- data/spec/shared_examples/user_activation_shared_examples.rb +99 -58
- data/spec/shared_examples/user_activity_logging_shared_examples.rb +47 -41
- data/spec/shared_examples/user_brute_force_protection_shared_examples.rb +19 -24
- data/spec/shared_examples/user_oauth_shared_examples.rb +7 -10
- data/spec/shared_examples/user_remember_me_shared_examples.rb +90 -21
- data/spec/shared_examples/user_reset_password_shared_examples.rb +52 -54
- data/spec/shared_examples/user_shared_examples.rb +215 -118
- data/spec/sorcery_crypto_providers_spec.rb +63 -76
- data/spec/spec_helper.rb +17 -13
- metadata +28 -83
- data/gemfiles/mongo_mapper-rails40.gemfile +0 -9
- data/gemfiles/mongo_mapper-rails41.gemfile +0 -9
- data/gemfiles/mongoid-rails41.gemfile +0 -9
- data/gemfiles/mongoid3-rails32.gemfile +0 -9
- data/lib/sorcery/adapters/data_mapper_adapter.rb +0 -176
- data/lib/sorcery/adapters/mongo_mapper_adapter.rb +0 -110
- data/lib/sorcery/adapters/mongoid_adapter.rb +0 -97
- data/lib/sorcery/railties/tasks.rake +0 -6
- data/spec/data_mapper/user_activation_spec.rb +0 -10
- data/spec/data_mapper/user_activity_logging_spec.rb +0 -14
- data/spec/data_mapper/user_brute_force_protection_spec.rb +0 -9
- data/spec/data_mapper/user_oauth_spec.rb +0 -9
- data/spec/data_mapper/user_remember_me_spec.rb +0 -8
- data/spec/data_mapper/user_reset_password_spec.rb +0 -8
- data/spec/data_mapper/user_spec.rb +0 -27
- data/spec/mongo_mapper/user_activation_spec.rb +0 -9
- data/spec/mongo_mapper/user_activity_logging_spec.rb +0 -8
- data/spec/mongo_mapper/user_brute_force_protection_spec.rb +0 -8
- data/spec/mongo_mapper/user_oauth_spec.rb +0 -8
- data/spec/mongo_mapper/user_remember_me_spec.rb +0 -8
- data/spec/mongo_mapper/user_reset_password_spec.rb +0 -8
- data/spec/mongo_mapper/user_spec.rb +0 -37
- data/spec/mongoid/user_activation_spec.rb +0 -9
- data/spec/mongoid/user_activity_logging_spec.rb +0 -8
- data/spec/mongoid/user_brute_force_protection_spec.rb +0 -8
- data/spec/mongoid/user_oauth_spec.rb +0 -8
- data/spec/mongoid/user_remember_me_spec.rb +0 -8
- data/spec/mongoid/user_reset_password_spec.rb +0 -8
- data/spec/mongoid/user_spec.rb +0 -51
- data/spec/orm/data_mapper.rb +0 -48
- data/spec/orm/mongo_mapper.rb +0 -10
- data/spec/orm/mongoid.rb +0 -22
- data/spec/rails_app/app/data_mapper/authentication.rb +0 -8
- data/spec/rails_app/app/data_mapper/user.rb +0 -7
- data/spec/rails_app/app/mongo_mapper/authentication.rb +0 -6
- data/spec/rails_app/app/mongo_mapper/user.rb +0 -7
- data/spec/rails_app/app/mongoid/authentication.rb +0 -7
- data/spec/rails_app/app/mongoid/user.rb +0 -7
@@ -1,176 +0,0 @@
|
|
1
|
-
module Sorcery
|
2
|
-
module Adapters
|
3
|
-
class DataMapperAdapter < BaseAdapter
|
4
|
-
module Wrapper
|
5
|
-
extend ActiveSupport::Concern
|
6
|
-
|
7
|
-
included do
|
8
|
-
sorcery_adapter.verify_submodules_compatibility!
|
9
|
-
end
|
10
|
-
|
11
|
-
def sorcery_adapter
|
12
|
-
@sorcery_adapter ||= Sorcery::Adapters::DataMapperAdapter.new(self)
|
13
|
-
end
|
14
|
-
|
15
|
-
module ClassMethods
|
16
|
-
def sorcery_adapter
|
17
|
-
Sorcery::Adapters::DataMapperAdapter.from(self)
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
def increment(attr)
|
23
|
-
@model[attr] ||= 0
|
24
|
-
@model[attr] += 1
|
25
|
-
@model
|
26
|
-
end
|
27
|
-
|
28
|
-
def update_attributes(attrs)
|
29
|
-
attrs.each do |name, value|
|
30
|
-
value = value.utc if value.is_a?(ActiveSupport::TimeWithZone)
|
31
|
-
@model.send(:"#{name}=", value)
|
32
|
-
end
|
33
|
-
@model.class.get(@model.id).update(attrs)
|
34
|
-
end
|
35
|
-
|
36
|
-
def update_attribute(name, value)
|
37
|
-
update_attributes(name => value)
|
38
|
-
end
|
39
|
-
|
40
|
-
def save(options = {})
|
41
|
-
if options.key?(:validate) && !options[:validate]
|
42
|
-
@model.save!
|
43
|
-
else
|
44
|
-
@model.save
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
class << self
|
49
|
-
def define_field(name, type, options={})
|
50
|
-
@klass.property name, type, options.slice(:length, :default)
|
51
|
-
|
52
|
-
# Workaround local timezone retrieval problem NOTE dm-core issue #193
|
53
|
-
if type == Time
|
54
|
-
@klass.send(:alias_method, "orig_#{name}", name)
|
55
|
-
@klass.send :define_method, name do
|
56
|
-
t = send("orig_#{name}")
|
57
|
-
t && Time.new(t.year, t.month, t.day, t.hour, t.min, t.sec, 0)
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
def define_callback(time, event, method_name, options={})
|
63
|
-
event = :valid? if event == :validation
|
64
|
-
condition = options[:if]
|
65
|
-
|
66
|
-
user_klass = @klass
|
67
|
-
|
68
|
-
block = Proc.new do |record|
|
69
|
-
if condition.nil?
|
70
|
-
send(method_name)
|
71
|
-
elsif condition.respond_to?(:call)
|
72
|
-
send(method_name) if condition.call(self)
|
73
|
-
elsif condition.is_a? Symbol
|
74
|
-
send(method_name) if send(condition)
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
@klass.send(time, event, &block)
|
79
|
-
end
|
80
|
-
|
81
|
-
def find(id)
|
82
|
-
@klass.get(id)
|
83
|
-
end
|
84
|
-
|
85
|
-
def delete_all
|
86
|
-
@klass.destroy
|
87
|
-
end
|
88
|
-
|
89
|
-
# NOTE
|
90
|
-
# DM Adapter dependent
|
91
|
-
# DM creates MySQL tables case insensitive by default
|
92
|
-
# http://datamapper.lighthouseapp.com/projects/20609-datamapper/tickets/1105
|
93
|
-
def find_by_credentials(credentials)
|
94
|
-
credential = credentials[0].dup
|
95
|
-
credential.downcase! if @klass.sorcery_config.downcase_username_before_authenticating
|
96
|
-
@klass.sorcery_config.username_attribute_names.each do |name|
|
97
|
-
@user = @klass.first(name => credential)
|
98
|
-
break if @user
|
99
|
-
end
|
100
|
-
!!@user ? @klass.get(@user.id) : nil
|
101
|
-
end
|
102
|
-
|
103
|
-
def find_by_oauth_credentials(provider, uid)
|
104
|
-
@user_config = ::Sorcery::Controller::Config.user_class.to_s.constantize.sorcery_config
|
105
|
-
user = @klass.first(@user_config.provider_attribute_name => provider, @user_config.provider_uid_attribute_name => uid)
|
106
|
-
!!user ? @klass.get(user.id) : nil
|
107
|
-
end
|
108
|
-
|
109
|
-
def find_by_token(token_attr_name, token)
|
110
|
-
@klass.first(token_attr_name => token)
|
111
|
-
end
|
112
|
-
|
113
|
-
def find_by_id(id)
|
114
|
-
@klass.get(id)
|
115
|
-
rescue ::DataMapper::ObjectNotFoundError
|
116
|
-
nil
|
117
|
-
end
|
118
|
-
|
119
|
-
def find_by_activation_token(token)
|
120
|
-
user = @klass.first(@klass.sorcery_config.activation_token_attribute_name => token)
|
121
|
-
!!user ? @klass.get(user.id) : nil
|
122
|
-
end
|
123
|
-
|
124
|
-
def find_by_remember_me_token(token)
|
125
|
-
user = @klass.first(@klass.sorcery_config.remember_me_token_attribute_name => token)
|
126
|
-
!!user ? @klass.get(user.id) : nil
|
127
|
-
end
|
128
|
-
|
129
|
-
def find_by_username(username)
|
130
|
-
user = nil
|
131
|
-
@klass.sorcery_config.username_attribute_names.each do |name|
|
132
|
-
user = @klass.first(name => username)
|
133
|
-
break if user
|
134
|
-
end
|
135
|
-
!!user ? @klass.get(user.id) : nil
|
136
|
-
end
|
137
|
-
|
138
|
-
def transaction(&blk)
|
139
|
-
@klass.tap(&blk)
|
140
|
-
end
|
141
|
-
|
142
|
-
def find_by_sorcery_token(token_attr_name, token)
|
143
|
-
user = @klass.first(token_attr_name => token)
|
144
|
-
!!user ? @klass.get(user.id) : nil
|
145
|
-
end
|
146
|
-
|
147
|
-
def find_by_email(email)
|
148
|
-
user = @klass.first(@klass.sorcery_config.email_attribute_name => email)
|
149
|
-
!!user ? @klass.get(user.id) : nil
|
150
|
-
end
|
151
|
-
|
152
|
-
# NOTE
|
153
|
-
# DM Adapter dependent
|
154
|
-
def get_current_users
|
155
|
-
unless @klass.repository.adapter.is_a?(::DataMapper::Adapters::MysqlAdapter)
|
156
|
-
raise 'Unsupported DataMapper Adapter'
|
157
|
-
end
|
158
|
-
config = @klass.sorcery_config
|
159
|
-
ret = @klass.all(config.last_logout_at_attribute_name => nil) |
|
160
|
-
@klass.all(config.last_activity_at_attribute_name.gt => config.last_logout_at_attribute_name)
|
161
|
-
ret = ret.all(config.last_activity_at_attribute_name.not => nil)
|
162
|
-
ret = ret.all(config.last_activity_at_attribute_name.gt => config.activity_timeout.seconds.ago.utc)
|
163
|
-
ret
|
164
|
-
end
|
165
|
-
|
166
|
-
def verify_submodules_compatibility!
|
167
|
-
active_submodules = [::Sorcery::Controller::Config.submodules].flatten
|
168
|
-
|
169
|
-
if active_submodules.include?(:activity_logging) && !repository.adapter.is_a?(::DataMapper::Adapters::MysqlAdapter)
|
170
|
-
raise "DataMapper adapter compatibility error, please check documentation"
|
171
|
-
end
|
172
|
-
end
|
173
|
-
end
|
174
|
-
end
|
175
|
-
end
|
176
|
-
end
|
@@ -1,110 +0,0 @@
|
|
1
|
-
module Sorcery
|
2
|
-
module Adapters
|
3
|
-
class MongoMapperAdapter < BaseAdapter
|
4
|
-
module Wrapper
|
5
|
-
extend ActiveSupport::Concern
|
6
|
-
|
7
|
-
included do
|
8
|
-
extend Sorcery::Model
|
9
|
-
end
|
10
|
-
|
11
|
-
def sorcery_adapter
|
12
|
-
@sorcery_adapter ||= Sorcery::Adapters::MongoMapperAdapter.new(self)
|
13
|
-
end
|
14
|
-
|
15
|
-
module ClassMethods
|
16
|
-
def sorcery_adapter
|
17
|
-
Sorcery::Adapters::MongoMapperAdapter.from(self)
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
def increment(attr)
|
23
|
-
@model[attr] ||= 0
|
24
|
-
@model[attr] += 1
|
25
|
-
@model.class.increment(@model.id, attr => 1)
|
26
|
-
end
|
27
|
-
|
28
|
-
def save(options = {})
|
29
|
-
if options.delete(:raise_on_failure) && options[:validate] != false
|
30
|
-
@model.save! options
|
31
|
-
else
|
32
|
-
@model.save options
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
def update_attributes(attrs)
|
37
|
-
@model.update_attributes(attrs)
|
38
|
-
end
|
39
|
-
|
40
|
-
class << self
|
41
|
-
def define_field(name, type, options={})
|
42
|
-
@klass.key name, type, options.slice(:default)
|
43
|
-
end
|
44
|
-
|
45
|
-
def define_callback(time, event, method_name, options={})
|
46
|
-
@klass.send "#{time}_#{event}", method_name, options.slice(:if)
|
47
|
-
end
|
48
|
-
|
49
|
-
def credential_regex(credential)
|
50
|
-
return { :$regex => /^#{Regexp.escape(credential)}$/i } if (@klass.sorcery_config.downcase_username_before_authenticating)
|
51
|
-
return credential
|
52
|
-
end
|
53
|
-
|
54
|
-
def find_by_credentials(credentials)
|
55
|
-
user = nil
|
56
|
-
@klass.sorcery_config.username_attribute_names.each do |attribute|
|
57
|
-
user = @klass.where(attribute => credential_regex(credentials[0])).first
|
58
|
-
break if user
|
59
|
-
end
|
60
|
-
user
|
61
|
-
end
|
62
|
-
|
63
|
-
def find_by_oauth_credentials(provider, uid)
|
64
|
-
@user_config ||= ::Sorcery::Controller::Config.user_class.to_s.constantize.sorcery_config
|
65
|
-
@klass.where(@user_config.provider_attribute_name => provider, @user_config.provider_uid_attribute_name => uid).first
|
66
|
-
end
|
67
|
-
|
68
|
-
def find_by_id(id)
|
69
|
-
@klass.find(id)
|
70
|
-
end
|
71
|
-
|
72
|
-
def find_by_username(username)
|
73
|
-
if @klass.sorcery_config.downcase_username_before_authenticating
|
74
|
-
username = username.downcase
|
75
|
-
end
|
76
|
-
|
77
|
-
@klass.sorcery_config.username_attribute_names.each do |attribute|
|
78
|
-
result = @klass.where(attribute => username).first
|
79
|
-
return result if result
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
|
-
def find_by_activation_token(token)
|
84
|
-
@klass.where(@klass.sorcery_config.activation_token_attribute_name => token).first
|
85
|
-
end
|
86
|
-
|
87
|
-
def find_by_email(email)
|
88
|
-
@klass.where(@klass.sorcery_config.email_attribute_name => email).first
|
89
|
-
end
|
90
|
-
|
91
|
-
def find_by_token(token_attr_name, token)
|
92
|
-
@klass.where(token_attr_name => token).first
|
93
|
-
end
|
94
|
-
|
95
|
-
def transaction(&blk)
|
96
|
-
@klass.tap(&blk)
|
97
|
-
end
|
98
|
-
|
99
|
-
def find_by_sorcery_token(token_attr_name, token)
|
100
|
-
@klass.where(token_attr_name => token).first
|
101
|
-
end
|
102
|
-
|
103
|
-
def get_current_users
|
104
|
-
raise "this method is unavailable for MongoMapper"
|
105
|
-
end
|
106
|
-
|
107
|
-
end
|
108
|
-
end
|
109
|
-
end
|
110
|
-
end
|
@@ -1,97 +0,0 @@
|
|
1
|
-
module Sorcery
|
2
|
-
module Adapters
|
3
|
-
class MongoidAdapter < BaseAdapter
|
4
|
-
def increment(attr)
|
5
|
-
mongoid_4? ? @model.inc(attr => 1) : @model.inc(attr, 1)
|
6
|
-
end
|
7
|
-
|
8
|
-
def update_attributes(attrs)
|
9
|
-
attrs.each do |name, value|
|
10
|
-
attrs[name] = value.utc if value.is_a?(ActiveSupport::TimeWithZone)
|
11
|
-
@model.send(:"#{name}=", value)
|
12
|
-
end
|
13
|
-
@model.class.where(:_id => @model.id).update_all(attrs)
|
14
|
-
end
|
15
|
-
|
16
|
-
def update_attribute(name, value)
|
17
|
-
update_attributes(name => value)
|
18
|
-
end
|
19
|
-
|
20
|
-
def save(options = {})
|
21
|
-
mthd = options.delete(:raise_on_failure) ? :save! : :save
|
22
|
-
@model.send(mthd, options)
|
23
|
-
end
|
24
|
-
|
25
|
-
def mongoid_4?
|
26
|
-
Gem::Version.new(::Mongoid::VERSION) >= Gem::Version.new("4.0.0.alpha")
|
27
|
-
end
|
28
|
-
|
29
|
-
class << self
|
30
|
-
|
31
|
-
def define_field(name, type, options={})
|
32
|
-
@klass.field name, options.slice(:default).merge(type: type)
|
33
|
-
end
|
34
|
-
|
35
|
-
def define_callback(time, event, method_name, options={})
|
36
|
-
@klass.send "#{time}_#{event}", method_name, options.slice(:if)
|
37
|
-
end
|
38
|
-
|
39
|
-
def credential_regex(credential)
|
40
|
-
return { :$regex => /^#{Regexp.escape(credential)}$/i } if (@klass.sorcery_config.downcase_username_before_authenticating)
|
41
|
-
credential
|
42
|
-
end
|
43
|
-
|
44
|
-
def find_by_credentials(credentials)
|
45
|
-
@klass.sorcery_config.username_attribute_names.each do |attribute|
|
46
|
-
@user = @klass.where(attribute => credential_regex(credentials[0])).first
|
47
|
-
break if @user
|
48
|
-
end
|
49
|
-
@user
|
50
|
-
end
|
51
|
-
|
52
|
-
def find_by_oauth_credentials(provider, uid)
|
53
|
-
@user_config ||= ::Sorcery::Controller::Config.user_class.to_s.constantize.sorcery_config
|
54
|
-
@klass.where(@user_config.provider_attribute_name => provider, @user_config.provider_uid_attribute_name => uid).first
|
55
|
-
end
|
56
|
-
|
57
|
-
def find_by_activation_token(token)
|
58
|
-
@klass.where(@klass.sorcery_config.activation_token_attribute_name => token).first
|
59
|
-
end
|
60
|
-
|
61
|
-
def find_by_remember_me_token(token)
|
62
|
-
@klass.where(@klass.sorcery_config.remember_me_token_attribute_name => token).first
|
63
|
-
end
|
64
|
-
|
65
|
-
def transaction(&blk)
|
66
|
-
tap(&blk)
|
67
|
-
end
|
68
|
-
|
69
|
-
def find_by_id(id)
|
70
|
-
@klass.find(id)
|
71
|
-
rescue ::Mongoid::Errors::DocumentNotFound
|
72
|
-
nil
|
73
|
-
end
|
74
|
-
|
75
|
-
def find_by_username(username)
|
76
|
-
query = @klass.sorcery_config.username_attribute_names.map {|name| {name => username}}
|
77
|
-
@klass.any_of(*query).first
|
78
|
-
end
|
79
|
-
|
80
|
-
def find_by_token(token_attr_name, token)
|
81
|
-
@klass.where(token_attr_name => token).first
|
82
|
-
end
|
83
|
-
|
84
|
-
def find_by_email(email)
|
85
|
-
@klass.where(@klass.sorcery_config.email_attribute_name => email).first
|
86
|
-
end
|
87
|
-
|
88
|
-
def get_current_users
|
89
|
-
config = @klass.sorcery_config
|
90
|
-
@klass.where(config.last_activity_at_attribute_name.ne => nil) \
|
91
|
-
.where("this.#{config.last_logout_at_attribute_name} == null || this.#{config.last_activity_at_attribute_name} > this.#{config.last_logout_at_attribute_name}") \
|
92
|
-
.where(config.last_activity_at_attribute_name.gt => config.activity_timeout.seconds.ago.utc).order_by([:_id,:asc])
|
93
|
-
end
|
94
|
-
end
|
95
|
-
end
|
96
|
-
end
|
97
|
-
end
|
@@ -1,14 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
require 'shared_examples/user_activity_logging_shared_examples'
|
4
|
-
|
5
|
-
describe User, "with activity logging submodule", :data_mapper => true do
|
6
|
-
|
7
|
-
it_behaves_like "rails_3_activity_logging_model"
|
8
|
-
|
9
|
-
it "raises an error when incompatible adapter" do
|
10
|
-
allow(User.repository.adapter).to receive(:is_a?).with(DataMapper::Adapters::MysqlAdapter) { false }
|
11
|
-
expect(-> { sorcery_reload!(:activity_logging) }).to raise_error(Exception)
|
12
|
-
end
|
13
|
-
|
14
|
-
end
|