devise 1.0.11 → 1.1.pre
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of devise might be problematic. Click here for more details.
- data/CHANGELOG.rdoc +6 -72
- data/Gemfile +18 -0
- data/README.rdoc +51 -46
- data/Rakefile +5 -4
- data/app/controllers/{confirmations_controller.rb → devise/confirmations_controller.rb} +2 -2
- data/app/controllers/{passwords_controller.rb → devise/passwords_controller.rb} +4 -3
- data/app/controllers/{registrations_controller.rb → devise/registrations_controller.rb} +11 -7
- data/app/controllers/{sessions_controller.rb → devise/sessions_controller.rb} +11 -8
- data/app/controllers/{unlocks_controller.rb → devise/unlocks_controller.rb} +2 -10
- data/app/models/devise/mailer.rb +55 -0
- data/app/views/{confirmations → devise/confirmations}/new.html.erb +1 -1
- data/app/views/devise/mailer/confirmation_instructions.html.erb +5 -0
- data/app/views/devise/mailer/reset_password_instructions.html.erb +8 -0
- data/app/views/devise/mailer/unlock_instructions.html.erb +7 -0
- data/app/views/{passwords → devise/passwords}/edit.html.erb +1 -1
- data/app/views/{passwords → devise/passwords}/new.html.erb +1 -1
- data/app/views/{registrations → devise/registrations}/edit.html.erb +1 -1
- data/app/views/{registrations → devise/registrations}/new.html.erb +1 -1
- data/app/views/{sessions → devise/sessions}/new.html.erb +1 -1
- data/app/views/{shared/_devise_links.erb → devise/shared/_links.erb} +0 -0
- data/app/views/{unlocks → devise/unlocks}/new.html.erb +1 -1
- data/{lib/devise → config}/locales/en.yml +7 -1
- data/lib/devise.rb +6 -29
- data/lib/devise/controllers/helpers.rb +16 -43
- data/lib/devise/controllers/internal_helpers.rb +10 -36
- data/lib/devise/controllers/scoped_views.rb +35 -0
- data/lib/devise/failure_app.rb +7 -14
- data/lib/devise/hooks/rememberable.rb +3 -6
- data/lib/devise/hooks/trackable.rb +1 -1
- data/lib/devise/mapping.rb +17 -18
- data/lib/devise/models.rb +4 -20
- data/lib/devise/models/{database_authenticatable.rb → authenticatable.rb} +16 -28
- data/lib/devise/models/confirmable.rb +25 -23
- data/lib/devise/models/http_authenticatable.rb +3 -7
- data/lib/devise/models/lockable.rb +40 -35
- data/lib/devise/models/recoverable.rb +4 -8
- data/lib/devise/models/rememberable.rb +6 -9
- data/lib/devise/models/timeoutable.rb +1 -3
- data/lib/devise/models/token_authenticatable.rb +4 -5
- data/lib/devise/models/validatable.rb +10 -1
- data/lib/devise/orm/mongo_mapper.rb +10 -23
- data/lib/devise/rails.rb +11 -9
- data/lib/devise/rails/routes.rb +113 -107
- data/lib/devise/rails/warden_compat.rb +3 -41
- data/lib/devise/schema.rb +13 -21
- data/lib/devise/strategies/{database_authenticatable.rb → authenticatable.rb} +3 -3
- data/lib/devise/strategies/http_authenticatable.rb +4 -22
- data/lib/devise/test_helpers.rb +1 -8
- data/lib/devise/version.rb +1 -1
- data/lib/generators/devise/devise_generator.rb +57 -0
- data/{generators → lib/generators}/devise/templates/migration.rb +1 -1
- data/lib/generators/devise_install/devise_install_generator.rb +25 -0
- data/{generators → lib/generators}/devise_install/templates/README +4 -8
- data/{generators → lib/generators}/devise_install/templates/devise.rb +0 -3
- data/lib/generators/devise_views/devise_views_generator.rb +11 -0
- data/test/controllers/helpers_test.rb +15 -9
- data/test/devise_test.rb +1 -6
- data/test/encryptors_test.rb +0 -3
- data/test/failure_app_test.rb +6 -1
- data/test/integration/authenticatable_test.rb +25 -85
- data/test/integration/http_authenticatable_test.rb +2 -10
- data/test/integration/lockable_test.rb +3 -22
- data/test/integration/recoverable_test.rb +1 -1
- data/test/integration/registerable_test.rb +31 -36
- data/test/integration/rememberable_test.rb +6 -24
- data/test/integration/token_authenticatable_test.rb +2 -4
- data/test/integration/trackable_test.rb +1 -1
- data/test/mailers/confirmation_instructions_test.rb +4 -10
- data/test/mailers/unlock_instructions_test.rb +1 -1
- data/test/mapping_test.rb +12 -24
- data/test/models/authenticatable_test.rb +3 -3
- data/test/models/confirmable_test.rb +29 -29
- data/test/models/http_authenticatable_test.rb +19 -0
- data/test/models/lockable_test.rb +45 -44
- data/test/models/recoverable_test.rb +7 -7
- data/test/models/rememberable_test.rb +7 -10
- data/test/models/validatable_test.rb +19 -24
- data/test/models_test.rb +2 -16
- data/test/orm/active_record.rb +3 -4
- data/test/orm/mongo_mapper.rb +2 -10
- data/test/rails_app/app/active_record/admin.rb +1 -1
- data/test/rails_app/app/active_record/user.rb +3 -3
- data/test/rails_app/app/controllers/application_controller.rb +1 -7
- data/test/rails_app/app/controllers/sessions_controller.rb +6 -0
- data/test/rails_app/app/controllers/users_controller.rb +0 -4
- data/test/rails_app/app/mongo_mapper/admin.rb +4 -7
- data/test/rails_app/app/mongo_mapper/user.rb +5 -8
- data/test/rails_app/config/application.rb +32 -0
- data/test/rails_app/config/boot.rb +7 -108
- data/test/rails_app/config/environment.rb +4 -41
- data/test/rails_app/config/environments/development.rb +15 -13
- data/test/rails_app/config/environments/production.rb +25 -20
- data/test/rails_app/config/environments/test.rb +23 -22
- data/test/rails_app/config/initializers/backtrace_silencers.rb +7 -0
- data/test/rails_app/config/initializers/cookie_verification_secret.rb +7 -0
- data/test/rails_app/config/initializers/devise.rb +0 -3
- data/test/rails_app/config/initializers/session_store.rb +2 -2
- data/test/rails_app/config/routes.rb +17 -21
- data/test/routes_test.rb +30 -47
- data/test/support/{assertions_helper.rb → assertions.rb} +0 -15
- data/test/support/{tests_helper.rb → helpers.rb} +16 -3
- data/test/support/{integration_tests_helper.rb → integration.rb} +8 -4
- data/test/support/webrat/integrations/rails.rb +31 -0
- data/test/test_helper.rb +8 -7
- data/test/test_helpers_test.rb +9 -9
- metadata +53 -128
- data/app/models/devise_mailer.rb +0 -68
- data/app/views/devise_mailer/confirmation_instructions.html.erb +0 -5
- data/app/views/devise_mailer/reset_password_instructions.html.erb +0 -8
- data/app/views/devise_mailer/unlock_instructions.html.erb +0 -7
- data/generators/devise/USAGE +0 -5
- data/generators/devise/devise_generator.rb +0 -15
- data/generators/devise/lib/route_devise.rb +0 -32
- data/generators/devise/templates/model.rb +0 -9
- data/generators/devise_install/USAGE +0 -3
- data/generators/devise_install/devise_install_generator.rb +0 -15
- data/generators/devise_views/USAGE +0 -3
- data/generators/devise_views/devise_views_generator.rb +0 -21
- data/rails/init.rb +0 -2
- data/test/integration/rack_middleware_test.rb +0 -47
- data/test/rails_app/config/initializers/new_rails_defaults.rb +0 -24
data/app/models/devise_mailer.rb
DELETED
@@ -1,68 +0,0 @@
|
|
1
|
-
class DeviseMailer < ::ActionMailer::Base
|
2
|
-
extend Devise::Controllers::InternalHelpers::ScopedViews
|
3
|
-
|
4
|
-
# Deliver confirmation instructions when the user is created or its email is
|
5
|
-
# updated, and also when confirmation is manually requested
|
6
|
-
def confirmation_instructions(record)
|
7
|
-
setup_mail(record, :confirmation_instructions)
|
8
|
-
end
|
9
|
-
|
10
|
-
# Deliver reset password instructions when manually requested
|
11
|
-
def reset_password_instructions(record)
|
12
|
-
setup_mail(record, :reset_password_instructions)
|
13
|
-
end
|
14
|
-
|
15
|
-
def unlock_instructions(record)
|
16
|
-
setup_mail(record, :unlock_instructions)
|
17
|
-
end
|
18
|
-
|
19
|
-
private
|
20
|
-
|
21
|
-
# Configure default email options
|
22
|
-
def setup_mail(record, key)
|
23
|
-
scope_name = Devise::Mapping.find_scope!(record)
|
24
|
-
mapping = Devise.mappings[scope_name]
|
25
|
-
|
26
|
-
subject translate(mapping, key)
|
27
|
-
from mailer_sender(mapping)
|
28
|
-
recipients record.email
|
29
|
-
sent_on Time.now
|
30
|
-
content_type Devise.mailer_content_type
|
31
|
-
body render_with_scope(key, mapping, mapping.name => record, :resource => record)
|
32
|
-
end
|
33
|
-
|
34
|
-
def render_with_scope(key, mapping, assigns)
|
35
|
-
if self.class.scoped_views
|
36
|
-
begin
|
37
|
-
render :file => "devise_mailer/#{mapping.as}/#{key}", :body => assigns
|
38
|
-
rescue ActionView::MissingTemplate
|
39
|
-
render :file => "devise_mailer/#{key}", :body => assigns
|
40
|
-
end
|
41
|
-
else
|
42
|
-
render :file => "devise_mailer/#{key}", :body => assigns
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
def mailer_sender(mapping)
|
47
|
-
if Devise.mailer_sender.is_a?(Proc)
|
48
|
-
block_args = mapping.name if Devise.mailer_sender.arity > 0
|
49
|
-
Devise.mailer_sender.call(block_args)
|
50
|
-
else
|
51
|
-
Devise.mailer_sender
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
# Setup subject namespaced by model. It means you're able to setup your
|
56
|
-
# messages using specific resource scope, or provide a default one.
|
57
|
-
# Example (i18n locale file):
|
58
|
-
#
|
59
|
-
# en:
|
60
|
-
# devise:
|
61
|
-
# mailer:
|
62
|
-
# confirmation_instructions: '...'
|
63
|
-
# user:
|
64
|
-
# confirmation_instructions: '...'
|
65
|
-
def translate(mapping, key)
|
66
|
-
I18n.t(:"#{mapping.name}.#{key}", :scope => [:devise, :mailer], :default => key)
|
67
|
-
end
|
68
|
-
end
|
@@ -1,8 +0,0 @@
|
|
1
|
-
<p>Hello <%= @resource.email %>!</p>
|
2
|
-
|
3
|
-
<p>Someone has requested a link to change your password, and you can do this through the link below.</p>
|
4
|
-
|
5
|
-
<p><%= link_to 'Change my password', edit_password_url(@resource, :reset_password_token => @resource.reset_password_token) %></p>
|
6
|
-
|
7
|
-
<p>If you didn't request this, please ignore this email.</p>
|
8
|
-
<p>Your password won't change until you access the link above and create a new one.</p>
|
@@ -1,7 +0,0 @@
|
|
1
|
-
<p>Hello <%= @resource.email %>!</p>
|
2
|
-
|
3
|
-
<p>Your account has been locked due to an excessive amount of unsuccessful sign in attempts.</p>
|
4
|
-
|
5
|
-
<p>Click the link below to unlock your account:</p>
|
6
|
-
|
7
|
-
<p><%= link_to 'Unlock my account', unlock_url(@resource, :unlock_token => @resource.unlock_token) %></p>
|
data/generators/devise/USAGE
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + "/lib/route_devise.rb")
|
2
|
-
|
3
|
-
class DeviseGenerator < Rails::Generator::NamedBase
|
4
|
-
|
5
|
-
def manifest
|
6
|
-
record do |m|
|
7
|
-
m.directory(File.join('app', 'models', class_path))
|
8
|
-
m.template 'model.rb', File.join('app', 'models', "#{file_path}.rb")
|
9
|
-
|
10
|
-
m.migration_template 'migration.rb', 'db/migrate', :migration_file_name => "devise_create_#{table_name}"
|
11
|
-
m.route_devise table_name
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
end
|
@@ -1,32 +0,0 @@
|
|
1
|
-
module Rails
|
2
|
-
module Generator
|
3
|
-
module Commands
|
4
|
-
class Create < Base
|
5
|
-
|
6
|
-
# Create devise route. Based on route_resources
|
7
|
-
def route_devise(*resources)
|
8
|
-
resource_list = resources.map { |r| r.to_sym.inspect }.join(', ')
|
9
|
-
sentinel = 'ActionController::Routing::Routes.draw do |map|'
|
10
|
-
|
11
|
-
logger.route "map.devise_for #{resource_list}"
|
12
|
-
unless options[:pretend]
|
13
|
-
gsub_file 'config/routes.rb', /(#{Regexp.escape(sentinel)})/mi do |match|
|
14
|
-
"#{match}\n map.devise_for #{resource_list}\n"
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
class Destroy < RewindBase
|
21
|
-
|
22
|
-
# Destroy devise route. Based on route_resources
|
23
|
-
def route_devise(*resources)
|
24
|
-
resource_list = resources.map { |r| r.to_sym.inspect }.join(', ')
|
25
|
-
look_for = "\n map.devise_for #{resource_list}\n"
|
26
|
-
logger.route "map.devise_for #{resource_list}"
|
27
|
-
gsub_file 'config/routes.rb', /(#{look_for})/mi, ''
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
@@ -1,9 +0,0 @@
|
|
1
|
-
class <%= class_name %> < ActiveRecord::Base
|
2
|
-
# Include default devise modules. Others available are:
|
3
|
-
# :http_authenticatable, :token_authenticatable, :confirmable, :lockable, :timeoutable and :activatable
|
4
|
-
devise :registerable, :database_authenticatable, :recoverable,
|
5
|
-
:rememberable, :trackable, :validatable
|
6
|
-
|
7
|
-
# Setup accessible (or protected) attributes for your model
|
8
|
-
attr_accessible :email, :password, :password_confirmation
|
9
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
class DeviseInstallGenerator < Rails::Generator::Base
|
2
|
-
|
3
|
-
def manifest
|
4
|
-
record do |m|
|
5
|
-
m.directory "config/initializers"
|
6
|
-
m.template "devise.rb", "config/initializers/devise.rb"
|
7
|
-
|
8
|
-
m.directory "config/locales"
|
9
|
-
m.file "../../../lib/devise/locales/en.yml", "config/locales/devise.en.yml"
|
10
|
-
|
11
|
-
m.readme "README"
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
end
|
@@ -1,21 +0,0 @@
|
|
1
|
-
class DeviseViewsGenerator < Rails::Generator::Base
|
2
|
-
|
3
|
-
def initialize(*args)
|
4
|
-
super
|
5
|
-
@source_root = options[:source] || File.join(spec.path, '..', '..')
|
6
|
-
end
|
7
|
-
|
8
|
-
def manifest
|
9
|
-
record do |m|
|
10
|
-
m.directory "app/views"
|
11
|
-
|
12
|
-
Dir[File.join(@source_root, "app", "views", "**/*.erb")].each do |file|
|
13
|
-
file = file.gsub(@source_root, "")[1..-1]
|
14
|
-
|
15
|
-
m.directory File.dirname(file)
|
16
|
-
m.file file, file
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
end
|
data/rails/init.rb
DELETED
@@ -1,47 +0,0 @@
|
|
1
|
-
require "test/test_helper"
|
2
|
-
require "rack/test"
|
3
|
-
|
4
|
-
class RackMiddlewareTest < Test::Unit::TestCase
|
5
|
-
include Rack::Test::Methods
|
6
|
-
|
7
|
-
def app
|
8
|
-
ActionController::Dispatcher.new
|
9
|
-
end
|
10
|
-
|
11
|
-
def warden
|
12
|
-
last_request.env['warden']
|
13
|
-
end
|
14
|
-
|
15
|
-
def with_custom_strategy
|
16
|
-
get '/'
|
17
|
-
|
18
|
-
Warden::Strategies.add(:custom_test) do
|
19
|
-
def valid?
|
20
|
-
true
|
21
|
-
end
|
22
|
-
|
23
|
-
def authenticate!
|
24
|
-
custom! [599, {
|
25
|
-
"X-Custom-Response" => "Custom response test",
|
26
|
-
"Content-type" => "text/plain"
|
27
|
-
}, "Custom response test"]
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
#ActionController::Dispatcher.middleware.use CustomStrategyInterceptor
|
32
|
-
default_strategies = warden.manager.config.default_strategies
|
33
|
-
warden.manager.config.default_strategies :custom_test
|
34
|
-
yield
|
35
|
-
warden.manager.config.default_strategies default_strategies
|
36
|
-
end
|
37
|
-
|
38
|
-
def test_custom_strategy_response
|
39
|
-
with_custom_strategy do
|
40
|
-
post('/users/sign_in')
|
41
|
-
|
42
|
-
assert_equal 599, last_response.status
|
43
|
-
assert_equal "Custom response test", last_response.body
|
44
|
-
assert_equal "Custom response test", last_response.headers["X-Custom-Response"]
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
@@ -1,24 +0,0 @@
|
|
1
|
-
# Be sure to restart your server when you modify this file.
|
2
|
-
|
3
|
-
# These settings change the behavior of Rails 2 apps and will be defaults
|
4
|
-
# for Rails 3. You can remove this initializer when Rails 3 is released.
|
5
|
-
|
6
|
-
if defined?(ActiveRecord)
|
7
|
-
# Include Active Record class name as root for JSON serialized output.
|
8
|
-
ActiveRecord::Base.include_root_in_json = true
|
9
|
-
|
10
|
-
# Store the full class name (including module namespace) in STI type column.
|
11
|
-
ActiveRecord::Base.store_full_sti_class = true
|
12
|
-
end
|
13
|
-
|
14
|
-
ActionController::Routing.generate_best_match = false
|
15
|
-
|
16
|
-
# Use ISO 8601 format for JSON serialized times and dates.
|
17
|
-
ActiveSupport.use_standard_json_time_format = true
|
18
|
-
|
19
|
-
# Don't escape HTML entities in JSON, leave that for the #json_escape helper.
|
20
|
-
# if you're including raw json in an HTML page.
|
21
|
-
ActiveSupport.escape_html_entities_in_json = false
|
22
|
-
|
23
|
-
# Clean up silencers
|
24
|
-
Rails.backtrace_cleaner.remove_silencers!
|