sorcery 0.6.1 → 0.7.1
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.
- data/Gemfile +1 -0
- data/Gemfile.lock +52 -45
- data/README.rdoc +26 -54
- data/Rakefile +26 -0
- data/VERSION +1 -1
- data/lib/generators/sorcery/USAGE +22 -0
- data/lib/generators/sorcery/install_generator.rb +71 -0
- data/lib/{sorcery/initializers → generators/sorcery/templates}/initializer.rb +82 -61
- data/lib/generators/sorcery/templates/migration/activity_logging.rb +17 -0
- data/lib/generators/sorcery/templates/migration/brute_force_protection.rb +11 -0
- data/lib/generators/{sorcery_migration/templates → sorcery/templates/migration}/core.rb +3 -3
- data/lib/generators/{sorcery_migration/templates → sorcery/templates/migration}/external.rb +1 -1
- data/lib/generators/sorcery/templates/migration/remember_me.rb +15 -0
- data/lib/generators/sorcery/templates/migration/reset_password.rb +17 -0
- data/lib/generators/sorcery/templates/migration/user_activation.rb +17 -0
- data/lib/sorcery/controller/submodules/activity_logging.rb +23 -9
- data/lib/sorcery/controller/submodules/brute_force_protection.rb +2 -1
- data/lib/sorcery/controller/submodules/external/protocols/certs/ca-bundle.crt +5182 -0
- data/lib/sorcery/controller/submodules/external/protocols/oauth2.rb +27 -8
- data/lib/sorcery/controller/submodules/external/providers/github.rb +80 -0
- data/lib/sorcery/controller/submodules/external/providers/twitter.rb +5 -0
- data/lib/sorcery/controller/submodules/external.rb +10 -3
- data/lib/sorcery/controller/submodules/http_basic_auth.rb +1 -1
- data/lib/sorcery/controller/submodules/remember_me.rb +15 -5
- data/lib/sorcery/controller/submodules/session_timeout.rb +1 -1
- data/lib/sorcery/controller.rb +59 -38
- data/lib/sorcery/crypto_providers/aes256.rb +7 -3
- data/lib/sorcery/engine.rb +1 -0
- data/lib/sorcery/model/adapters/active_record.rb +2 -1
- data/lib/sorcery/model/adapters/mongo_mapper.rb +49 -0
- data/lib/sorcery/model/adapters/mongoid.rb +7 -2
- data/lib/sorcery/model/submodules/brute_force_protection.rb +13 -3
- data/lib/sorcery/model/submodules/remember_me.rb +9 -2
- data/lib/sorcery/model/submodules/reset_password.rb +11 -2
- data/lib/sorcery/model/submodules/user_activation.rb +13 -2
- data/lib/sorcery/model/temporary_token.rb +5 -0
- data/lib/sorcery/model.rb +34 -15
- data/lib/sorcery/test_helpers/internal/rails.rb +1 -1
- data/lib/sorcery/test_helpers/rails.rb +2 -2
- data/lib/sorcery.rb +6 -7
- data/sorcery.gemspec +86 -203
- data/spec/Gemfile.lock +23 -12
- data/spec/README.md +31 -0
- data/spec/rails3/Gemfile +3 -1
- data/spec/rails3/Gemfile.lock +45 -28
- data/spec/rails3/app/controllers/application_controller.rb +40 -22
- data/spec/rails3/app/views/application/index.html.erb +17 -0
- data/spec/rails3/spec/controller_activity_logging_spec.rb +23 -0
- data/spec/rails3/spec/controller_oauth2_spec.rb +59 -16
- data/spec/rails3/spec/controller_remember_me_spec.rb +37 -6
- data/spec/rails3/spec/controller_spec.rb +30 -0
- data/spec/rails3/spec/integration_spec.rb +23 -0
- data/spec/rails3/spec/spec_helper.rb +6 -5
- data/spec/rails3_mongo_mapper/.gitignore +4 -0
- data/spec/rails3_mongo_mapper/.rspec +1 -0
- data/spec/{sinatra_modular → rails3_mongo_mapper}/Gemfile +5 -5
- data/spec/rails3_mongo_mapper/Gemfile.lock +159 -0
- data/spec/{sinatra → rails3_mongo_mapper}/Rakefile +3 -3
- data/spec/rails3_mongo_mapper/app/controllers/application_controller.rb +108 -0
- data/spec/rails3_mongo_mapper/app/helpers/application_helper.rb +2 -0
- data/spec/rails3_mongo_mapper/app/models/authentication.rb +6 -0
- data/spec/rails3_mongo_mapper/app/models/user.rb +5 -0
- data/spec/rails3_mongo_mapper/app/views/layouts/application.html.erb +14 -0
- data/spec/rails3_mongo_mapper/app/views/sorcery_mailer/activation_email.html.erb +17 -0
- data/spec/rails3_mongo_mapper/app/views/sorcery_mailer/activation_email.text.erb +9 -0
- data/spec/rails3_mongo_mapper/app/views/sorcery_mailer/activation_success_email.html.erb +17 -0
- data/spec/rails3_mongo_mapper/app/views/sorcery_mailer/activation_success_email.text.erb +9 -0
- data/spec/rails3_mongo_mapper/app/views/sorcery_mailer/reset_password_email.html.erb +16 -0
- data/spec/rails3_mongo_mapper/app/views/sorcery_mailer/reset_password_email.text.erb +8 -0
- data/spec/rails3_mongo_mapper/config/application.rb +51 -0
- data/spec/rails3_mongo_mapper/config/boot.rb +13 -0
- data/spec/rails3_mongo_mapper/config/environment.rb +5 -0
- data/spec/rails3_mongo_mapper/config/environments/development.rb +30 -0
- data/spec/rails3_mongo_mapper/config/environments/in_memory.rb +0 -0
- data/spec/rails3_mongo_mapper/config/environments/production.rb +49 -0
- data/spec/rails3_mongo_mapper/config/environments/test.rb +35 -0
- data/spec/rails3_mongo_mapper/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/rails3_mongo_mapper/config/initializers/inflections.rb +10 -0
- data/spec/rails3_mongo_mapper/config/initializers/mime_types.rb +5 -0
- data/spec/rails3_mongo_mapper/config/initializers/mongo.rb +2 -0
- data/spec/rails3_mongo_mapper/config/initializers/secret_token.rb +7 -0
- data/spec/rails3_mongo_mapper/config/initializers/session_store.rb +8 -0
- data/spec/rails3_mongo_mapper/config/locales/en.yml +5 -0
- data/spec/rails3_mongo_mapper/config/routes.rb +59 -0
- data/spec/rails3_mongo_mapper/config.ru +4 -0
- data/spec/rails3_mongo_mapper/db/schema.rb +23 -0
- data/spec/rails3_mongo_mapper/db/seeds.rb +7 -0
- data/spec/rails3_mongo_mapper/lib/tasks/.gitkeep +0 -0
- data/spec/rails3_mongo_mapper/public/404.html +26 -0
- data/spec/rails3_mongo_mapper/public/422.html +26 -0
- data/spec/rails3_mongo_mapper/public/500.html +26 -0
- data/spec/rails3_mongo_mapper/public/favicon.ico +0 -0
- data/spec/rails3_mongo_mapper/public/images/rails.png +0 -0
- data/spec/rails3_mongo_mapper/public/javascripts/application.js +2 -0
- data/spec/rails3_mongo_mapper/public/javascripts/controls.js +965 -0
- data/spec/rails3_mongo_mapper/public/javascripts/dragdrop.js +974 -0
- data/spec/rails3_mongo_mapper/public/javascripts/effects.js +1123 -0
- data/spec/rails3_mongo_mapper/public/javascripts/prototype.js +6001 -0
- data/spec/rails3_mongo_mapper/public/javascripts/rails.js +175 -0
- data/spec/rails3_mongo_mapper/public/robots.txt +5 -0
- data/spec/rails3_mongo_mapper/public/stylesheets/.gitkeep +0 -0
- data/spec/rails3_mongo_mapper/script/rails +6 -0
- data/spec/{sinatra → rails3_mongo_mapper}/spec/controller_spec.rb +51 -41
- data/spec/rails3_mongo_mapper/spec/spec_helper.orig.rb +27 -0
- data/spec/rails3_mongo_mapper/spec/spec_helper.rb +55 -0
- data/spec/rails3_mongo_mapper/spec/user_activation_spec.rb +9 -0
- data/spec/rails3_mongo_mapper/spec/user_activity_logging_spec.rb +8 -0
- data/spec/rails3_mongo_mapper/spec/user_brute_force_protection_spec.rb +8 -0
- data/spec/rails3_mongo_mapper/spec/user_oauth_spec.rb +8 -0
- data/spec/rails3_mongo_mapper/spec/user_remember_me_spec.rb +8 -0
- data/spec/rails3_mongo_mapper/spec/user_reset_password_spec.rb +8 -0
- data/spec/rails3_mongo_mapper/spec/user_spec.rb +37 -0
- data/spec/rails3_mongo_mapper/vendor/plugins/.gitkeep +0 -0
- data/spec/rails3_mongoid/Gemfile +1 -1
- data/spec/rails3_mongoid/Gemfile.lock +41 -34
- data/spec/rails3_mongoid/spec/controller_activity_logging_spec.rb +98 -0
- data/spec/rails3_mongoid/spec/controller_spec.rb +130 -0
- data/spec/rails3_mongoid/spec/user_spec.rb +1 -0
- data/spec/shared_examples/user_remember_me_shared_examples.rb +1 -0
- data/spec/shared_examples/user_shared_examples.rb +36 -8
- metadata +128 -234
- data/lib/generators/sorcery_migration/sorcery_migration_generator.rb +0 -24
- data/lib/generators/sorcery_migration/templates/activity_logging.rb +0 -17
- data/lib/generators/sorcery_migration/templates/brute_force_protection.rb +0 -11
- data/lib/generators/sorcery_migration/templates/remember_me.rb +0 -15
- data/lib/generators/sorcery_migration/templates/reset_password.rb +0 -13
- data/lib/generators/sorcery_migration/templates/user_activation.rb +0 -17
- data/lib/sorcery/controller/adapters/sinatra.rb +0 -104
- data/lib/sorcery/sinatra.rb +0 -4
- data/lib/sorcery/test_helpers/internal/sinatra.rb +0 -74
- data/lib/sorcery/test_helpers/internal/sinatra_modular.rb +0 -74
- data/lib/sorcery/test_helpers/sinatra.rb +0 -88
- data/spec/rails3/Rakefile.unused +0 -7
- data/spec/rails3/public/index.html +0 -239
- data/spec/sinatra/Gemfile +0 -15
- data/spec/sinatra/Gemfile.lock +0 -117
- data/spec/sinatra/authentication.rb +0 -3
- data/spec/sinatra/db/migrate/activation/20101224223622_add_activation_to_users.rb +0 -17
- data/spec/sinatra/db/migrate/activity_logging/20101224223624_add_activity_logging_to_users.rb +0 -17
- data/spec/sinatra/db/migrate/brute_force_protection/20101224223626_add_brute_force_protection_to_users.rb +0 -11
- data/spec/sinatra/db/migrate/core/20101224223620_create_users.rb +0 -16
- data/spec/sinatra/db/migrate/external/20101224223628_create_authentications.rb +0 -14
- data/spec/sinatra/db/migrate/remember_me/20101224223623_add_remember_me_token_to_users.rb +0 -15
- data/spec/sinatra/db/migrate/reset_password/20101224223622_add_reset_password_to_users.rb +0 -13
- data/spec/sinatra/filters.rb +0 -27
- data/spec/sinatra/modular.rb +0 -157
- data/spec/sinatra/myapp.rb +0 -133
- data/spec/sinatra/spec/controller_activity_logging_spec.rb +0 -85
- data/spec/sinatra/spec/controller_brute_force_protection_spec.rb +0 -70
- data/spec/sinatra/spec/controller_http_basic_auth_spec.rb +0 -53
- data/spec/sinatra/spec/controller_oauth2_spec.rb +0 -99
- data/spec/sinatra/spec/controller_oauth_spec.rb +0 -100
- data/spec/sinatra/spec/controller_remember_me_spec.rb +0 -64
- data/spec/sinatra/spec/controller_session_timeout_spec.rb +0 -57
- data/spec/sinatra/spec/spec_helper.rb +0 -45
- data/spec/sinatra/user.rb +0 -6
- data/spec/sinatra/views/test_login.erb +0 -4
- data/spec/sinatra_modular/Gemfile.lock +0 -117
- data/spec/sinatra_modular/Rakefile +0 -11
- data/spec/sinatra_modular/authentication.rb +0 -3
- data/spec/sinatra_modular/db/migrate/activation/20101224223622_add_activation_to_users.rb +0 -17
- data/spec/sinatra_modular/db/migrate/activity_logging/20101224223624_add_activity_logging_to_users.rb +0 -17
- data/spec/sinatra_modular/db/migrate/brute_force_protection/20101224223626_add_brute_force_protection_to_users.rb +0 -11
- data/spec/sinatra_modular/db/migrate/core/20101224223620_create_users.rb +0 -16
- data/spec/sinatra_modular/db/migrate/external/20101224223628_create_authentications.rb +0 -14
- data/spec/sinatra_modular/db/migrate/remember_me/20101224223623_add_remember_me_token_to_users.rb +0 -15
- data/spec/sinatra_modular/db/migrate/reset_password/20101224223622_add_reset_password_to_users.rb +0 -13
- data/spec/sinatra_modular/filters.rb +0 -27
- data/spec/sinatra_modular/modular.rb +0 -157
- data/spec/sinatra_modular/myapp.rb +0 -133
- data/spec/sinatra_modular/sorcery_mailer.rb +0 -25
- data/spec/sinatra_modular/spec_modular/controller_activity_logging_spec.rb +0 -85
- data/spec/sinatra_modular/spec_modular/controller_brute_force_protection_spec.rb +0 -70
- data/spec/sinatra_modular/spec_modular/controller_http_basic_auth_spec.rb +0 -53
- data/spec/sinatra_modular/spec_modular/controller_oauth2_spec.rb +0 -99
- data/spec/sinatra_modular/spec_modular/controller_oauth_spec.rb +0 -100
- data/spec/sinatra_modular/spec_modular/controller_remember_me_spec.rb +0 -64
- data/spec/sinatra_modular/spec_modular/controller_session_timeout_spec.rb +0 -57
- data/spec/sinatra_modular/spec_modular/controller_spec.rb +0 -116
- data/spec/sinatra_modular/spec_modular/spec.opts +0 -2
- data/spec/sinatra_modular/spec_modular/spec_helper.rb +0 -51
- data/spec/sinatra_modular/user.rb +0 -6
- data/spec/sinatra_modular/views/test_login.erb +0 -4
- /data/spec/{sinatra → rails3_mongo_mapper/app/mailers}/sorcery_mailer.rb +0 -0
- /data/spec/{sinatra → rails3_mongo_mapper}/spec/spec.opts +0 -0
|
@@ -45,8 +45,10 @@ module Sorcery
|
|
|
45
45
|
|
|
46
46
|
base.sorcery_config.after_config << :validate_mailer_defined
|
|
47
47
|
base.sorcery_config.after_config << :define_reset_password_mongoid_fields if defined?(Mongoid) and base.ancestors.include?(Mongoid::Document)
|
|
48
|
+
if defined?(MongoMapper) and base.ancestors.include?(MongoMapper::Document)
|
|
49
|
+
base.sorcery_config.after_config << :define_reset_password_mongo_mapper_fields
|
|
50
|
+
end
|
|
48
51
|
|
|
49
|
-
base.send(:include, TemporaryToken)
|
|
50
52
|
base.send(:include, InstanceMethods)
|
|
51
53
|
|
|
52
54
|
end
|
|
@@ -73,6 +75,13 @@ module Sorcery
|
|
|
73
75
|
field sorcery_config.reset_password_token_expires_at_attribute_name, :type => DateTime
|
|
74
76
|
field sorcery_config.reset_password_email_sent_at_attribute_name, :type => DateTime
|
|
75
77
|
end
|
|
78
|
+
|
|
79
|
+
def define_reset_password_mongo_mapper_fields
|
|
80
|
+
key sorcery_config.reset_password_token_attribute_name, String
|
|
81
|
+
# no DateTime in MM
|
|
82
|
+
key sorcery_config.reset_password_token_expires_at_attribute_name, Time
|
|
83
|
+
key sorcery_config.reset_password_email_sent_at_attribute_name, Time
|
|
84
|
+
end
|
|
76
85
|
end
|
|
77
86
|
|
|
78
87
|
module InstanceMethods
|
|
@@ -81,7 +90,7 @@ module Sorcery
|
|
|
81
90
|
config = sorcery_config
|
|
82
91
|
# hammering protection
|
|
83
92
|
return if config.reset_password_time_between_emails && self.send(config.reset_password_email_sent_at_attribute_name) && self.send(config.reset_password_email_sent_at_attribute_name) > config.reset_password_time_between_emails.ago.utc
|
|
84
|
-
self.send(:"#{config.reset_password_token_attribute_name}=", generate_random_token)
|
|
93
|
+
self.send(:"#{config.reset_password_token_attribute_name}=", TemporaryToken.generate_random_token)
|
|
85
94
|
self.send(:"#{config.reset_password_token_expires_at_attribute_name}=", Time.now.utc + config.reset_password_expiration_period) if config.reset_password_expiration_period
|
|
86
95
|
self.send(:"#{config.reset_password_email_sent_at_attribute_name}=", Time.now.utc)
|
|
87
96
|
self.class.transaction do
|
|
@@ -52,10 +52,12 @@ module Sorcery
|
|
|
52
52
|
|
|
53
53
|
base.sorcery_config.after_config << :validate_mailer_defined
|
|
54
54
|
base.sorcery_config.after_config << :define_user_activation_mongoid_fields if defined?(Mongoid) and base.ancestors.include?(Mongoid::Document)
|
|
55
|
+
if defined?(MongoMapper) and base.ancestors.include?(MongoMapper::Document)
|
|
56
|
+
base.sorcery_config.after_config << :define_user_activation_mongo_mapper_fields
|
|
57
|
+
end
|
|
55
58
|
base.sorcery_config.before_authenticate << :prevent_non_active_login
|
|
56
59
|
|
|
57
60
|
base.extend(ClassMethods)
|
|
58
|
-
base.send(:include, TemporaryToken)
|
|
59
61
|
base.send(:include, InstanceMethods)
|
|
60
62
|
|
|
61
63
|
|
|
@@ -85,6 +87,15 @@ module Sorcery
|
|
|
85
87
|
field sorcery_config.activation_token_expires_at_attribute_name, :type => DateTime
|
|
86
88
|
end
|
|
87
89
|
end
|
|
90
|
+
|
|
91
|
+
def define_user_activation_mongo_mapper_fields
|
|
92
|
+
self.class_eval do
|
|
93
|
+
key sorcery_config.activation_state_attribute_name, String
|
|
94
|
+
key sorcery_config.activation_token_attribute_name, String
|
|
95
|
+
# no DateTime in MM
|
|
96
|
+
key sorcery_config.activation_token_expires_at_attribute_name, Time
|
|
97
|
+
end
|
|
98
|
+
end
|
|
88
99
|
end
|
|
89
100
|
|
|
90
101
|
module InstanceMethods
|
|
@@ -101,7 +112,7 @@ module Sorcery
|
|
|
101
112
|
|
|
102
113
|
def setup_activation
|
|
103
114
|
config = sorcery_config
|
|
104
|
-
generated_activation_token = generate_random_token
|
|
115
|
+
generated_activation_token = TemporaryToken.generate_random_token
|
|
105
116
|
self.send(:"#{config.activation_token_attribute_name}=", generated_activation_token)
|
|
106
117
|
self.send(:"#{config.activation_state_attribute_name}=", "pending")
|
|
107
118
|
self.send(:"#{config.activation_token_expires_at_attribute_name}=", Time.now.utc + config.activation_token_expiration_period) if config.activation_token_expiration_period
|
|
@@ -8,6 +8,11 @@ module Sorcery
|
|
|
8
8
|
base.extend(ClassMethods)
|
|
9
9
|
end
|
|
10
10
|
|
|
11
|
+
# Random code, used for salt and temporary tokens.
|
|
12
|
+
def self.generate_random_token
|
|
13
|
+
Digest::SHA1.hexdigest( Time.now.to_s.split(//).sort_by {rand}.join )
|
|
14
|
+
end
|
|
15
|
+
|
|
11
16
|
module ClassMethods
|
|
12
17
|
def load_from_token(token, token_attr_name, token_expiration_date_attr)
|
|
13
18
|
return nil if token.blank?
|
data/lib/sorcery/model.rb
CHANGED
|
@@ -3,8 +3,8 @@ module Sorcery
|
|
|
3
3
|
# It should be included into the ORM base class.
|
|
4
4
|
# In the case of Rails this is usually ActiveRecord (actually, in that case, the plugin does this automatically).
|
|
5
5
|
#
|
|
6
|
-
# When included it defines a single method: '
|
|
7
|
-
# to the class.
|
|
6
|
+
# When included it defines a single method: 'authenticates_with_sorcery!'
|
|
7
|
+
# which when called adds the other capabilities to the class.
|
|
8
8
|
# This method is also the place to configure the plugin in the Model layer.
|
|
9
9
|
module Model
|
|
10
10
|
def self.included(klass)
|
|
@@ -15,6 +15,7 @@ module Sorcery
|
|
|
15
15
|
self.class_eval do
|
|
16
16
|
extend ClassMethods # included here, before submodules, so they can be overriden by them.
|
|
17
17
|
include InstanceMethods
|
|
18
|
+
include TemporaryToken
|
|
18
19
|
end
|
|
19
20
|
|
|
20
21
|
include_required_submodules!
|
|
@@ -23,6 +24,7 @@ module Sorcery
|
|
|
23
24
|
::Sorcery::Controller::Config.user_config.tap{|blk| blk.call(@sorcery_config) if blk}
|
|
24
25
|
|
|
25
26
|
init_mongoid_support! if defined?(Mongoid) and self.ancestors.include?(Mongoid::Document)
|
|
27
|
+
init_mongo_mapper_support! if defined?(MongoMapper) and self.ancestors.include?(MongoMapper::Document)
|
|
26
28
|
|
|
27
29
|
init_orm_hooks!
|
|
28
30
|
|
|
@@ -52,20 +54,38 @@ module Sorcery
|
|
|
52
54
|
# using 1.8.x hash syntax to perserve compatibility.
|
|
53
55
|
def init_mongoid_support!
|
|
54
56
|
self.class_eval do
|
|
55
|
-
|
|
56
|
-
|
|
57
|
+
sorcery_config.username_attribute_names.each do |username|
|
|
58
|
+
field username, :type => String
|
|
59
|
+
end
|
|
60
|
+
field sorcery_config.email_attribute_name, :type => String unless sorcery_config.username_attribute_names.include?(sorcery_config.email_attribute_name)
|
|
57
61
|
field sorcery_config.crypted_password_attribute_name, :type => String
|
|
58
62
|
field sorcery_config.salt_attribute_name, :type => String
|
|
59
63
|
end
|
|
60
64
|
end
|
|
61
65
|
|
|
66
|
+
# defines mongo_mapper fields on the model class,
|
|
67
|
+
def init_mongo_mapper_support!
|
|
68
|
+
self.class_eval do
|
|
69
|
+
sorcery_config.username_attribute_names.each do |username|
|
|
70
|
+
key username, String
|
|
71
|
+
end
|
|
72
|
+
key sorcery_config.email_attribute_name, String unless sorcery_config.username_attribute_names.include?(sorcery_config.email_attribute_name)
|
|
73
|
+
key sorcery_config.crypted_password_attribute_name, String
|
|
74
|
+
key sorcery_config.salt_attribute_name, String
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
62
78
|
# add virtual password accessor and ORM callbacks.
|
|
63
79
|
def init_orm_hooks!
|
|
64
80
|
self.class_eval do
|
|
65
81
|
attr_accessor @sorcery_config.password_attribute_name
|
|
66
82
|
attr_protected @sorcery_config.crypted_password_attribute_name, @sorcery_config.salt_attribute_name
|
|
67
|
-
before_save :encrypt_password, :if => Proc.new { |record|
|
|
68
|
-
|
|
83
|
+
before_save :encrypt_password, :if => Proc.new { |record|
|
|
84
|
+
record.send(sorcery_config.password_attribute_name).present?
|
|
85
|
+
}
|
|
86
|
+
after_save :clear_virtual_password, :if => Proc.new { |record|
|
|
87
|
+
record.send(sorcery_config.password_attribute_name).present?
|
|
88
|
+
}
|
|
69
89
|
end
|
|
70
90
|
end
|
|
71
91
|
end
|
|
@@ -95,7 +115,7 @@ module Sorcery
|
|
|
95
115
|
|
|
96
116
|
@sorcery_config.encryption_provider.stretches = @sorcery_config.stretches if @sorcery_config.encryption_provider.respond_to?(:stretches) && @sorcery_config.stretches
|
|
97
117
|
@sorcery_config.encryption_provider.join_token = @sorcery_config.salt_join_token if @sorcery_config.encryption_provider.respond_to?(:join_token) && @sorcery_config.salt_join_token
|
|
98
|
-
CryptoProviders::AES256.key = @sorcery_config.encryption_key
|
|
118
|
+
CryptoProviders::AES256.key = @sorcery_config.encryption_key
|
|
99
119
|
@sorcery_config.encryption_provider.encrypt(*tokens)
|
|
100
120
|
end
|
|
101
121
|
|
|
@@ -141,7 +161,7 @@ module Sorcery
|
|
|
141
161
|
# encrypts password with salt and saves it.
|
|
142
162
|
def encrypt_password
|
|
143
163
|
config = sorcery_config
|
|
144
|
-
self.send(:"#{config.salt_attribute_name}=", new_salt = generate_random_token) if !config.salt_attribute_name.nil?
|
|
164
|
+
self.send(:"#{config.salt_attribute_name}=", new_salt = TemporaryToken.generate_random_token) if !config.salt_attribute_name.nil?
|
|
145
165
|
self.send(:"#{config.crypted_password_attribute_name}=", self.class.encrypt(self.send(config.password_attribute_name),new_salt))
|
|
146
166
|
end
|
|
147
167
|
|
|
@@ -159,11 +179,6 @@ module Sorcery
|
|
|
159
179
|
mail.deliver
|
|
160
180
|
end
|
|
161
181
|
end
|
|
162
|
-
|
|
163
|
-
# Random code, used for salt and temporary tokens.
|
|
164
|
-
def generate_random_token
|
|
165
|
-
Digest::SHA1.hexdigest( Time.now.to_s.split(//).sort_by {rand}.join )
|
|
166
|
-
end
|
|
167
182
|
end
|
|
168
183
|
|
|
169
184
|
# Each class which calls 'activate_sorcery!' receives an instance of this class.
|
|
@@ -171,7 +186,7 @@ module Sorcery
|
|
|
171
186
|
# options will be configured from a single place.
|
|
172
187
|
class Config
|
|
173
188
|
|
|
174
|
-
attr_accessor :
|
|
189
|
+
attr_accessor :username_attribute_names, # change default username attribute, for example, to use :email
|
|
175
190
|
# as the login.
|
|
176
191
|
|
|
177
192
|
:password_attribute_name, # change *virtual* password attribute, the one which is used
|
|
@@ -203,7 +218,7 @@ module Sorcery
|
|
|
203
218
|
def initialize
|
|
204
219
|
@defaults = {
|
|
205
220
|
:@submodules => [],
|
|
206
|
-
:@
|
|
221
|
+
:@username_attribute_names => [:username],
|
|
207
222
|
:@password_attribute_name => :password,
|
|
208
223
|
:@email_attribute_name => :email,
|
|
209
224
|
:@crypted_password_attribute_name => :crypted_password,
|
|
@@ -228,6 +243,10 @@ module Sorcery
|
|
|
228
243
|
end
|
|
229
244
|
end
|
|
230
245
|
|
|
246
|
+
def username_attribute_names=(fields)
|
|
247
|
+
@username_attribute_names = fields.kind_of?(Array) ? fields : [fields]
|
|
248
|
+
end
|
|
249
|
+
|
|
231
250
|
def custom_encryption_provider=(provider)
|
|
232
251
|
@custom_encryption_provider = @encryption_provider = provider
|
|
233
252
|
end
|
|
@@ -4,8 +4,8 @@ module Sorcery
|
|
|
4
4
|
# logins a user and calls all callbacks
|
|
5
5
|
def login_user(user = nil)
|
|
6
6
|
user ||= @user
|
|
7
|
-
@controller.send(:
|
|
8
|
-
@controller.send(:after_login!,user,[user.send(user.sorcery_config.
|
|
7
|
+
@controller.send(:auto_login,user)
|
|
8
|
+
@controller.send(:after_login!,user,[user.send(user.sorcery_config.username_attribute_names.first),'secret'])
|
|
9
9
|
end
|
|
10
10
|
|
|
11
11
|
def logout_user
|
data/lib/sorcery.rb
CHANGED
|
@@ -5,6 +5,7 @@ module Sorcery
|
|
|
5
5
|
module Adapters
|
|
6
6
|
autoload :ActiveRecord, 'sorcery/model/adapters/active_record'
|
|
7
7
|
autoload :Mongoid, 'sorcery/model/adapters/mongoid'
|
|
8
|
+
autoload :MongoMapper, 'sorcery/model/adapters/mongo_mapper'
|
|
8
9
|
end
|
|
9
10
|
module Submodules
|
|
10
11
|
autoload :UserActivation, 'sorcery/model/submodules/user_activation'
|
|
@@ -32,12 +33,10 @@ module Sorcery
|
|
|
32
33
|
module Providers
|
|
33
34
|
autoload :Twitter, 'sorcery/controller/submodules/external/providers/twitter'
|
|
34
35
|
autoload :Facebook, 'sorcery/controller/submodules/external/providers/facebook'
|
|
36
|
+
autoload :Github, 'sorcery/controller/submodules/external/providers/github'
|
|
35
37
|
end
|
|
36
38
|
end
|
|
37
39
|
end
|
|
38
|
-
module Adapters
|
|
39
|
-
autoload :Sinatra, 'sorcery/controller/adapters/sinatra'
|
|
40
|
-
end
|
|
41
40
|
end
|
|
42
41
|
module CryptoProviders
|
|
43
42
|
autoload :Common, 'sorcery/crypto_providers/common'
|
|
@@ -51,12 +50,9 @@ module Sorcery
|
|
|
51
50
|
autoload :TestHelpers, 'sorcery/test_helpers'
|
|
52
51
|
module TestHelpers
|
|
53
52
|
autoload :Rails, 'sorcery/test_helpers/rails'
|
|
54
|
-
autoload :Sinatra, 'sorcery/test_helpers/sinatra'
|
|
55
53
|
autoload :Internal, 'sorcery/test_helpers/internal'
|
|
56
54
|
module Internal
|
|
57
55
|
autoload :Rails, 'sorcery/test_helpers/internal/rails'
|
|
58
|
-
autoload :Sinatra, 'sorcery/test_helpers/internal/sinatra'
|
|
59
|
-
autoload :SinatraModular, 'sorcery/test_helpers/internal/sinatra_modular'
|
|
60
56
|
end
|
|
61
57
|
|
|
62
58
|
end
|
|
@@ -76,6 +72,9 @@ module Sorcery
|
|
|
76
72
|
end
|
|
77
73
|
end
|
|
78
74
|
|
|
75
|
+
if defined?(MongoMapper)
|
|
76
|
+
MongoMapper::Document.send(:plugin, Sorcery::Model::Adapters::MongoMapper)
|
|
77
|
+
end
|
|
78
|
+
|
|
79
79
|
require 'sorcery/engine' if defined?(Rails) && Rails::VERSION::MAJOR == 3
|
|
80
|
-
require 'sorcery/sinatra' if defined?(Sinatra)
|
|
81
80
|
end
|