upstream-devise 2.1.0.rc

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.
Files changed (215) hide show
  1. data/.gitignore +10 -0
  2. data/.travis.yml +15 -0
  3. data/CHANGELOG.rdoc +846 -0
  4. data/Gemfile +35 -0
  5. data/Gemfile.lock +165 -0
  6. data/MIT-LICENSE +20 -0
  7. data/README.md +384 -0
  8. data/Rakefile +34 -0
  9. data/app/controllers/devise/confirmations_controller.rb +43 -0
  10. data/app/controllers/devise/omniauth_callbacks_controller.rb +24 -0
  11. data/app/controllers/devise/passwords_controller.rb +47 -0
  12. data/app/controllers/devise/registrations_controller.rb +107 -0
  13. data/app/controllers/devise/sessions_controller.rb +49 -0
  14. data/app/controllers/devise/unlocks_controller.rb +44 -0
  15. data/app/controllers/devise_controller.rb +177 -0
  16. data/app/helpers/devise_helper.rb +25 -0
  17. data/app/mailers/devise/mailer.rb +15 -0
  18. data/app/views/devise/_links.erb +3 -0
  19. data/app/views/devise/confirmations/new.html.erb +12 -0
  20. data/app/views/devise/mailer/confirmation_instructions.html.erb +5 -0
  21. data/app/views/devise/mailer/reset_password_instructions.html.erb +8 -0
  22. data/app/views/devise/mailer/unlock_instructions.html.erb +7 -0
  23. data/app/views/devise/passwords/edit.html.erb +16 -0
  24. data/app/views/devise/passwords/new.html.erb +12 -0
  25. data/app/views/devise/registrations/edit.html.erb +25 -0
  26. data/app/views/devise/registrations/new.html.erb +18 -0
  27. data/app/views/devise/sessions/new.html.erb +17 -0
  28. data/app/views/devise/shared/_links.erb +25 -0
  29. data/app/views/devise/unlocks/new.html.erb +12 -0
  30. data/config/locales/en.yml +57 -0
  31. data/devise.gemspec +25 -0
  32. data/gemfiles/Gemfile.rails-3.1.x +35 -0
  33. data/gemfiles/Gemfile.rails-3.1.x.lock +167 -0
  34. data/lib/devise.rb +455 -0
  35. data/lib/devise/controllers/helpers.rb +269 -0
  36. data/lib/devise/controllers/rememberable.rb +52 -0
  37. data/lib/devise/controllers/scoped_views.rb +17 -0
  38. data/lib/devise/controllers/url_helpers.rb +67 -0
  39. data/lib/devise/delegator.rb +17 -0
  40. data/lib/devise/encryptors/authlogic_sha512.rb +19 -0
  41. data/lib/devise/encryptors/base.rb +24 -0
  42. data/lib/devise/encryptors/clearance_sha1.rb +17 -0
  43. data/lib/devise/encryptors/restful_authentication_sha1.rb +22 -0
  44. data/lib/devise/encryptors/sha1.rb +25 -0
  45. data/lib/devise/encryptors/sha512.rb +25 -0
  46. data/lib/devise/failure_app.rb +185 -0
  47. data/lib/devise/hooks/activatable.rb +11 -0
  48. data/lib/devise/hooks/forgetable.rb +9 -0
  49. data/lib/devise/hooks/lockable.rb +7 -0
  50. data/lib/devise/hooks/rememberable.rb +6 -0
  51. data/lib/devise/hooks/timeoutable.rb +22 -0
  52. data/lib/devise/hooks/trackable.rb +9 -0
  53. data/lib/devise/mailers/helpers.rb +86 -0
  54. data/lib/devise/mapping.rb +172 -0
  55. data/lib/devise/models.rb +123 -0
  56. data/lib/devise/models/authenticatable.rb +231 -0
  57. data/lib/devise/models/confirmable.rb +242 -0
  58. data/lib/devise/models/database_authenticatable.rb +126 -0
  59. data/lib/devise/models/encryptable.rb +86 -0
  60. data/lib/devise/models/lockable.rb +185 -0
  61. data/lib/devise/models/omniauthable.rb +27 -0
  62. data/lib/devise/models/recoverable.rb +140 -0
  63. data/lib/devise/models/registerable.rb +25 -0
  64. data/lib/devise/models/rememberable.rb +125 -0
  65. data/lib/devise/models/timeoutable.rb +49 -0
  66. data/lib/devise/models/token_authenticatable.rb +77 -0
  67. data/lib/devise/models/trackable.rb +35 -0
  68. data/lib/devise/models/validatable.rb +66 -0
  69. data/lib/devise/modules.rb +30 -0
  70. data/lib/devise/omniauth.rb +28 -0
  71. data/lib/devise/omniauth/config.rb +45 -0
  72. data/lib/devise/omniauth/url_helpers.rb +33 -0
  73. data/lib/devise/orm/active_record.rb +3 -0
  74. data/lib/devise/orm/mongoid.rb +3 -0
  75. data/lib/devise/param_filter.rb +41 -0
  76. data/lib/devise/rails.rb +54 -0
  77. data/lib/devise/rails/routes.rb +412 -0
  78. data/lib/devise/rails/warden_compat.rb +43 -0
  79. data/lib/devise/strategies/authenticatable.rb +165 -0
  80. data/lib/devise/strategies/base.rb +15 -0
  81. data/lib/devise/strategies/database_authenticatable.rb +21 -0
  82. data/lib/devise/strategies/rememberable.rb +53 -0
  83. data/lib/devise/strategies/token_authenticatable.rb +57 -0
  84. data/lib/devise/test_helpers.rb +130 -0
  85. data/lib/devise/version.rb +3 -0
  86. data/lib/generators/active_record/devise_generator.rb +78 -0
  87. data/lib/generators/active_record/templates/migration.rb +19 -0
  88. data/lib/generators/active_record/templates/migration_existing.rb +26 -0
  89. data/lib/generators/devise/devise_generator.rb +24 -0
  90. data/lib/generators/devise/install_generator.rb +24 -0
  91. data/lib/generators/devise/orm_helpers.rb +32 -0
  92. data/lib/generators/devise/views_generator.rb +110 -0
  93. data/lib/generators/mongoid/devise_generator.rb +60 -0
  94. data/lib/generators/templates/README +31 -0
  95. data/lib/generators/templates/devise.rb +216 -0
  96. data/lib/generators/templates/markerb/confirmation_instructions.markerb +5 -0
  97. data/lib/generators/templates/markerb/reset_password_instructions.markerb +8 -0
  98. data/lib/generators/templates/markerb/unlock_instructions.markerb +7 -0
  99. data/lib/generators/templates/simple_form_for/confirmations/new.html.erb +15 -0
  100. data/lib/generators/templates/simple_form_for/passwords/edit.html.erb +19 -0
  101. data/lib/generators/templates/simple_form_for/passwords/new.html.erb +15 -0
  102. data/lib/generators/templates/simple_form_for/registrations/edit.html.erb +22 -0
  103. data/lib/generators/templates/simple_form_for/registrations/new.html.erb +17 -0
  104. data/lib/generators/templates/simple_form_for/sessions/new.html.erb +15 -0
  105. data/lib/generators/templates/simple_form_for/unlocks/new.html.erb +15 -0
  106. data/test/controllers/custom_strategy_test.rb +62 -0
  107. data/test/controllers/helpers_test.rb +254 -0
  108. data/test/controllers/internal_helpers_test.rb +97 -0
  109. data/test/controllers/sessions_controller_test.rb +36 -0
  110. data/test/controllers/url_helpers_test.rb +59 -0
  111. data/test/delegator_test.rb +19 -0
  112. data/test/devise_test.rb +72 -0
  113. data/test/encryptors_test.rb +30 -0
  114. data/test/failure_app_test.rb +211 -0
  115. data/test/generators/active_record_generator_test.rb +69 -0
  116. data/test/generators/devise_generator_test.rb +39 -0
  117. data/test/generators/install_generator_test.rb +13 -0
  118. data/test/generators/mongoid_generator_test.rb +23 -0
  119. data/test/generators/views_generator_test.rb +52 -0
  120. data/test/helpers/devise_helper_test.rb +51 -0
  121. data/test/indifferent_hash.rb +33 -0
  122. data/test/integration/authenticatable_test.rb +587 -0
  123. data/test/integration/confirmable_test.rb +255 -0
  124. data/test/integration/database_authenticatable_test.rb +82 -0
  125. data/test/integration/http_authenticatable_test.rb +97 -0
  126. data/test/integration/lockable_test.rb +224 -0
  127. data/test/integration/omniauthable_test.rb +133 -0
  128. data/test/integration/recoverable_test.rb +300 -0
  129. data/test/integration/registerable_test.rb +324 -0
  130. data/test/integration/rememberable_test.rb +158 -0
  131. data/test/integration/timeoutable_test.rb +114 -0
  132. data/test/integration/token_authenticatable_test.rb +161 -0
  133. data/test/integration/trackable_test.rb +92 -0
  134. data/test/mailers/confirmation_instructions_test.rb +95 -0
  135. data/test/mailers/reset_password_instructions_test.rb +83 -0
  136. data/test/mailers/unlock_instructions_test.rb +77 -0
  137. data/test/mapping_test.rb +127 -0
  138. data/test/models/authenticatable_test.rb +7 -0
  139. data/test/models/confirmable_test.rb +357 -0
  140. data/test/models/database_authenticatable_test.rb +189 -0
  141. data/test/models/encryptable_test.rb +73 -0
  142. data/test/models/lockable_test.rb +263 -0
  143. data/test/models/omniauthable_test.rb +7 -0
  144. data/test/models/recoverable_test.rb +205 -0
  145. data/test/models/registerable_test.rb +7 -0
  146. data/test/models/rememberable_test.rb +174 -0
  147. data/test/models/serializable_test.rb +48 -0
  148. data/test/models/timeoutable_test.rb +46 -0
  149. data/test/models/token_authenticatable_test.rb +55 -0
  150. data/test/models/trackable_test.rb +13 -0
  151. data/test/models/validatable_test.rb +117 -0
  152. data/test/models_test.rb +179 -0
  153. data/test/omniauth/config_test.rb +57 -0
  154. data/test/omniauth/url_helpers_test.rb +58 -0
  155. data/test/orm/active_record.rb +9 -0
  156. data/test/orm/mongoid.rb +14 -0
  157. data/test/rails_app/Rakefile +10 -0
  158. data/test/rails_app/app/active_record/admin.rb +6 -0
  159. data/test/rails_app/app/active_record/shim.rb +2 -0
  160. data/test/rails_app/app/active_record/user.rb +6 -0
  161. data/test/rails_app/app/controllers/admins/sessions_controller.rb +6 -0
  162. data/test/rails_app/app/controllers/admins_controller.rb +6 -0
  163. data/test/rails_app/app/controllers/application_controller.rb +8 -0
  164. data/test/rails_app/app/controllers/home_controller.rb +25 -0
  165. data/test/rails_app/app/controllers/publisher/registrations_controller.rb +2 -0
  166. data/test/rails_app/app/controllers/publisher/sessions_controller.rb +2 -0
  167. data/test/rails_app/app/controllers/users/omniauth_callbacks_controller.rb +14 -0
  168. data/test/rails_app/app/controllers/users_controller.rb +23 -0
  169. data/test/rails_app/app/helpers/application_helper.rb +3 -0
  170. data/test/rails_app/app/mailers/users/mailer.rb +3 -0
  171. data/test/rails_app/app/mongoid/admin.rb +30 -0
  172. data/test/rails_app/app/mongoid/shim.rb +24 -0
  173. data/test/rails_app/app/mongoid/user.rb +45 -0
  174. data/test/rails_app/app/views/admins/index.html.erb +1 -0
  175. data/test/rails_app/app/views/admins/sessions/new.html.erb +2 -0
  176. data/test/rails_app/app/views/home/admin_dashboard.html.erb +1 -0
  177. data/test/rails_app/app/views/home/index.html.erb +1 -0
  178. data/test/rails_app/app/views/home/join.html.erb +1 -0
  179. data/test/rails_app/app/views/home/private.html.erb +1 -0
  180. data/test/rails_app/app/views/home/user_dashboard.html.erb +1 -0
  181. data/test/rails_app/app/views/layouts/application.html.erb +24 -0
  182. data/test/rails_app/app/views/users/index.html.erb +1 -0
  183. data/test/rails_app/app/views/users/mailer/confirmation_instructions.erb +1 -0
  184. data/test/rails_app/app/views/users/sessions/new.html.erb +1 -0
  185. data/test/rails_app/config.ru +4 -0
  186. data/test/rails_app/config/application.rb +41 -0
  187. data/test/rails_app/config/boot.rb +8 -0
  188. data/test/rails_app/config/database.yml +18 -0
  189. data/test/rails_app/config/environment.rb +5 -0
  190. data/test/rails_app/config/environments/development.rb +18 -0
  191. data/test/rails_app/config/environments/production.rb +33 -0
  192. data/test/rails_app/config/environments/test.rb +33 -0
  193. data/test/rails_app/config/initializers/backtrace_silencers.rb +7 -0
  194. data/test/rails_app/config/initializers/devise.rb +186 -0
  195. data/test/rails_app/config/initializers/inflections.rb +2 -0
  196. data/test/rails_app/config/initializers/secret_token.rb +2 -0
  197. data/test/rails_app/config/routes.rb +90 -0
  198. data/test/rails_app/db/migrate/20100401102949_create_tables.rb +77 -0
  199. data/test/rails_app/db/schema.rb +52 -0
  200. data/test/rails_app/lib/shared_admin.rb +14 -0
  201. data/test/rails_app/lib/shared_user.rb +26 -0
  202. data/test/rails_app/public/404.html +26 -0
  203. data/test/rails_app/public/422.html +26 -0
  204. data/test/rails_app/public/500.html +26 -0
  205. data/test/rails_app/public/favicon.ico +0 -0
  206. data/test/rails_app/script/rails +10 -0
  207. data/test/routes_test.rb +248 -0
  208. data/test/support/assertions.rb +42 -0
  209. data/test/support/helpers.rb +91 -0
  210. data/test/support/integration.rb +90 -0
  211. data/test/support/locale/en.yml +4 -0
  212. data/test/support/webrat/integrations/rails.rb +24 -0
  213. data/test/test_helper.rb +27 -0
  214. data/test/test_helpers_test.rb +134 -0
  215. metadata +451 -0
