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.

Files changed (149) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +29 -104
  3. data/CHANGELOG.md +13 -1
  4. data/Gemfile +2 -16
  5. data/README.md +124 -272
  6. data/Rakefile +2 -2
  7. data/gemfiles/{mongoid-rails40.gemfile → active_record-rails42.gemfile} +1 -3
  8. data/lib/generators/sorcery/helpers.rb +4 -4
  9. data/lib/generators/sorcery/install_generator.rb +25 -19
  10. data/lib/generators/sorcery/templates/initializer.rb +27 -52
  11. data/lib/generators/sorcery/templates/migration/activity_logging.rb +2 -2
  12. data/lib/generators/sorcery/templates/migration/brute_force_protection.rb +1 -1
  13. data/lib/generators/sorcery/templates/migration/core.rb +3 -3
  14. data/lib/generators/sorcery/templates/migration/external.rb +2 -2
  15. data/lib/generators/sorcery/templates/migration/remember_me.rb +2 -2
  16. data/lib/generators/sorcery/templates/migration/reset_password.rb +2 -2
  17. data/lib/generators/sorcery/templates/migration/user_activation.rb +2 -2
  18. data/lib/sorcery.rb +0 -28
  19. data/lib/sorcery/adapters/active_record_adapter.rb +7 -18
  20. data/lib/sorcery/controller.rb +19 -21
  21. data/lib/sorcery/controller/config.rb +20 -18
  22. data/lib/sorcery/controller/submodules/activity_logging.rb +7 -15
  23. data/lib/sorcery/controller/submodules/brute_force_protection.rb +1 -2
  24. data/lib/sorcery/controller/submodules/external.rb +22 -14
  25. data/lib/sorcery/controller/submodules/http_basic_auth.rb +16 -19
  26. data/lib/sorcery/controller/submodules/remember_me.rb +15 -10
  27. data/lib/sorcery/controller/submodules/session_timeout.rb +7 -8
  28. data/lib/sorcery/crypto_providers/aes256.rb +15 -15
  29. data/lib/sorcery/crypto_providers/bcrypt.rb +19 -21
  30. data/lib/sorcery/crypto_providers/common.rb +1 -1
  31. data/lib/sorcery/crypto_providers/md5.rb +5 -5
  32. data/lib/sorcery/crypto_providers/sha1.rb +5 -5
  33. data/lib/sorcery/crypto_providers/sha256.rb +2 -2
  34. data/lib/sorcery/crypto_providers/sha512.rb +3 -3
  35. data/lib/sorcery/engine.rb +3 -8
  36. data/lib/sorcery/model.rb +24 -32
  37. data/lib/sorcery/model/config.rb +64 -49
  38. data/lib/sorcery/model/submodules/activity_logging.rb +31 -12
  39. data/lib/sorcery/model/submodules/brute_force_protection.rb +23 -23
  40. data/lib/sorcery/model/submodules/external.rb +3 -7
  41. data/lib/sorcery/model/submodules/remember_me.rb +19 -7
  42. data/lib/sorcery/model/submodules/reset_password.rb +32 -36
  43. data/lib/sorcery/model/submodules/user_activation.rb +38 -50
  44. data/lib/sorcery/model/temporary_token.rb +2 -2
  45. data/lib/sorcery/protocols/oauth.rb +3 -9
  46. data/lib/sorcery/protocols/oauth2.rb +0 -2
  47. data/lib/sorcery/providers/base.rb +4 -4
  48. data/lib/sorcery/providers/facebook.rb +5 -8
  49. data/lib/sorcery/providers/github.rb +5 -7
  50. data/lib/sorcery/providers/google.rb +3 -5
  51. data/lib/sorcery/providers/heroku.rb +6 -8
  52. data/lib/sorcery/providers/jira.rb +12 -17
  53. data/lib/sorcery/providers/linkedin.rb +6 -8
  54. data/lib/sorcery/providers/liveid.rb +4 -7
  55. data/lib/sorcery/providers/paypal.rb +60 -0
  56. data/lib/sorcery/providers/salesforce.rb +3 -5
  57. data/lib/sorcery/providers/slack.rb +45 -0
  58. data/lib/sorcery/providers/twitter.rb +4 -6
  59. data/lib/sorcery/providers/vk.rb +3 -5
  60. data/lib/sorcery/providers/wechat.rb +79 -0
  61. data/lib/sorcery/providers/xing.rb +7 -10
  62. data/lib/sorcery/test_helpers/internal.rb +10 -10
  63. data/lib/sorcery/test_helpers/internal/rails.rb +16 -8
  64. data/lib/sorcery/test_helpers/rails/controller.rb +1 -1
  65. data/lib/sorcery/test_helpers/rails/integration.rb +5 -6
  66. data/lib/sorcery/version.rb +1 -1
  67. data/sorcery.gemspec +25 -27
  68. data/spec/active_record/user_activation_spec.rb +2 -3
  69. data/spec/active_record/user_activity_logging_spec.rb +2 -4
  70. data/spec/active_record/user_brute_force_protection_spec.rb +3 -4
  71. data/spec/active_record/user_oauth_spec.rb +3 -4
  72. data/spec/active_record/user_remember_me_spec.rb +3 -4
  73. data/spec/active_record/user_reset_password_spec.rb +2 -3
  74. data/spec/active_record/user_spec.rb +7 -7
  75. data/spec/controllers/controller_activity_logging_spec.rb +13 -24
  76. data/spec/controllers/controller_brute_force_protection_spec.rb +6 -8
  77. data/spec/controllers/controller_http_basic_auth_spec.rb +19 -20
  78. data/spec/controllers/controller_oauth2_spec.rb +125 -100
  79. data/spec/controllers/controller_oauth_spec.rb +86 -66
  80. data/spec/controllers/controller_remember_me_spec.rb +35 -30
  81. data/spec/controllers/controller_session_timeout_spec.rb +14 -15
  82. data/spec/controllers/controller_spec.rb +77 -111
  83. data/spec/orm/active_record.rb +1 -1
  84. data/spec/rails_app/app/active_record/authentication.rb +1 -1
  85. data/spec/rails_app/app/active_record/user.rb +2 -2
  86. data/spec/rails_app/app/controllers/sorcery_controller.rb +89 -24
  87. data/spec/rails_app/app/mailers/sorcery_mailer.rb +16 -17
  88. data/spec/rails_app/config.ru +1 -1
  89. data/spec/rails_app/config/application.rb +7 -7
  90. data/spec/rails_app/config/boot.rb +1 -1
  91. data/spec/rails_app/config/environments/test.rb +1 -1
  92. data/spec/rails_app/config/initializers/compatible_legacy_migration.rb +11 -0
  93. data/spec/rails_app/config/initializers/session_store.rb +3 -3
  94. data/spec/rails_app/config/routes.rb +11 -1
  95. data/spec/rails_app/db/migrate/activation/20101224223622_add_activation_to_users.rb +4 -4
  96. data/spec/rails_app/db/migrate/activity_logging/20101224223624_add_activity_logging_to_users.rb +8 -8
  97. data/spec/rails_app/db/migrate/brute_force_protection/20101224223626_add_brute_force_protection_to_users.rb +5 -5
  98. data/spec/rails_app/db/migrate/core/20101224223620_create_users.rb +5 -5
  99. data/spec/rails_app/db/migrate/external/20101224223628_create_authentications_and_user_providers.rb +3 -3
  100. data/spec/rails_app/db/migrate/remember_me/20101224223623_add_remember_me_token_to_users.rb +6 -6
  101. data/spec/rails_app/db/migrate/reset_password/20101224223622_add_reset_password_to_users.rb +5 -5
  102. data/spec/shared_examples/user_activation_shared_examples.rb +99 -58
  103. data/spec/shared_examples/user_activity_logging_shared_examples.rb +47 -41
  104. data/spec/shared_examples/user_brute_force_protection_shared_examples.rb +19 -24
  105. data/spec/shared_examples/user_oauth_shared_examples.rb +7 -10
  106. data/spec/shared_examples/user_remember_me_shared_examples.rb +90 -21
  107. data/spec/shared_examples/user_reset_password_shared_examples.rb +52 -54
  108. data/spec/shared_examples/user_shared_examples.rb +215 -118
  109. data/spec/sorcery_crypto_providers_spec.rb +63 -76
  110. data/spec/spec_helper.rb +17 -13
  111. metadata +28 -83
  112. data/gemfiles/mongo_mapper-rails40.gemfile +0 -9
  113. data/gemfiles/mongo_mapper-rails41.gemfile +0 -9
  114. data/gemfiles/mongoid-rails41.gemfile +0 -9
  115. data/gemfiles/mongoid3-rails32.gemfile +0 -9
  116. data/lib/sorcery/adapters/data_mapper_adapter.rb +0 -176
  117. data/lib/sorcery/adapters/mongo_mapper_adapter.rb +0 -110
  118. data/lib/sorcery/adapters/mongoid_adapter.rb +0 -97
  119. data/lib/sorcery/railties/tasks.rake +0 -6
  120. data/spec/data_mapper/user_activation_spec.rb +0 -10
  121. data/spec/data_mapper/user_activity_logging_spec.rb +0 -14
  122. data/spec/data_mapper/user_brute_force_protection_spec.rb +0 -9
  123. data/spec/data_mapper/user_oauth_spec.rb +0 -9
  124. data/spec/data_mapper/user_remember_me_spec.rb +0 -8
  125. data/spec/data_mapper/user_reset_password_spec.rb +0 -8
  126. data/spec/data_mapper/user_spec.rb +0 -27
  127. data/spec/mongo_mapper/user_activation_spec.rb +0 -9
  128. data/spec/mongo_mapper/user_activity_logging_spec.rb +0 -8
  129. data/spec/mongo_mapper/user_brute_force_protection_spec.rb +0 -8
  130. data/spec/mongo_mapper/user_oauth_spec.rb +0 -8
  131. data/spec/mongo_mapper/user_remember_me_spec.rb +0 -8
  132. data/spec/mongo_mapper/user_reset_password_spec.rb +0 -8
  133. data/spec/mongo_mapper/user_spec.rb +0 -37
  134. data/spec/mongoid/user_activation_spec.rb +0 -9
  135. data/spec/mongoid/user_activity_logging_spec.rb +0 -8
  136. data/spec/mongoid/user_brute_force_protection_spec.rb +0 -8
  137. data/spec/mongoid/user_oauth_spec.rb +0 -8
  138. data/spec/mongoid/user_remember_me_spec.rb +0 -8
  139. data/spec/mongoid/user_reset_password_spec.rb +0 -8
  140. data/spec/mongoid/user_spec.rb +0 -51
  141. data/spec/orm/data_mapper.rb +0 -48
  142. data/spec/orm/mongo_mapper.rb +0 -10
  143. data/spec/orm/mongoid.rb +0 -22
  144. data/spec/rails_app/app/data_mapper/authentication.rb +0 -8
  145. data/spec/rails_app/app/data_mapper/user.rb +0 -7
  146. data/spec/rails_app/app/mongo_mapper/authentication.rb +0 -6
  147. data/spec/rails_app/app/mongo_mapper/user.rb +0 -7
  148. data/spec/rails_app/app/mongoid/authentication.rb +0 -7
  149. data/spec/rails_app/app/mongoid/user.rb +0 -7
