shingara-devise 0.4.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.
Files changed (99) hide show
  1. data/CHANGELOG.rdoc +119 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.rdoc +253 -0
  4. data/Rakefile +45 -0
  5. data/TODO +5 -0
  6. data/app/controllers/confirmations_controller.rb +33 -0
  7. data/app/controllers/passwords_controller.rb +41 -0
  8. data/app/controllers/sessions_controller.rb +33 -0
  9. data/app/models/devise_mailer.rb +53 -0
  10. data/app/views/confirmations/new.html.erb +16 -0
  11. data/app/views/devise_mailer/confirmation_instructions.html.erb +5 -0
  12. data/app/views/devise_mailer/reset_password_instructions.html.erb +8 -0
  13. data/app/views/passwords/edit.html.erb +20 -0
  14. data/app/views/passwords/new.html.erb +16 -0
  15. data/app/views/sessions/new.html.erb +23 -0
  16. data/generators/devise/USAGE +5 -0
  17. data/generators/devise/devise_generator.rb +25 -0
  18. data/generators/devise/lib/route_devise.rb +32 -0
  19. data/generators/devise/templates/README +22 -0
  20. data/generators/devise/templates/migration.rb +20 -0
  21. data/generators/devise/templates/model.rb +5 -0
  22. data/generators/devise_install/USAGE +3 -0
  23. data/generators/devise_install/devise_install_generator.rb +9 -0
  24. data/generators/devise_install/templates/devise.rb +47 -0
  25. data/generators/devise_views/USAGE +3 -0
  26. data/generators/devise_views/devise_views_generator.rb +24 -0
  27. data/init.rb +2 -0
  28. data/lib/devise/controllers/filters.rb +111 -0
  29. data/lib/devise/controllers/helpers.rb +130 -0
  30. data/lib/devise/controllers/url_helpers.rb +49 -0
  31. data/lib/devise/encryptors/authlogic_sha512.rb +28 -0
  32. data/lib/devise/encryptors/clearance_sha1.rb +26 -0
  33. data/lib/devise/encryptors/restful_authentication_sha1.rb +29 -0
  34. data/lib/devise/encryptors/sha1.rb +34 -0
  35. data/lib/devise/encryptors/sha512.rb +34 -0
  36. data/lib/devise/failure.rb +36 -0
  37. data/lib/devise/hooks/confirmable.rb +11 -0
  38. data/lib/devise/hooks/rememberable.rb +27 -0
  39. data/lib/devise/locales/en.yml +18 -0
  40. data/lib/devise/mapping.rb +120 -0
  41. data/lib/devise/migrations.rb +57 -0
  42. data/lib/devise/models/authenticatable.rb +87 -0
  43. data/lib/devise/models/confirmable.rb +156 -0
  44. data/lib/devise/models/recoverable.rb +88 -0
  45. data/lib/devise/models/rememberable.rb +95 -0
  46. data/lib/devise/models/validatable.rb +36 -0
  47. data/lib/devise/models.rb +110 -0
  48. data/lib/devise/orm/mongo_mapper.rb +26 -0
  49. data/lib/devise/rails/routes.rb +109 -0
  50. data/lib/devise/rails/warden_compat.rb +26 -0
  51. data/lib/devise/rails.rb +17 -0
  52. data/lib/devise/strategies/authenticatable.rb +46 -0
  53. data/lib/devise/strategies/base.rb +24 -0
  54. data/lib/devise/strategies/rememberable.rb +35 -0
  55. data/lib/devise/version.rb +3 -0
  56. data/lib/devise/warden.rb +20 -0
  57. data/lib/devise.rb +130 -0
  58. data/test/controllers/filters_test.rb +103 -0
  59. data/test/controllers/helpers_test.rb +55 -0
  60. data/test/controllers/url_helpers_test.rb +47 -0
  61. data/test/devise_test.rb +72 -0
  62. data/test/encryptors_test.rb +28 -0
  63. data/test/failure_test.rb +34 -0
  64. data/test/integration/authenticatable_test.rb +195 -0
  65. data/test/integration/confirmable_test.rb +89 -0
  66. data/test/integration/recoverable_test.rb +131 -0
  67. data/test/integration/rememberable_test.rb +65 -0
  68. data/test/mailers/confirmation_instructions_test.rb +59 -0
  69. data/test/mailers/reset_password_instructions_test.rb +62 -0
  70. data/test/mapping_test.rb +101 -0
  71. data/test/models/authenticatable_test.rb +130 -0
  72. data/test/models/confirmable_test.rb +237 -0
  73. data/test/models/recoverable_test.rb +141 -0
  74. data/test/models/rememberable_test.rb +130 -0
  75. data/test/models/validatable_test.rb +99 -0
  76. data/test/models_test.rb +111 -0
  77. data/test/rails_app/app/controllers/admins_controller.rb +6 -0
  78. data/test/rails_app/app/controllers/application_controller.rb +10 -0
  79. data/test/rails_app/app/controllers/home_controller.rb +4 -0
  80. data/test/rails_app/app/controllers/users_controller.rb +7 -0
  81. data/test/rails_app/app/helpers/application_helper.rb +3 -0
  82. data/test/rails_app/app/models/account.rb +3 -0
  83. data/test/rails_app/app/models/admin.rb +3 -0
  84. data/test/rails_app/app/models/organizer.rb +3 -0
  85. data/test/rails_app/app/models/user.rb +3 -0
  86. data/test/rails_app/config/boot.rb +110 -0
  87. data/test/rails_app/config/environment.rb +41 -0
  88. data/test/rails_app/config/environments/development.rb +17 -0
  89. data/test/rails_app/config/environments/production.rb +28 -0
  90. data/test/rails_app/config/environments/test.rb +28 -0
  91. data/test/rails_app/config/initializers/new_rails_defaults.rb +21 -0
  92. data/test/rails_app/config/initializers/session_store.rb +15 -0
  93. data/test/rails_app/config/routes.rb +18 -0
  94. data/test/routes_test.rb +79 -0
  95. data/test/support/assertions_helper.rb +22 -0
  96. data/test/support/integration_tests_helper.rb +66 -0
  97. data/test/support/model_tests_helper.rb +51 -0
  98. data/test/test_helper.rb +40 -0
  99. metadata +161 -0