@@ -0,0 +1,455 @@
1
+ require 'rails'
2
+ require 'active_support/core_ext/numeric/time'
3
+ require 'active_support/dependencies'
4
+ require 'orm_adapter'
5
+ require 'set'
6
+ require 'securerandom'
7
+
8
+ module Devise
9
+ autoload :Delegator, 'devise/delegator'
10
+ autoload :FailureApp, 'devise/failure_app'
11
+ autoload :OmniAuth, 'devise/omniauth'
12
+ autoload :ParamFilter, 'devise/param_filter'
13
+ autoload :Schema, 'devise/schema'
14
+ autoload :TestHelpers, 'devise/test_helpers'
15
+
16
+ module Controllers
17
+ autoload :Helpers, 'devise/controllers/helpers'
18
+ autoload :Rememberable, 'devise/controllers/rememberable'
19
+ autoload :ScopedViews, 'devise/controllers/scoped_views'
20
+ autoload :UrlHelpers, 'devise/controllers/url_helpers'
21
+ end
22
+
23
+ module Encryptors
24
+ autoload :Base, 'devise/encryptors/base'
25
+ autoload :AuthlogicSha512, 'devise/encryptors/authlogic_sha512'
26
+ autoload :ClearanceSha1, 'devise/encryptors/clearance_sha1'
27
+ autoload :RestfulAuthenticationSha1, 'devise/encryptors/restful_authentication_sha1'
28
+ autoload :Sha512, 'devise/encryptors/sha512'
29
+ autoload :Sha1, 'devise/encryptors/sha1'
30
+ end
31
+
32
+ module Mailers
33
+ autoload :Helpers, 'devise/mailers/helpers'
34
+ end
35
+
36
+ module Strategies
37
+ autoload :Base, 'devise/strategies/base'
38
+ autoload :Authenticatable, 'devise/strategies/authenticatable'
39
+ end
40
+
41
+ # Constants which holds devise configuration for extensions. Those should
42
+ # not be modified by the "end user" (this is why they are constants).
43
+ ALL = []
44
+ CONTROLLERS = ActiveSupport::OrderedHash.new
45
+ ROUTES = ActiveSupport::OrderedHash.new
46
+ STRATEGIES = ActiveSupport::OrderedHash.new
47
+ URL_HELPERS = ActiveSupport::OrderedHash.new
48
+
49
+ # Strategies that do not require user input.
50
+ NO_INPUT = []
51
+
52
+ # True values used to check params
53
+ TRUE_VALUES = [true, 1, '1', 't', 'T', 'true', 'TRUE']
54
+
55
+ # Declare encryptors length which are used in migrations.
56
+ ENCRYPTORS_LENGTH = {
57
+ :sha1 => 40,
58
+ :sha512 => 128,
59
+ :clearance_sha1 => 40,
60
+ :restful_authentication_sha1 => 40,
61
+ :authlogic_sha512 => 128
62
+ }
63
+
64
+ # Custom domain for cookies. Not set by default
65
+ mattr_accessor :rememberable_options
66
+ @@rememberable_options = {}
67
+
68
+ # The number of times to encrypt password.
69
+ mattr_accessor :stretches
70
+ @@stretches = 10
71
+
72
+ # Keys used when authenticating a user.
73
+ mattr_accessor :authentication_keys
74
+ @@authentication_keys = [ :email ]
75
+
76
+ # Request keys used when authenticating a user.
77
+ mattr_accessor :request_keys
78
+ @@request_keys = []
79
+
80
+ # Keys that should be case-insensitive.
81
+ mattr_accessor :case_insensitive_keys
82
+ @@case_insensitive_keys = [ :email ]
83
+
84
+ # Keys that should have whitespace stripped.
85
+ mattr_accessor :strip_whitespace_keys
86
+ @@strip_whitespace_keys = []
87
+
88
+ # If http authentication is enabled by default.
89
+ mattr_accessor :http_authenticatable
90
+ @@http_authenticatable = false
91
+
92
+ # If http headers should be returned for ajax requests. True by default.
93
+ mattr_accessor :http_authenticatable_on_xhr
94
+ @@http_authenticatable_on_xhr = true
95
+
96
+ # If params authenticatable is enabled by default.
97
+ mattr_accessor :params_authenticatable
98
+ @@params_authenticatable = true
99
+
100
+ # The realm used in Http Basic Authentication.
101
+ mattr_accessor :http_authentication_realm
102
+ @@http_authentication_realm = "Application"
103
+
104
+ # Email regex used to validate email formats. It simply asserts that
105
+ # an one (and only one) @ exists in the given string. This is mainly
106
+ # to give user feedback and not to assert the e-mail validity.
107
+ mattr_accessor :email_regexp
108
+ @@email_regexp = /\A[^@]+@([^@\.]+\.)+[^@\.]+\z/
109
+
110
+ # Range validation for password length
111
+ mattr_accessor :password_length
112
+ @@password_length = 6..128
113
+
114
+ # The time the user will be remembered without asking for credentials again.
115
+ mattr_accessor :remember_for
116
+ @@remember_for = 2.weeks
117
+
118
+ # If true, extends the user's remember period when remembered via cookie.
119
+ mattr_accessor :extend_remember_period
120
+ @@extend_remember_period = false
121
+
122
+ # Time interval you can access your account before confirming your account.
123
+ mattr_accessor :allow_unconfirmed_access_for
124
+ @@allow_unconfirmed_access_for = 0.days
125
+
126
+ # Defines which key will be used when confirming an account.
127
+ mattr_accessor :confirmation_keys
128
+ @@confirmation_keys = [ :email ]
129
+
130
+ # Defines if email should be reconfirmable.
131
+ # False by default for backwards compatibility.
132
+ mattr_accessor :reconfirmable
133
+ @@reconfirmable = false
134
+
135
+ # Time interval to timeout the user session without activity.
136
+ mattr_accessor :timeout_in
137
+ @@timeout_in = 30.minutes
138
+
139
+ # Authentication token expiration on timeout
140
+ mattr_accessor :expire_auth_token_on_timeout
141
+ @@expire_auth_token_on_timeout = false
142
+
143
+ # Used to encrypt password. Please generate one with rake secret.
144
+ mattr_accessor :pepper
145
+ @@pepper = nil
146
+
147
+ # Used to define the password encryption algorithm.
148
+ mattr_accessor :encryptor
149
+ @@encryptor = nil
150
+
151
+ # Scoped views. Since it relies on fallbacks to render default views, it's
152
+ # turned off by default.
153
+ mattr_accessor :scoped_views
154
+ @@scoped_views = false
155
+
156
+ # Defines which strategy can be used to lock an account.
157
+ # Values: :failed_attempts, :none
158
+ mattr_accessor :lock_strategy
159
+ @@lock_strategy = :failed_attempts
160
+
161
+ # Defines which key will be used when locking and unlocking an account
162
+ mattr_accessor :unlock_keys
163
+ @@unlock_keys = [ :email ]
164
+
165
+ # Defines which strategy can be used to unlock an account.
166
+ # Values: :email, :time, :both
167
+ mattr_accessor :unlock_strategy
168
+ @@unlock_strategy = :both
169
+
170
+ # Number of authentication tries before locking an account
171
+ mattr_accessor :maximum_attempts
172
+ @@maximum_attempts = 20
173
+
174
+ # Time interval to unlock the account if :time is defined as unlock_strategy.
175
+ mattr_accessor :unlock_in
176
+ @@unlock_in = 1.hour
177
+
178
+ # Defines which key will be used when recovering the password for an account
179
+ mattr_accessor :reset_password_keys
180
+ @@reset_password_keys = [ :email ]
181
+
182
+ # Time interval you can reset your password with a reset password key
183
+ mattr_accessor :reset_password_within
184
+ @@reset_password_within = 6.hours
185
+
186
+ # The default scope which is used by warden.
187
+ mattr_accessor :default_scope
188
+ @@default_scope = nil
189
+
190
+ # Address which sends Devise e-mails.
191
+ mattr_accessor :mailer_sender
192
+ @@mailer_sender = nil
193
+
194
+ # Authentication token params key name of choice. E.g. /users/sign_in?some_key=...
195
+ mattr_accessor :token_authentication_key
196
+ @@token_authentication_key = :auth_token
197
+
198
+ # Skip session storage for the following strategies
199
+ mattr_accessor :skip_session_storage
200
+ @@skip_session_storage = []
201
+
202
+ # Which formats should be treated as navigational.
203
+ mattr_accessor :navigational_formats
204
+ @@navigational_formats = ["*/*", :html]
205
+
206
+ # When set to true, signing out a user signs out all other scopes.
207
+ mattr_accessor :sign_out_all_scopes
208
+ @@sign_out_all_scopes = true
209
+
210
+ # The default method used while signing out
211
+ mattr_accessor :sign_out_via
212
+ @@sign_out_via = :get
213
+
214
+ # The parent controller all Devise controllers inherits from.
215
+ # Defaults to ApplicationController. This should be set early
216
+ # in the initialization process and should be set to a string.
217
+ mattr_accessor :parent_controller
218
+ @@parent_controller = "ApplicationController"
219
+
220
+ # The router Devise should use to generate routes. Defaults
221
+ # to :main_app. Should be overriden by engines in order
222
+ # to provide custom routes.
223
+ mattr_accessor :router_name
224
+ @@router_name = nil
225
+
226
+ # DEPRECATION
227
+
228
+ def self.use_salt_as_remember_token=(value)
229
+ warn "\n[DEVISE] Devise.use_salt_as_remember_token is deprecated and has no effect. Please remove it.\n"
230
+ end
231
+
232
+ def self.apply_schema=(value)
233
+ warn "\n[DEVISE] Devise.apply_schema is deprecated and has no effect. Please remove it.\n"
234
+ end
235
+
236
+ # PRIVATE CONFIGURATION
237
+
238
+ # Store scopes mappings.
239
+ mattr_reader :mappings
240
+ @@mappings = ActiveSupport::OrderedHash.new
241
+
242
+ # Omniauth configurations.
243
+ mattr_reader :omniauth_configs
244
+ @@omniauth_configs = ActiveSupport::OrderedHash.new
245
+
246
+ # Define a set of modules that are called when a mapping is added.
247
+ mattr_reader :helpers
248
+ @@helpers = Set.new
249
+ @@helpers << Devise::Controllers::Helpers
250
+
251
+ # Private methods to interface with Warden.
252
+ mattr_accessor :warden_config
253
+ @@warden_config = nil
254
+ @@warden_config_block = nil
255
+
256
+ # When true, enter in paranoid mode to avoid user enumeration.
257
+ mattr_accessor :paranoid
258
+ @@paranoid = false
259
+
260
+ # Default way to setup Devise. Run rails generate devise_install to create
261
+ # a fresh initializer with all configuration values.
262
+ def self.setup
263
+ yield self
264
+ end
265
+
266
+ class Getter
267
+ def initialize name
268
+ @name = name
269
+ end
270
+
271
+ def get
272
+ ActiveSupport::Dependencies.constantize(@name)
273
+ end
274
+ end
275
+
276
+ def self.ref(arg)
277
+ if defined?(ActiveSupport::Dependencies::ClassCache)
278
+ ActiveSupport::Dependencies::reference(arg)
279
+ Getter.new(arg)
280
+ else
281
+ ActiveSupport::Dependencies.ref(arg)
282
+ end
283
+ end
284
+
285
+ def self.available_router_name
286
+ router_name || :main_app
287
+ end
288
+
289
+ def self.omniauth_providers
290
+ omniauth_configs.keys
291
+ end
292
+
293
+ # Get the mailer class from the mailer reference object.
294
+ def self.mailer
295
+ @@mailer_ref.get
296
+ end
297
+
298
+ # Set the mailer reference object to access the mailer.
299
+ def self.mailer=(class_name)
300
+ @@mailer_ref = ref(class_name)
301
+ end
302
+ self.mailer = "Devise::Mailer"
303
+
304
+ # Small method that adds a mapping to Devise.
305
+ def self.add_mapping(resource, options)
306
+ mapping = Devise::Mapping.new(resource, options)
307
+ @@mappings[mapping.name] = mapping
308
+ @@default_scope ||= mapping.name
309
+ @@helpers.each { |h| h.define_helpers(mapping) }
310
+ mapping
311
+ end
312
+
313
+ # Make Devise aware of an 3rd party Devise-module (like invitable). For convenience.
314
+ #
315
+ # == Options:
316
+ #
317
+ # +model+ - String representing the load path to a custom *model* for this module (to autoload.)
318
+ # +controller+ - Symbol representing the name of an exisiting or custom *controller* for this module.
319
+ # +route+ - Symbol representing the named *route* helper for this module.
320
+ # +strategy+ - Symbol representing if this module got a custom *strategy*.
321
+ #
322
+ # All values, except :model, accept also a boolean and will have the same name as the given module
323
+ # name.
324
+ #
325
+ # == Examples:
326
+ #
327
+ # Devise.add_module(:party_module)
328
+ # Devise.add_module(:party_module, :strategy => true, :controller => :sessions)
329
+ # Devise.add_module(:party_module, :model => 'party_module/model')
330
+ #
331
+ def self.add_module(module_name, options = {})
332
+ ALL << module_name
333
+ options.assert_valid_keys(:strategy, :model, :controller, :route, :no_input)
334
+
335
+ if strategy = options[:strategy]
336
+ strategy = (strategy == true ? module_name : strategy)
337
+ STRATEGIES[module_name] = strategy
338
+ end
339
+
340
+ if controller = options[:controller]
341
+ controller = (controller == true ? module_name : controller)
342
+ CONTROLLERS[module_name] = controller
343
+ end
344
+
345
+ NO_INPUT << strategy if options[:no_input]
346
+
347
+ if route = options[:route]
348
+ case route
349
+ when TrueClass
350
+ key, value = module_name, []
351
+ when Symbol
352
+ key, value = route, []
353
+ when Hash
354
+ key, value = route.keys.first, route.values.flatten
355
+ else
356
+ raise ArgumentError, ":route should be true, a Symbol or a Hash"
357
+ end
358
+
359
+ URL_HELPERS[key] ||= []
360
+ URL_HELPERS[key].concat(value)
361
+ URL_HELPERS[key].uniq!
362
+
363
+ ROUTES[module_name] = key
364
+ end
365
+
366
+ if options[:model]
367
+ path = (options[:model] == true ? "devise/models/#{module_name}" : options[:model])
368
+ camelized = ActiveSupport::Inflector.camelize(module_name.to_s)
369
+ Devise::Models.send(:autoload, camelized.to_sym, path)
370
+ end
371
+
372
+ Devise::Mapping.add_module module_name
373
+ end
374
+
375
+ # Sets warden configuration using a block that will be invoked on warden
376
+ # initialization.
377
+ #
378
+ # Devise.initialize do |config|
379
+ # config.allow_unconfirmed_access_for = 2.days
380
+ #
381
+ # config.warden do |manager|
382
+ # # Configure warden to use other strategies, like oauth.
383
+ # manager.oauth(:twitter)
384
+ # end
385
+ # end
386
+ def self.warden(&block)
387
+ @@warden_config_block = block
388
+ end
389
+
390
+ # Specify an omniauth provider.
391
+ #
392
+ # config.omniauth :github, APP_ID, APP_SECRET
393
+ #
394
+ def self.omniauth(provider, *args)
395
+ @@helpers << Devise::OmniAuth::UrlHelpers
396
+ config = Devise::OmniAuth::Config.new(provider, args)
397
+ @@omniauth_configs[config.strategy_name.to_sym] = config
398
+ end
399
+
400
+ # Include helpers in the given scope to AC and AV.
401
+ def self.include_helpers(scope)
402
+ ActiveSupport.on_load(:action_controller) do
403
+ include scope::Helpers if defined?(scope::Helpers)
404
+ include scope::UrlHelpers
405
+ end
406
+
407
+ ActiveSupport.on_load(:action_view) do
408
+ include scope::UrlHelpers
409
+ end
410
+ end
411
+
412
+ # Regenerates url helpers considering Devise.mapping
413
+ def self.regenerate_helpers!
414
+ Devise::Controllers::UrlHelpers.remove_helpers!
415
+ Devise::Controllers::UrlHelpers.generate_helpers!
416
+ end
417
+
418
+ # A method used internally to setup warden manager from the Rails initialize
419
+ # block.
420
+ def self.configure_warden! #:nodoc:
421
+ @@warden_configured ||= begin
422
+ warden_config.failure_app = Devise::Delegator.new
423
+ warden_config.default_scope = Devise.default_scope
424
+ warden_config.intercept_401 = false
425
+
426
+ Devise.mappings.each_value do |mapping|
427
+ warden_config.scope_defaults mapping.name, :strategies => mapping.strategies
428
+ end
429
+
430
+ @@warden_config_block.try :call, Devise.warden_config
431
+ true
432
+ end
433
+ end
434
+
435
+ # Generate a friendly string randomically to be used as token.
436
+ def self.friendly_token
437
+ SecureRandom.base64(15).tr('+/=lIO0', 'pqrsxyz')
438
+ end
439
+
440
+ # constant-time comparison algorithm to prevent timing attacks
441
+ def self.secure_compare(a, b)
442
+ return false if a.blank? || b.blank? || a.bytesize != b.bytesize
443
+ l = a.unpack "C#{a.bytesize}"
444
+
445
+ res = 0
446
+ b.each_byte { |byte| res |= byte ^ l.shift }
447
+ res == 0
448
+ end
449
+ end
450
+
451
+ require 'warden'
452
+ require 'devise/mapping'
453
+ require 'devise/models'
454
+ require 'devise/modules'
455
+ require 'devise/rails'