@@ -1,9 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gem 'rails', '~> 4.0.0'
4
-
5
- gem 'mongo_mapper', github: 'mongomapper/mongomapper'
6
- gem 'sqlite3', platform: :mri
7
- gem 'activerecord-jdbcsqlite3-adapter', platform: :jruby
8
-
9
- gemspec path: '..'
@@ -1,9 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gem 'rails', '~> 4.1.0'
4
-
5
- gem 'mongo_mapper', github: 'mongomapper/mongomapper'
6
- gem 'sqlite3', platform: :mri
7
- gem 'activerecord-jdbcsqlite3-adapter', platform: :jruby
8
-
9
- gemspec path: '..'
@@ -1,9 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gem 'rails', '~> 4.1.0'
4
-
5
- gem 'mongoid', '~> 4.0.0'
6
- gem 'sqlite3', platform: :mri
7
- gem 'activerecord-jdbcsqlite3-adapter', platform: :jruby
8
-
9
- gemspec path: '..'
@@ -1,9 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gem 'rails', '~> 3.2.0'
4
-
5
- gem 'mongoid', '~> 3.0'
6
- gem 'bson_ext'
7
- gem 'sqlite3'
8
-
9
- gemspec path: '..'
@@ -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,6 +0,0 @@
1
- namespace :sorcery do
2
- desc "Adds sorcery's initializer file"
3
- task :bootstrap do
4
- warn "This task is obsolete.\nUse \"rails g sorcery:install\" now.\nSee README for more information."
5
- end
6
- end
@@ -1,10 +0,0 @@
1
- require 'spec_helper'
2
-
3
- require 'rails_app/app/mailers/sorcery_mailer'
4
- require 'shared_examples/user_activation_shared_examples'
5
-
6
- describe User, "with activation submodule", :data_mapper => true do
7
-
8
- it_behaves_like "rails_3_activation_model"
9
-
10
- 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