@@ -0,0 +1,95 @@
1
+ require 'digest/sha1'
2
+ require 'devise/hooks/rememberable'
3
+ require 'devise/strategies/rememberable'
4
+
5
+ module Devise
6
+ module Models
7
+
8
+ # Rememberable manages generating and clearing token for remember the user
9
+ # from a saved cookie. Rememberable also has utility methods for dealing
10
+ # with serializing the user into the cookie and back from the cookie, trying
11
+ # to lookup the record based on the saved information.
12
+ # You probably wouldn't use rememberable methods directly, they are used
13
+ # mostly internally for handling the remember token.
14
+ #
15
+ # Configuration:
16
+ #
17
+ # remember_for: the time you want the user will be remembered without
18
+ # asking for credentials. After this time the user will be
19
+ # blocked and will have to enter his credentials again.
20
+ # This configuration is also used to calculate the expires
21
+ # time for the cookie created to remember the user.
22
+ # By default remember_for is 2.weeks.
23
+ #
24
+ # Examples:
25
+ #
26
+ # User.find(1).remember_me! # regenerating the token
27
+ # User.find(1).forget_me! # clearing the token
28
+ #
29
+ # # generating info to put into cookies
30
+ # User.serialize_into_cookie(user)
31
+ #
32
+ # # lookup the user based on the incoming cookie information
33
+ # User.serialize_from_cookie(cookie_string)
34
+ module Rememberable
35
+
36
+ def self.included(base)
37
+ base.class_eval do
38
+ extend ClassMethods
39
+
40
+ # Remember me option available in after_authentication hook.
41
+ attr_accessor :remember_me
42
+ end
43
+ end
44
+
45
+ # Generate a new remember token and save the record without validations.
46
+ def remember_me!
47
+ self.remember_token = friendly_token
48
+ self.remember_created_at = Time.now.utc
49
+ save(false)
50
+ end
51
+
52
+ # Removes the remember token only if it exists, and save the record
53
+ # without validations.
54
+ def forget_me!
55
+ if remember_token?
56
+ self.remember_token = nil
57
+ self.remember_created_at = nil
58
+ save(false)
59
+ end
60
+ end
61
+
62
+ # Checks whether the incoming token matches or not with the record token.
63
+ def valid_remember_token?(token)
64
+ remember_token? && !remember_expired? && remember_token == token
65
+ end
66
+
67
+ # Remember token should be expired if expiration time not overpass now.
68
+ def remember_expired?
69
+ remember_expires_at <= Time.now.utc
70
+ end
71
+
72
+ # Remember token expires at created time + remember_for configuration
73
+ def remember_expires_at
74
+ remember_created_at + remember_for
75
+ end
76
+
77
+ module ClassMethods
78
+
79
+ # Create the cookie key using the record id and remember_token
80
+ def serialize_into_cookie(rememberable)
81
+ "#{rememberable.id}::#{rememberable.remember_token}"
82
+ end
83
+
84
+ # Recreate the user based on the stored cookie
85
+ def serialize_from_cookie(cookie)
86
+ rememberable_id, remember_token = cookie.split('::')
87
+ rememberable = find_by_id(rememberable_id) if rememberable_id
88
+ rememberable if rememberable.try(:valid_remember_token?, remember_token)
89
+ end
90
+ end
91
+
92
+ Devise::Models.config(self, :remember_for)
93
+ end
94
+ end
95
+ end
@@ -0,0 +1,36 @@
1
+ module Devise
2
+ module Models
3
+
4
+ # Validatable creates all needed validations for a user email and password.
5
+ # It's optional, given you may want to create the validations by yourself.
6
+ # Automatically validate if the email is present, unique and it's format is
7
+ # valid. Also tests presence of password, confirmation and length
8
+ module Validatable
9
+
10
+ # Email regex used to validate email formats. Retrieved from authlogic.
11
+ EMAIL_REGEX = /\A[\w\.%\+\-]+@(?:[A-Z0-9\-]+\.)+(?:[A-Z]{2,4}|museum|travel)\z/i
12
+
13
+ def self.included(base)
14
+ base.class_eval do
15
+
16
+ validates_presence_of :email
17
+ validates_uniqueness_of :email, :allow_blank => true
18
+ validates_format_of :email, :with => EMAIL_REGEX, :allow_blank => true
19
+
20
+ validates_presence_of :password, :if => :password_required?
21
+ validates_confirmation_of :password, :if => :password_required?
22
+ validates_length_of :password, :within => 6..20, :allow_blank => true, :if => :password_required?
23
+ end
24
+ end
25
+
26
+ protected
27
+
28
+ # Checks whether a password is needed or not. For validations only.
29
+ # Passwords are always required if it's a new record, or if the password
30
+ # or confirmation are being set somewhere.
31
+ def password_required?
32
+ new_record? || !password.nil? || !password_confirmation.nil?
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,110 @@
1
+ module Devise
2
+ module Models
3
+ # Creates configuration values for Devise and for the given module.
4
+ #
5
+ # Devise::Models.config(Devise::Authenticable, :stretches, 10)
6
+ #
7
+ # The line above creates:
8
+ #
9
+ # 1) An accessor called Devise.stretches, which value is used by default;
10
+ #
11
+ # 2) Some class methods for your model Model.stretches and Model.stretches=
12
+ # which have higher priority than Devise.stretches;
13
+ #
14
+ # 3) And an instance method stretches.
15
+ #
16
+ # To add the class methods you need to have a module ClassMethods defined
17
+ # inside the given class.
18
+ #
19
+ def self.config(mod, accessor) #:nodoc:
20
+ mod.class_eval <<-METHOD, __FILE__, __LINE__
21
+ def #{accessor}
22
+ self.class.#{accessor}
23
+ end
24
+ METHOD
25
+
26
+ mod.const_get(:ClassMethods).class_eval <<-METHOD, __FILE__, __LINE__
27
+ def #{accessor}
28
+ if defined?(@#{accessor})
29
+ @#{accessor}
30
+ elsif superclass.respond_to?(:#{accessor})
31
+ superclass.#{accessor}
32
+ else
33
+ Devise.#{accessor}
34
+ end
35
+ end
36
+
37
+ def #{accessor}=(value)
38
+ @#{accessor} = value
39
+ end
40
+ METHOD
41
+ end
42
+
43
+ # Shortcut method for including all devise modules inside your model.
44
+ # You can give some extra options while declaring devise in your model:
45
+ #
46
+ # * except: convenient option that allows you to add all devise modules,
47
+ # removing only the modules you setup here:
48
+ #
49
+ # devise :all, :except => :rememberable
50
+ #
51
+ # You can also give the following configuration values in a hash: :pepper,
52
+ # :stretches, :confirm_within and :remember_for. Please check your Devise
53
+ # initialiazer for a complete description on those values.
54
+ #
55
+ # Examples:
56
+ #
57
+ # # include only authenticatable module (default)
58
+ # devise
59
+ #
60
+ # # include authenticatable + confirmable modules
61
+ # devise :confirmable
62
+ #
63
+ # # include authenticatable + recoverable modules
64
+ # devise :recoverable
65
+ #
66
+ # # include authenticatable + rememberable modules
67
+ # devise :rememberable
68
+ #
69
+ # # include authenticatable + validatable modules
70
+ # devise :validatable
71
+ #
72
+ # # include authenticatable + confirmable + recoverable + rememberable + validatable
73
+ # devise :confirmable, :recoverable, :rememberable, :validatable
74
+ #
75
+ # # shortcut to include all modules (same as above)
76
+ # devise :all
77
+ #
78
+ # # include all except recoverable
79
+ # devise :all, :except => :recoverable
80
+ #
81
+ def devise(*modules)
82
+ options = modules.extract_options!
83
+
84
+ modules = Devise::ALL if modules.include?(:all)
85
+ modules -= Array(options.delete(:except))
86
+ modules = [:authenticatable] | modules
87
+
88
+ modules.each do |m|
89
+ devise_modules << m.to_sym
90
+ include Devise::Models.const_get(m.to_s.classify)
91
+ end
92
+
93
+ # Convert new keys to methods which overwrites Devise defaults
94
+ options.each { |key, value| send(:"#{key}=", value) }
95
+
96
+ if Devise.orm == 'MongoMapper'
97
+ modules.each do |mod|
98
+ send(mod)
99
+ end
100
+ end
101
+
102
+ end
103
+
104
+ # Stores all modules included inside the model, so we are able to verify
105
+ # which routes are needed.
106
+ def devise_modules
107
+ @devise_modules ||= []
108
+ end
109
+ end
110
+ end
@@ -0,0 +1,26 @@
1
+ module Devise
2
+ module Orm
3
+ module MongoMapper
4
+ def authenticatable
5
+ key :email, String
6
+ key :encrypted_password, String
7
+ key :password_salt, String
8
+ end
9
+
10
+ def confirmable
11
+ key :confirmation_token, String
12
+ key :confirmed_at, DateTime
13
+ key :confirmation_sent_at, DateTime
14
+ end
15
+
16
+ def recoverable
17
+ key :reset_password_token, String
18
+ end
19
+
20
+ def rememberable
21
+ key :remember_token, String
22
+ key :remember_created_at, DateTime
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,109 @@
1
+ module ActionController::Routing
2
+ class RouteSet #:nodoc:
3
+
4
+ # Ensure Devise modules are included only after loading routes, because we
5
+ # need devise_for mappings already declared to create magic filters and
6
+ # helpers.
7
+ def load_routes_with_devise!
8
+ load_routes_without_devise!
9
+
10
+ ActionController::Base.send :include, Devise::Controllers::Filters
11
+ ActionController::Base.send :include, Devise::Controllers::UrlHelpers
12
+
13
+ ActionView::Base.send :include, Devise::Controllers::UrlHelpers
14
+ end
15
+ alias_method_chain :load_routes!, :devise
16
+
17
+ class Mapper #:doc:
18
+ # Includes devise_for method for routes. This method is responsible to
19
+ # generate all needed routes for devise, based on what modules you have
20
+ # defined in your model.
21
+ # Examples: Let's say you have an User model configured to use
22
+ # authenticatable, confirmable and recoverable modules. After creating this
23
+ # inside your routes:
24
+ #
25
+ # map.devise_for :users
26
+ #
27
+ # this method is going to look inside your User model and create the
28
+ # needed routes:
29
+ #
30
+ # # Session routes for Authenticatable (default)
31
+ # new_user_session GET /users/sign_in {:controller=>"sessions", :action=>"new"}
32
+ # user_session POST /users/sign_in {:controller=>"sessions", :action=>"create"}
33
+ # destroy_user_session GET /users/sign_out {:controller=>"sessions", :action=>"destroy"}
34
+ #
35
+ # # Password routes for Recoverable, if User model has :recoverable configured
36
+ # new_user_password GET /users/password/new(.:format) {:controller=>"passwords", :action=>"new"}
37
+ # edit_user_password GET /users/password/edit(.:format) {:controller=>"passwords", :action=>"edit"}
38
+ # user_password PUT /users/password(.:format) {:controller=>"passwords", :action=>"update"}
39
+ # POST /users/password(.:format) {:controller=>"passwords", :action=>"create"}
40
+ #
41
+ # # Confirmation routes for Confirmable, if User model has :confirmable configured
42
+ # new_user_confirmation GET /users/confirmation/new(.:format) {:controller=>"confirmations", :action=>"new"}
43
+ # user_confirmation GET /users/confirmation(.:format) {:controller=>"confirmations", :action=>"show"}
44
+ # POST /users/confirmation(.:format) {:controller=>"confirmations", :action=>"create"}
45
+ #
46
+ # You can configure your routes with some options:
47
+ # * :class_name => setup a different class to be looked up by devise, if it cannot be correctly find by the route name.
48
+ #
49
+ # map.devise_for :users, :class_name => 'Account'
50
+ #
51
+ # * :as => allows you to setup path name that will be used, as rails routes does. The following route configuration would setup your route as /accounts instead of /users:
52
+ #
53
+ # map.devise_for :users, :as => 'accounts'
54
+ #
55
+ # * :singular => setup the name used to create named routes. By default, for a :users key, it is going to be the singularized version, :user. To configure a named route like account_session_path instead of user_session_path just do:
56
+ #
57
+ # map.devise_for :users, :singular => :account
58
+ #
59
+ # * :path_names => configure different path names to overwrite defaults :sign_in, :sign_out, :password and :confirmation.
60
+ #
61
+ # map.devise_for :users, :path_names => { :sign_in => 'login', :sign_out => 'logout', :password => 'secret', :confirmation => 'verification' }
62
+ #
63
+ # * :path_prefix => the path prefix to be used in all routes.
64
+ #
65
+ # map.devise_for :users, :path_prefix => "/:locale"
66
+ #
67
+ # If you are using a dynamic prefix, like :locale above, you need to configure default_url_options through Devise. You can do that in config/initializers/devise.rb or setting a Devise.default_url_options:
68
+ #
69
+ # Devise.default_url_options do
70
+ # { :locale => I18n.locale }
71
+ # end
72
+ #
73
+ def devise_for(*resources)
74
+ options = resources.extract_options!
75
+
76
+ resources.map!(&:to_sym)
77
+ resources.each do |resource|
78
+ mapping = Devise::Mapping.new(resource, options)
79
+ Devise.mappings[mapping.name] = mapping
80
+
81
+ with_options(:path_prefix => mapping.raw_path, :name_prefix => "#{mapping.name}_") do |routes|
82
+ mapping.for.each do |strategy|
83
+ send(strategy, routes, mapping) if self.respond_to?(strategy, true)
84
+ end
85
+ end
86
+ end
87
+ end
88
+
89
+ protected
90
+
91
+ def authenticatable(routes, mapping)
92
+ routes.with_options(:controller => 'sessions', :name_prefix => nil) do |session|
93
+ session.send(:"new_#{mapping.name}_session", mapping.path_names[:sign_in], :action => 'new', :conditions => { :method => :get })
94
+ session.send(:"#{mapping.name}_session", mapping.path_names[:sign_in], :action => 'create', :conditions => { :method => :post })
95
+ session.send(:"destroy_#{mapping.name}_session", mapping.path_names[:sign_out], :action => 'destroy', :conditions => { :method => :get })
96
+ end
97
+ end
98
+
99
+ def recoverable(routes, mapping)
100
+ routes.resource :password, :only => [:new, :create, :edit, :update], :as => mapping.path_names[:password]
101
+ end
102
+
103
+ def confirmable(routes, mapping)
104
+ routes.resource :confirmation, :only => [:new, :create, :show], :as => mapping.path_names[:confirmation]
105
+ end
106
+
107
+ end
108
+ end
109
+ end
@@ -0,0 +1,26 @@
1
+ # Taken from RailsWarden, thanks to Hassox. http://github.com/hassox/rails_warden
2
+ module Warden::Mixins::Common
3
+ # Gets the rails request object by default if it's available
4
+ def request
5
+ return @request if @request
6
+ if env['action_controller.rescue.request']
7
+ @request = env['action_controller.rescue.request']
8
+ else
9
+ Rack::Request.new(env)
10
+ end
11
+ end
12
+
13
+ def raw_session
14
+ request.session
15
+ end
16
+
17
+ def reset_session!
18
+ raw_session.inspect # why do I have to inspect it to get it to clear?
19
+ raw_session.clear
20
+ end
21
+
22
+ # Proxy to request cookies
23
+ def cookies
24
+ request.cookies
25
+ end
26
+ end
@@ -0,0 +1,17 @@
1
+ require 'devise/rails/routes'
2
+ require 'devise/rails/warden_compat'
3
+
4
+ Rails.configuration.after_initialize do
5
+ if defined?(ActiveRecord)
6
+ ActiveRecord::Base.extend Devise::Models
7
+ ActiveRecord::ConnectionAdapters::TableDefinition.send :include, Devise::Migrations
8
+ end
9
+
10
+ # Adds Warden Manager to Rails middleware stack, configuring default devise
11
+ # strategy and also the failure app.
12
+ Rails.configuration.middleware.use Warden::Manager do |manager|
13
+ Devise.configure_warden_manager(manager)
14
+ end
15
+
16
+ I18n.load_path.unshift File.expand_path(File.join(File.dirname(__FILE__), 'locales', 'en.yml'))
17
+ end
@@ -0,0 +1,46 @@
1
+ module Devise
2
+ module Strategies
3
+ # Default strategy for signing in a user, based on his email and password.
4
+ # Redirects to sign_in page if it's not authenticated
5
+ class Authenticatable < Devise::Strategies::Base
6
+
7
+ # Authenticate a user based on email and password params, returning to warden
8
+ # success and the authenticated user if everything is okay. Otherwise redirect
9
+ # to sign in page.
10
+ #
11
+ # Please notice the semantic difference between calling fail! and throw :warden.
12
+ # The first does not perform any action when calling authenticate, just
13
+ # when authenticate! is invoked. The second always perform the action.
14
+ def authenticate!
15
+ if valid_attributes? && resource = mapping.to.authenticate(attributes)
16
+ success!(resource)
17
+ else
18
+ store_location
19
+ fail!(:unauthenticated)
20
+ end
21
+ end
22
+
23
+ private
24
+
25
+ # Find the attributes for the current mapping.
26
+ def attributes
27
+ @attributes ||= params[scope]
28
+ end
29
+
30
+ # Check for the right keys.
31
+ def valid_attributes?
32
+ attributes && attributes[:email].present? && attributes[:password].present?
33
+ end
34
+
35
+ # Stores requested uri to redirect the user after signing in. We cannot use
36
+ # scoped session provided by warden here, since the user is not authenticated
37
+ # yet, but we still need to store the uri based on scope, so different scopes
38
+ # would never use the same uri to redirect.
39
+ def store_location
40
+ session[:"#{mapping.name}.return_to"] = request.request_uri if request.get?
41
+ end
42
+ end
43
+ end
44
+ end
45
+
46
+ Warden::Strategies.add(:authenticatable, Devise::Strategies::Authenticatable)
@@ -0,0 +1,24 @@
1
+ module Devise
2
+ module Strategies
3
+ # Base strategy for Devise. Responsible for verifying correct scope and
4
+ # mapping.
5
+ class Base < Warden::Strategies::Base
6
+
7
+ # Validate strategy. By default will raise an error if no scope or an
8
+ # invalid mapping is found.
9
+ def valid?
10
+ mapping.for.include?(self.class.name.split("::").last.underscore.to_sym)
11
+ end
12
+
13
+ # Checks if a valid scope was given for devise and find mapping based on
14
+ # this scope.
15
+ def mapping
16
+ @mapping ||= begin
17
+ raise "You need to give a scope for Devise authentication" unless scope
18
+ raise "You need to give a valid Devise mapping" unless mapping = Devise.mappings[scope]
19
+ mapping
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,35 @@
1
+ module Devise
2
+ module Strategies
3
+ # Remember the user through the remember token. This strategy is responsible
4
+ # to verify whether there is a cookie with the remember token, and to
5
+ # recreate the user from this cookie if it exists. Must be called *before*
6
+ # authenticatable.
7
+ class Rememberable < Devise::Strategies::Base
8
+
9
+ # A valid strategy for rememberable needs a remember token in the cookies.
10
+ def valid?
11
+ super && remember_me_cookie.present?
12
+ end
13
+
14
+ # To authenticate a user we deserialize the cookie and attempt finding
15
+ # the record in the database. If the attempt fails, we pass to another
16
+ # strategy handle the authentication.
17
+ def authenticate!
18
+ if resource = mapping.to.serialize_from_cookie(remember_me_cookie)
19
+ success!(resource)
20
+ else
21
+ pass
22
+ end
23
+ end
24
+
25
+ private
26
+
27
+ # Accessor for remember cookie
28
+ def remember_me_cookie
29
+ cookies['remember_token']
30
+ end
31
+ end
32
+ end
33
+ end
34
+
35
+ Warden::Strategies.add(:rememberable, Devise::Strategies::Rememberable)
@@ -0,0 +1,3 @@
1
+ module Devise
2
+ VERSION = "0.4.3".freeze
3
+ end
@@ -0,0 +1,20 @@
1
+ begin
2
+ require 'warden'
3
+ rescue
4
+ gem 'warden'
5
+ require 'warden'
6
+ end
7
+
8
+ # Session Serialization in. This block determines how the user will be stored
9
+ # in the session. If you're using a complex object like an ActiveRecord model,
10
+ # it is not a good idea to store the complete object. An ID is sufficient.
11
+ Warden::Manager.serialize_into_session{ |user| [user.class, user.id] }
12
+
13
+ # Session Serialization out. This block gets the user out of the session.
14
+ # It should be the reverse of serializing the object into the session
15
+ Warden::Manager.serialize_from_session do |klass, id|
16
+ klass.find_by_id(id)
17
+ end
18
+
19
+ # Setup devise strategies for Warden
20
+ require 'devise/strategies/base'
data/lib/devise.rb ADDED
@@ -0,0 +1,130 @@
1
+ module Devise
2
+ ALL = [:authenticatable, :confirmable, :recoverable, :rememberable, :validatable].freeze
3
+
4
+ # Maps controller names to devise modules
5
+ CONTROLLERS = {
6
+ :sessions => :authenticatable,
7
+ :passwords => :recoverable,
8
+ :confirmations => :confirmable
9
+ }.freeze
10
+
11
+ STRATEGIES = [:rememberable, :authenticatable].freeze
12
+ TRUE_VALUES = [true, 1, '1', 't', 'T', 'true', 'TRUE'].freeze
13
+
14
+ # Maps the messages types that comes from warden to a flash type.
15
+ # This hash is not frozen, so you can add your messages as well.
16
+ FLASH_MESSAGES = {
17
+ :unauthenticated => :success,
18
+ :unconfirmed => :failure
19
+ }
20
+
21
+ # Declare encryptors length which are used in migrations.
22
+ ENCRYPTORS_LENGTH = {
23
+ :sha1 => 40,
24
+ :sha512 => 128,
25
+ :clearance_sha1 => 40,
26
+ :restful_authentication_sha1 => 40,
27
+ :authlogic_sha512 => 128
28
+ }
29
+
30
+ # Used to encrypt password. Please generate one with rake secret
31
+ mattr_accessor :pepper
32
+ @@pepper = nil
33
+
34
+ # The number of times to encrypt password.
35
+ mattr_accessor :stretches
36
+ @@stretches = 10
37
+
38
+ # Time interval where the remember me token is valid.
39
+ mattr_accessor :remember_for
40
+ @@remember_for = 2.weeks
41
+
42
+ # Time interval you can access your account before confirming your account.
43
+ mattr_accessor :confirm_within
44
+ @@confirm_within = 0.days
45
+
46
+ # Used to define the password encryption algorithm.
47
+ def self.encryptor=(value)
48
+ @@encryptor = if value.is_a?(Symbol)
49
+ ::Devise::Encryptors.const_get(value.to_s.classify)
50
+ else
51
+ value
52
+ end
53
+ end
54
+ mattr_reader :encryptor
55
+ @@encryptor = ::Devise::Encryptors::Sha1
56
+
57
+ # Store scopes mappings.
58
+ mattr_accessor :mappings
59
+ @@mappings = {}
60
+
61
+ @@orm = 'active_record'
62
+
63
+ # ORM choice
64
+ def self.orm()
65
+ @@orm
66
+ end
67
+
68
+ def self.orm=(type_orm)
69
+ if type_orm == 'MongoMapper'
70
+ MongoMapper::Document::ClassMethods.send(:include, Devise::Models)
71
+ require 'devise/orm/mongo_mapper'
72
+ MongoMapper::Document::ClassMethods.send(:include, Devise::Orm::MongoMapper)
73
+ end
74
+ @@orm = type_orm
75
+ end
76
+
77
+
78
+ class << self
79
+ # Default way to setup Devise. Run script/generate devise_install to create
80
+ # a fresh initializer with all configuration values.
81
+ def setup
82
+ yield self
83
+ end
84
+
85
+ def mail_sender=(value) #:nodoc:
86
+ ActiveSupport::Deprecation.warn "Devise.mail_sender= is deprecated, use Devise.mailer_sender instead"
87
+ DeviseMailer.sender = value
88
+ end
89
+
90
+ # Sets the sender in DeviseMailer.
91
+ def mailer_sender=(value)
92
+ DeviseMailer.sender = value
93
+ end
94
+ alias :sender= :mailer_sender=
95
+
96
+ # Sets warden configuration using a block that will be invoked on warden
97
+ # initialization.
98
+ #
99
+ # Devise.initialize do |config|
100
+ # config.confirm_within = 2.days
101
+ #
102
+ # config.warden do |manager|
103
+ # # Configure warden to use other strategies, like oauth.
104
+ # manager.oauth(:twitter)
105
+ # end
106
+ # end
107
+ def warden(&block)
108
+ @warden_config = block
109
+ end
110
+
111
+ # Configure default url options to be used within Devise and ActionController.
112
+ def default_url_options(&block)
113
+ Devise::Mapping.metaclass.send :define_method, :default_url_options, &block
114
+ end
115
+
116
+ # A method used internally to setup warden manager from the Rails initialize
117
+ # block.
118
+ def configure_warden_manager(manager) #:nodoc:
119
+ manager.default_strategies *Devise::STRATEGIES
120
+ manager.failure_app = Devise::Failure
121
+ manager.silence_missing_strategies!
122
+
123
+ # If the user provided a warden hook, call it now.
124
+ @warden_config.try :call, manager
125
+ end
126
+ end
127
+ end
128
+
129
+ require 'devise/warden'
130
+ require 'devise/rails'