sorcery 0.8.4 → 0.8.5
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of sorcery might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/.gitignore +54 -0
- data/.travis.yml +13 -1
- data/CHANGELOG.md +234 -0
- data/Gemfile +17 -14
- data/Gemfile.rails4 +24 -0
- data/README.md +300 -0
- data/Rakefile +3 -79
- data/VERSION +1 -1
- data/lib/generators/sorcery/helpers.rb +40 -0
- data/lib/generators/sorcery/install_generator.rb +21 -17
- data/lib/generators/sorcery/templates/initializer.rb +1 -1
- data/lib/generators/sorcery/templates/migration/activity_logging.rb +2 -11
- data/lib/generators/sorcery/templates/migration/brute_force_protection.rb +1 -7
- data/lib/generators/sorcery/templates/migration/core.rb +5 -8
- data/lib/generators/sorcery/templates/migration/external.rb +1 -5
- data/lib/generators/sorcery/templates/migration/remember_me.rb +2 -9
- data/lib/generators/sorcery/templates/migration/reset_password.rb +2 -10
- data/lib/generators/sorcery/templates/migration/user_activation.rb +2 -10
- data/lib/sorcery/controller.rb +16 -4
- data/lib/sorcery/controller/submodules/external.rb +9 -8
- data/lib/sorcery/controller/submodules/external/protocols/oauth2.rb +2 -1
- data/lib/sorcery/controller/submodules/external/providers/facebook.rb +2 -1
- data/lib/sorcery/controller/submodules/external/providers/github.rb +2 -1
- data/lib/sorcery/controller/submodules/external/providers/google.rb +2 -1
- data/lib/sorcery/controller/submodules/external/providers/linkedin.rb +2 -1
- data/lib/sorcery/controller/submodules/external/providers/liveid.rb +2 -1
- data/lib/sorcery/controller/submodules/external/providers/twitter.rb +3 -2
- data/lib/sorcery/controller/submodules/external/providers/vk.rb +2 -1
- data/lib/sorcery/controller/submodules/external/providers/xing.rb +2 -1
- data/lib/sorcery/controller/submodules/remember_me.rb +1 -1
- data/lib/sorcery/controller/submodules/session_timeout.rb +1 -1
- data/lib/sorcery/model.rb +9 -3
- data/lib/sorcery/model/adapters/mongoid.rb +3 -3
- data/lib/sorcery/model/submodules/brute_force_protection.rb +6 -8
- data/lib/sorcery/model/submodules/reset_password.rb +5 -1
- data/lib/sorcery/model/submodules/user_activation.rb +18 -4
- data/lib/sorcery/test_helpers/internal.rb +21 -4
- data/lib/sorcery/test_helpers/internal/rails.rb +4 -4
- data/lib/sorcery/test_helpers/rails.rb +2 -2
- data/sorcery.gemspec +25 -363
- data/spec/{rails3/spec → active_record}/controller_activity_logging_spec.rb +29 -19
- data/spec/active_record/controller_brute_force_protection_spec.rb +136 -0
- data/spec/{rails3/spec → active_record}/controller_http_basic_auth_spec.rb +26 -17
- data/spec/{rails3/spec → active_record}/controller_oauth2_spec.rb +93 -56
- data/spec/{rails3/spec → active_record}/controller_oauth_spec.rb +35 -29
- data/spec/{rails3/spec → active_record}/controller_remember_me_spec.rb +28 -28
- data/spec/{rails3/spec → active_record}/controller_session_timeout_spec.rb +11 -11
- data/spec/{rails3/spec → active_record}/controller_spec.rb +19 -19
- data/spec/{rails3/spec → active_record}/integration_spec.rb +2 -2
- data/spec/{rails3/spec → active_record}/user_activation_spec.rb +8 -6
- data/spec/active_record/user_activity_logging_spec.rb +8 -0
- data/spec/{rails3/spec → active_record}/user_brute_force_protection_spec.rb +5 -4
- data/spec/{rails3/spec → active_record}/user_oauth_spec.rb +5 -4
- data/spec/{rails3/spec → active_record}/user_remember_me_spec.rb +4 -3
- data/spec/{rails3/spec → active_record}/user_reset_password_spec.rb +6 -6
- data/spec/{rails3/spec → active_record}/user_spec.rb +12 -10
- data/spec/{rails3_mongo_mapper/spec → mongo_mapper}/controller_spec.rb +15 -15
- data/spec/mongo_mapper/user_activation_spec.rb +10 -0
- data/spec/mongo_mapper/user_activity_logging_spec.rb +8 -0
- data/spec/mongo_mapper/user_brute_force_protection_spec.rb +8 -0
- data/spec/mongo_mapper/user_oauth_spec.rb +8 -0
- data/spec/mongo_mapper/user_remember_me_spec.rb +8 -0
- data/spec/mongo_mapper/user_reset_password_spec.rb +8 -0
- data/spec/{rails3_mongo_mapper/spec → mongo_mapper}/user_spec.rb +9 -8
- data/spec/{rails3_mongoid/spec → mongoid}/controller_activity_logging_spec.rb +8 -8
- data/spec/{rails3_mongoid/spec → mongoid}/controller_spec.rb +14 -14
- data/spec/mongoid/user_activation_spec.rb +10 -0
- data/spec/mongoid/user_activity_logging_spec.rb +9 -0
- data/spec/mongoid/user_brute_force_protection_spec.rb +9 -0
- data/spec/mongoid/user_oauth_spec.rb +9 -0
- data/spec/mongoid/user_remember_me_spec.rb +9 -0
- data/spec/mongoid/user_reset_password_spec.rb +9 -0
- data/spec/{rails3_mongoid/spec → mongoid}/user_spec.rb +10 -9
- data/spec/orm/active_record.rb +7 -0
- data/spec/orm/mongo_mapper.rb +10 -0
- data/spec/orm/mongoid.rb +17 -0
- data/spec/{rails3/app/models → rails_app/app/active_record}/authentication.rb +0 -0
- data/spec/{rails3/app/models → rails_app/app/active_record}/user.rb +1 -2
- data/spec/rails_app/app/active_record/user_provider.rb +3 -0
- data/spec/{rails3/app/controllers/application_controller.rb → rails_app/app/controllers/sorcery_controller.rb} +26 -15
- data/spec/{rails3 → rails_app}/app/helpers/application_helper.rb +0 -0
- data/spec/{rails3 → rails_app}/app/mailers/sorcery_mailer.rb +0 -0
- data/spec/{rails3_mongo_mapper/app/models → rails_app/app/mongo_mapper}/authentication.rb +0 -0
- data/spec/{rails3_mongo_mapper/app/models → rails_app/app/mongo_mapper}/user.rb +0 -0
- data/spec/{rails3_mongoid/app/models → rails_app/app/mongoid}/authentication.rb +0 -0
- data/spec/{rails3_mongoid/app/models → rails_app/app/mongoid}/user.rb +2 -0
- data/spec/{rails3 → rails_app}/app/views/application/index.html.erb +0 -0
- data/spec/{rails3 → rails_app}/app/views/layouts/application.html.erb +0 -0
- data/spec/{rails3 → rails_app}/app/views/sorcery_mailer/activation_email.html.erb +0 -0
- data/spec/{rails3 → rails_app}/app/views/sorcery_mailer/activation_email.text.erb +0 -0
- data/spec/{rails3/app/views/sorcery_mailer/activation_success_email.html.erb → rails_app/app/views/sorcery_mailer/activation_needed_email.html.erb} +0 -0
- data/spec/{rails3_mongo_mapper → rails_app}/app/views/sorcery_mailer/activation_success_email.html.erb +0 -0
- data/spec/{rails3 → rails_app}/app/views/sorcery_mailer/activation_success_email.text.erb +0 -0
- data/spec/{rails3 → rails_app}/app/views/sorcery_mailer/reset_password_email.html.erb +0 -0
- data/spec/{rails3 → rails_app}/app/views/sorcery_mailer/reset_password_email.text.erb +0 -0
- data/spec/{rails3 → rails_app}/app/views/sorcery_mailer/send_unlock_token_email.text.erb +0 -0
- data/spec/{rails3_mongo_mapper → rails_app}/config.ru +1 -1
- data/spec/{rails3_mongoid → rails_app}/config/application.rb +13 -8
- data/spec/rails_app/config/boot.rb +4 -0
- data/spec/rails_app/config/database.yml +22 -0
- data/spec/{rails3 → rails_app}/config/environment.rb +0 -0
- data/spec/{rails3_mongo_mapper → rails_app}/config/environments/test.rb +2 -0
- data/spec/{rails3 → rails_app}/config/initializers/backtrace_silencers.rb +0 -0
- data/spec/{rails3 → rails_app}/config/initializers/inflections.rb +0 -0
- data/spec/{rails3 → rails_app}/config/initializers/mime_types.rb +0 -0
- data/spec/{rails3 → rails_app}/config/initializers/secret_token.rb +0 -0
- data/spec/{rails3 → rails_app}/config/initializers/session_store.rb +4 -0
- data/spec/{rails3 → rails_app}/config/locales/en.yml +0 -0
- data/spec/rails_app/config/routes.rb +37 -0
- data/spec/{rails3 → rails_app}/db/migrate/activation/20101224223622_add_activation_to_users.rb +3 -3
- data/spec/{rails3 → rails_app}/db/migrate/activity_logging/20101224223624_add_activity_logging_to_users.rb +0 -0
- data/spec/{rails3 → rails_app}/db/migrate/brute_force_protection/20101224223626_add_brute_force_protection_to_users.rb +0 -0
- data/spec/{rails3 → rails_app}/db/migrate/core/20101224223620_create_users.rb +0 -0
- data/spec/rails_app/db/migrate/external/20101224223628_create_authentications_and_user_providers.rb +22 -0
- data/spec/{rails3 → rails_app}/db/migrate/remember_me/20101224223623_add_remember_me_token_to_users.rb +0 -0
- data/spec/{rails3 → rails_app}/db/migrate/reset_password/20101224223622_add_reset_password_to_users.rb +0 -0
- data/spec/{rails3 → rails_app}/db/schema.rb +0 -0
- data/spec/{rails3 → rails_app}/db/seeds.rb +0 -0
- data/spec/{rails3 → rails_app}/public/404.html +0 -0
- data/spec/{rails3 → rails_app}/public/422.html +0 -0
- data/spec/{rails3 → rails_app}/public/500.html +0 -0
- data/spec/{rails3 → rails_app}/public/favicon.ico +0 -0
- data/spec/{rails3 → rails_app}/public/images/rails.png +0 -0
- data/spec/{rails3 → rails_app}/public/javascripts/application.js +0 -0
- data/spec/{rails3 → rails_app}/public/javascripts/controls.js +0 -0
- data/spec/{rails3 → rails_app}/public/javascripts/dragdrop.js +0 -0
- data/spec/{rails3 → rails_app}/public/javascripts/effects.js +0 -0
- data/spec/{rails3 → rails_app}/public/javascripts/prototype.js +0 -0
- data/spec/{rails3 → rails_app}/public/javascripts/rails.js +0 -0
- data/spec/{rails3 → rails_app}/public/robots.txt +0 -0
- data/spec/{rails3/lib/tasks → rails_app/public/stylesheets}/.gitkeep +0 -0
- data/spec/shared_examples/controller_oauth_shared_examples.rb +22 -8
- data/spec/shared_examples/user_activation_shared_examples.rb +49 -27
- data/spec/shared_examples/user_reset_password_shared_examples.rb +33 -21
- data/spec/shared_examples/user_shared_examples.rb +65 -50
- data/spec/sorcery_crypto_providers_spec.rb +47 -45
- data/spec/spec_helper.rb +38 -4
- metadata +117 -254
- data/Gemfile.lock +0 -175
- data/README.rdoc +0 -261
- data/spec/Gemfile +0 -12
- data/spec/Gemfile.lock +0 -129
- data/spec/README.md +0 -31
- data/spec/Rakefile +0 -12
- data/spec/rails3/.gitignore +0 -4
- data/spec/rails3/.rspec +0 -1
- data/spec/rails3/Gemfile +0 -15
- data/spec/rails3/Gemfile.lock +0 -162
- data/spec/rails3/README +0 -256
- data/spec/rails3/Rakefile +0 -11
- data/spec/rails3/config.ru +0 -4
- data/spec/rails3/config/application.rb +0 -46
- data/spec/rails3/config/boot.rb +0 -13
- data/spec/rails3/config/database.yml +0 -27
- data/spec/rails3/config/environments/development.rb +0 -26
- data/spec/rails3/config/environments/in_memory.rb +0 -35
- data/spec/rails3/config/environments/production.rb +0 -49
- data/spec/rails3/config/environments/test.rb +0 -35
- data/spec/rails3/config/routes.rb +0 -59
- data/spec/rails3/db/migrate/external/20101224223628_create_authentications.rb +0 -14
- data/spec/rails3/public/stylesheets/.gitkeep +0 -0
- data/spec/rails3/script/rails +0 -6
- data/spec/rails3/spec/controller_brute_force_protection_spec.rb +0 -96
- data/spec/rails3/spec/spec.opts +0 -2
- data/spec/rails3/spec/spec_helper.orig.rb +0 -27
- data/spec/rails3/spec/spec_helper.rb +0 -71
- data/spec/rails3/spec/user_activity_logging_spec.rb +0 -8
- data/spec/rails3/vendor/plugins/.gitkeep +0 -0
- data/spec/rails3_mongo_mapper/.gitignore +0 -4
- data/spec/rails3_mongo_mapper/.rspec +0 -1
- data/spec/rails3_mongo_mapper/Gemfile +0 -16
- data/spec/rails3_mongo_mapper/Gemfile.lock +0 -156
- data/spec/rails3_mongo_mapper/Rakefile +0 -11
- data/spec/rails3_mongo_mapper/app/controllers/application_controller.rb +0 -122
- data/spec/rails3_mongo_mapper/app/helpers/application_helper.rb +0 -2
- data/spec/rails3_mongo_mapper/app/mailers/sorcery_mailer.rb +0 -25
- data/spec/rails3_mongo_mapper/app/views/layouts/application.html.erb +0 -14
- data/spec/rails3_mongo_mapper/app/views/sorcery_mailer/activation_email.html.erb +0 -17
- data/spec/rails3_mongo_mapper/app/views/sorcery_mailer/activation_email.text.erb +0 -9
- data/spec/rails3_mongo_mapper/app/views/sorcery_mailer/activation_success_email.text.erb +0 -9
- data/spec/rails3_mongo_mapper/app/views/sorcery_mailer/reset_password_email.html.erb +0 -16
- data/spec/rails3_mongo_mapper/app/views/sorcery_mailer/reset_password_email.text.erb +0 -8
- data/spec/rails3_mongo_mapper/config/application.rb +0 -51
- data/spec/rails3_mongo_mapper/config/boot.rb +0 -13
- data/spec/rails3_mongo_mapper/config/environment.rb +0 -5
- data/spec/rails3_mongo_mapper/config/environments/development.rb +0 -30
- data/spec/rails3_mongo_mapper/config/environments/in_memory.rb +0 -0
- data/spec/rails3_mongo_mapper/config/environments/production.rb +0 -49
- data/spec/rails3_mongo_mapper/config/initializers/backtrace_silencers.rb +0 -7
- data/spec/rails3_mongo_mapper/config/initializers/inflections.rb +0 -10
- data/spec/rails3_mongo_mapper/config/initializers/mime_types.rb +0 -5
- data/spec/rails3_mongo_mapper/config/initializers/mongo.rb +0 -2
- data/spec/rails3_mongo_mapper/config/initializers/secret_token.rb +0 -7
- data/spec/rails3_mongo_mapper/config/initializers/session_store.rb +0 -8
- data/spec/rails3_mongo_mapper/config/locales/en.yml +0 -5
- data/spec/rails3_mongo_mapper/config/routes.rb +0 -59
- data/spec/rails3_mongo_mapper/db/schema.rb +0 -23
- data/spec/rails3_mongo_mapper/db/seeds.rb +0 -7
- data/spec/rails3_mongo_mapper/lib/tasks/.gitkeep +0 -0
- data/spec/rails3_mongo_mapper/public/404.html +0 -26
- data/spec/rails3_mongo_mapper/public/422.html +0 -26
- data/spec/rails3_mongo_mapper/public/500.html +0 -26
- 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 +0 -2
- data/spec/rails3_mongo_mapper/public/javascripts/controls.js +0 -965
- data/spec/rails3_mongo_mapper/public/javascripts/dragdrop.js +0 -974
- data/spec/rails3_mongo_mapper/public/javascripts/effects.js +0 -1123
- data/spec/rails3_mongo_mapper/public/javascripts/prototype.js +0 -6001
- data/spec/rails3_mongo_mapper/public/javascripts/rails.js +0 -175
- data/spec/rails3_mongo_mapper/public/robots.txt +0 -5
- data/spec/rails3_mongo_mapper/public/stylesheets/.gitkeep +0 -0
- data/spec/rails3_mongo_mapper/script/rails +0 -6
- data/spec/rails3_mongo_mapper/spec/spec.opts +0 -2
- data/spec/rails3_mongo_mapper/spec/spec_helper.orig.rb +0 -27
- data/spec/rails3_mongo_mapper/spec/spec_helper.rb +0 -55
- data/spec/rails3_mongo_mapper/spec/user_activation_spec.rb +0 -9
- data/spec/rails3_mongo_mapper/spec/user_activity_logging_spec.rb +0 -8
- data/spec/rails3_mongo_mapper/spec/user_brute_force_protection_spec.rb +0 -8
- data/spec/rails3_mongo_mapper/spec/user_oauth_spec.rb +0 -8
- data/spec/rails3_mongo_mapper/spec/user_remember_me_spec.rb +0 -8
- data/spec/rails3_mongo_mapper/spec/user_reset_password_spec.rb +0 -8
- data/spec/rails3_mongo_mapper/vendor/plugins/.gitkeep +0 -0
- data/spec/rails3_mongoid/.gitignore +0 -4
- data/spec/rails3_mongoid/.rspec +0 -1
- data/spec/rails3_mongoid/Gemfile +0 -15
- data/spec/rails3_mongoid/Gemfile.lock +0 -146
- data/spec/rails3_mongoid/Rakefile +0 -11
- data/spec/rails3_mongoid/app/controllers/application_controller.rb +0 -127
- data/spec/rails3_mongoid/app/helpers/application_helper.rb +0 -2
- data/spec/rails3_mongoid/app/mailers/sorcery_mailer.rb +0 -25
- data/spec/rails3_mongoid/app/views/layouts/application.html.erb +0 -14
- data/spec/rails3_mongoid/app/views/sorcery_mailer/activation_email.html.erb +0 -17
- data/spec/rails3_mongoid/app/views/sorcery_mailer/activation_email.text.erb +0 -9
- data/spec/rails3_mongoid/app/views/sorcery_mailer/activation_success_email.html.erb +0 -17
- data/spec/rails3_mongoid/app/views/sorcery_mailer/activation_success_email.text.erb +0 -9
- data/spec/rails3_mongoid/app/views/sorcery_mailer/reset_password_email.html.erb +0 -16
- data/spec/rails3_mongoid/app/views/sorcery_mailer/reset_password_email.text.erb +0 -8
- data/spec/rails3_mongoid/config.ru +0 -4
- data/spec/rails3_mongoid/config/boot.rb +0 -13
- data/spec/rails3_mongoid/config/environment.rb +0 -5
- data/spec/rails3_mongoid/config/environments/development.rb +0 -26
- data/spec/rails3_mongoid/config/environments/in_memory.rb +0 -0
- data/spec/rails3_mongoid/config/environments/production.rb +0 -49
- data/spec/rails3_mongoid/config/environments/test.rb +0 -35
- data/spec/rails3_mongoid/config/initializers/backtrace_silencers.rb +0 -7
- data/spec/rails3_mongoid/config/initializers/inflections.rb +0 -10
- data/spec/rails3_mongoid/config/initializers/mime_types.rb +0 -5
- data/spec/rails3_mongoid/config/initializers/secret_token.rb +0 -7
- data/spec/rails3_mongoid/config/initializers/session_store.rb +0 -8
- data/spec/rails3_mongoid/config/locales/en.yml +0 -5
- data/spec/rails3_mongoid/config/mongoid.yml +0 -7
- data/spec/rails3_mongoid/config/routes.rb +0 -59
- data/spec/rails3_mongoid/db/schema.rb +0 -23
- data/spec/rails3_mongoid/db/seeds.rb +0 -7
- data/spec/rails3_mongoid/lib/tasks/.gitkeep +0 -0
- data/spec/rails3_mongoid/public/404.html +0 -26
- data/spec/rails3_mongoid/public/422.html +0 -26
- data/spec/rails3_mongoid/public/500.html +0 -26
- data/spec/rails3_mongoid/public/favicon.ico +0 -0
- data/spec/rails3_mongoid/public/images/rails.png +0 -0
- data/spec/rails3_mongoid/public/javascripts/application.js +0 -2
- data/spec/rails3_mongoid/public/javascripts/controls.js +0 -965
- data/spec/rails3_mongoid/public/javascripts/dragdrop.js +0 -974
- data/spec/rails3_mongoid/public/javascripts/effects.js +0 -1123
- data/spec/rails3_mongoid/public/javascripts/prototype.js +0 -6001
- data/spec/rails3_mongoid/public/javascripts/rails.js +0 -175
- data/spec/rails3_mongoid/public/robots.txt +0 -5
- data/spec/rails3_mongoid/public/stylesheets/.gitkeep +0 -0
- data/spec/rails3_mongoid/script/rails +0 -6
- data/spec/rails3_mongoid/spec/spec.opts +0 -2
- data/spec/rails3_mongoid/spec/spec_helper.orig.rb +0 -27
- data/spec/rails3_mongoid/spec/spec_helper.rb +0 -55
- data/spec/rails3_mongoid/spec/user_activation_spec.rb +0 -9
- data/spec/rails3_mongoid/spec/user_activity_logging_spec.rb +0 -8
- data/spec/rails3_mongoid/spec/user_brute_force_protection_spec.rb +0 -8
- data/spec/rails3_mongoid/spec/user_oauth_spec.rb +0 -8
- data/spec/rails3_mongoid/spec/user_remember_me_spec.rb +0 -8
- data/spec/rails3_mongoid/spec/user_reset_password_spec.rb +0 -8
- data/spec/rails3_mongoid/vendor/plugins/.gitkeep +0 -0
data/Rakefile
CHANGED
@@ -1,82 +1,6 @@
|
|
1
|
-
|
2
|
-
# -- Commented because it's slow
|
3
|
-
# begin
|
4
|
-
# Bundler.setup(:default, :development)
|
5
|
-
# rescue Bundler::BundlerError => e
|
6
|
-
# $stderr.puts e.message
|
7
|
-
# $stderr.puts "Run `bundle install` to install missing gems"
|
8
|
-
# exit e.status_code
|
9
|
-
# end
|
10
|
-
# --
|
1
|
+
require "bundler/gem_tasks"
|
11
2
|
|
12
|
-
require 'rake'
|
13
|
-
|
14
|
-
require 'jeweler'
|
15
|
-
Jeweler::Tasks.new do |gem|
|
16
|
-
# gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
|
17
|
-
gem.name = "sorcery"
|
18
|
-
gem.homepage = "http://github.com/NoamB/sorcery"
|
19
|
-
gem.license = "MIT"
|
20
|
-
gem.summary = "Magical authentication for Rails 3 applications"
|
21
|
-
gem.description = "Provides common authentication needs such as signing in/out, activating by email and resetting password."
|
22
|
-
gem.email = "nbenari@gmail.com"
|
23
|
-
gem.authors = ["Noam Ben Ari"]
|
24
|
-
# Include your dependencies below. Runtime dependencies are required when using your gem,
|
25
|
-
# and development dependencies are only needed for development (ie running rake tasks, tests, etc)
|
26
|
-
# gem.add_runtime_dependency 'jabber4r', '> 0.1'
|
27
|
-
# gem.add_development_dependency 'rspec', '> 1.2.3'
|
28
|
-
end
|
29
|
-
Jeweler::RubygemsDotOrgTasks.new
|
30
|
-
|
31
|
-
require 'rspec/core'
|
32
3
|
require 'rspec/core/rake_task'
|
4
|
+
RSpec::Core::RakeTask.new(:spec)
|
33
5
|
|
34
|
-
|
35
|
-
spec.pattern = FileList['spec/**/*_spec.rb']
|
36
|
-
end
|
37
|
-
|
38
|
-
require 'yard'
|
39
|
-
YARD::Rake::YardocTask.new
|
40
|
-
|
41
|
-
desc 'Default: Run all sorcery specs.'
|
42
|
-
task :default => :all_sorcery_specs
|
43
|
-
|
44
|
-
desc "Run all sorcery specs"
|
45
|
-
task :all_sorcery_specs do
|
46
|
-
# we need to be empty, otherwise bundler will use parent bundler.
|
47
|
-
env = {
|
48
|
-
'BUNDLE_GEMFILE' => nil,
|
49
|
-
'GEM_HOME' => nil
|
50
|
-
}
|
51
|
-
Dir['spec/**/Rakefile'].each do |rakefile|
|
52
|
-
directory_name = File.dirname(rakefile)
|
53
|
-
system(env, "cd #{directory_name} && bundle && bundle exec rake")
|
54
|
-
abort unless $?.success?
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
desc "Bundle all folders"
|
59
|
-
task :bundle do
|
60
|
-
sh "bundle"
|
61
|
-
Dir['spec', 'spec/**'].each do |dir|
|
62
|
-
if Dir.exists?(dir) && File.exists?(dir + "/Gemfile")
|
63
|
-
sh <<-CMD
|
64
|
-
cd #{dir}
|
65
|
-
bundle
|
66
|
-
CMD
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
desc "Bundle update all folders"
|
72
|
-
task :bundle_update do
|
73
|
-
sh "bundle update"
|
74
|
-
Dir['spec', 'spec/**'].each do |dir|
|
75
|
-
if Dir.exists?(dir) && File.exists?(dir + "/Gemfile")
|
76
|
-
sh <<-CMD
|
77
|
-
cd #{dir}
|
78
|
-
bundle update
|
79
|
-
CMD
|
80
|
-
end
|
81
|
-
end
|
82
|
-
end
|
6
|
+
task :default => :spec
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.8.
|
1
|
+
0.8.2
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module Sorcery
|
2
|
+
module Generators
|
3
|
+
module Helpers
|
4
|
+
private
|
5
|
+
|
6
|
+
def sorcery_config_path
|
7
|
+
"config/initializers/sorcery.rb"
|
8
|
+
end
|
9
|
+
|
10
|
+
# Either return the model passed in a classified form or return the default "User".
|
11
|
+
def model_class_name
|
12
|
+
options[:model] ? options[:model].classify : "User"
|
13
|
+
end
|
14
|
+
|
15
|
+
def model_path
|
16
|
+
@model_path ||= File.join("app", "models", "#{file_path}.rb")
|
17
|
+
end
|
18
|
+
|
19
|
+
def file_path
|
20
|
+
model_name.underscore
|
21
|
+
end
|
22
|
+
|
23
|
+
def namespace
|
24
|
+
Rails::Generators.namespace if Rails::Generators.respond_to?(:namespace)
|
25
|
+
end
|
26
|
+
|
27
|
+
def namespaced?
|
28
|
+
!!namespace
|
29
|
+
end
|
30
|
+
|
31
|
+
def model_name
|
32
|
+
if namespaced?
|
33
|
+
[namespace.to_s] + [model_class_name]
|
34
|
+
else
|
35
|
+
[model_class_name]
|
36
|
+
end.join("::")
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -1,24 +1,26 @@
|
|
1
1
|
require 'rails/generators/migration'
|
2
|
+
require 'generators/sorcery/helpers'
|
2
3
|
|
3
4
|
module Sorcery
|
4
5
|
module Generators
|
5
6
|
class InstallGenerator < Rails::Generators::Base
|
6
7
|
include Rails::Generators::Migration
|
7
|
-
|
8
|
+
include Sorcery::Generators::Helpers
|
9
|
+
|
8
10
|
source_root File.expand_path('../templates', __FILE__)
|
9
|
-
|
11
|
+
|
10
12
|
argument :submodules, :optional => true, :type => :array, :banner => "submodules"
|
11
|
-
|
13
|
+
|
12
14
|
class_option :model, :optional => true, :type => :string, :banner => "model",
|
13
15
|
:desc => "Specify the model class name if you will use anything other than 'User'"
|
14
|
-
|
16
|
+
|
15
17
|
class_option :migrations, :optional => true, :type => :boolean, :banner => "migrations",
|
16
18
|
:desc => "Specify if you want to add submodules to an existing model\n\t\t\t # (will generate migrations files, and add submodules to config file)"
|
17
|
-
|
18
|
-
|
19
|
+
|
20
|
+
|
19
21
|
# Copy the initializer file to config/initializers folder.
|
20
22
|
def copy_initializer_file
|
21
|
-
template "initializer.rb",
|
23
|
+
template "initializer.rb", sorcery_config_path unless options[:migrations]
|
22
24
|
end
|
23
25
|
|
24
26
|
def configure_initializer_file
|
@@ -26,19 +28,28 @@ module Sorcery
|
|
26
28
|
if submodules
|
27
29
|
submodule_names = submodules.collect{ |submodule| ':' + submodule }
|
28
30
|
|
29
|
-
gsub_file
|
31
|
+
gsub_file sorcery_config_path, /submodules = \[.*\]/ do |str|
|
30
32
|
current_submodule_names = (str =~ /\[(.*)\]/ ? $1 : '').delete(' ').split(',')
|
31
33
|
"submodules = [#{(current_submodule_names | submodule_names).join(', ')}]"
|
32
34
|
end
|
33
35
|
end
|
36
|
+
end
|
34
37
|
|
38
|
+
def configure_model
|
35
39
|
# Generate the model and add 'authenticates_with_sorcery!' unless you passed --migrations
|
36
40
|
unless options[:migrations]
|
37
41
|
generate "model #{model_class_name} --skip-migration"
|
38
|
-
|
42
|
+
|
43
|
+
inject_sorcery_to_model
|
39
44
|
end
|
40
45
|
end
|
41
46
|
|
47
|
+
def inject_sorcery_to_model
|
48
|
+
indents = " " * (namespaced? ? 2 : 1)
|
49
|
+
|
50
|
+
inject_into_class(model_path, model_class_name, "#{indents}authenticates_with_sorcery!\n")
|
51
|
+
end
|
52
|
+
|
42
53
|
# Copy the migrations files to db/migrate folder
|
43
54
|
def copy_migration_files
|
44
55
|
# Copy core migration file in all cases except when you pass --migrations.
|
@@ -52,10 +63,9 @@ module Sorcery
|
|
52
63
|
end
|
53
64
|
end
|
54
65
|
end
|
55
|
-
|
56
66
|
|
57
67
|
end
|
58
|
-
|
68
|
+
|
59
69
|
# Define the next_migration_number method (necessary for the migration_template method to work)
|
60
70
|
def self.next_migration_number(dirname)
|
61
71
|
if ActiveRecord::Base.timestamped_migrations
|
@@ -65,13 +75,7 @@ module Sorcery
|
|
65
75
|
"%.3d" % (current_migration_number(dirname) + 1)
|
66
76
|
end
|
67
77
|
end
|
68
|
-
|
69
|
-
private
|
70
78
|
|
71
|
-
# Either return the model passed in a classified form or return the default "User".
|
72
|
-
def model_class_name
|
73
|
-
options[:model] ? options[:model].classify : "User"
|
74
|
-
end
|
75
79
|
end
|
76
80
|
end
|
77
81
|
end
|
@@ -144,7 +144,7 @@ Rails.application.config.sorcery.configure do |config|
|
|
144
144
|
config.user_config do |user|
|
145
145
|
# -- core --
|
146
146
|
# specify username attributes, for example: [:username, :email].
|
147
|
-
# Default: `[:
|
147
|
+
# Default: `[:email]`
|
148
148
|
#
|
149
149
|
# user.username_attribute_names =
|
150
150
|
|
@@ -1,19 +1,10 @@
|
|
1
1
|
class SorceryActivityLogging < ActiveRecord::Migration
|
2
|
-
def
|
2
|
+
def change
|
3
3
|
add_column :<%= model_class_name.tableize %>, :last_login_at, :datetime, :default => nil
|
4
4
|
add_column :<%= model_class_name.tableize %>, :last_logout_at, :datetime, :default => nil
|
5
5
|
add_column :<%= model_class_name.tableize %>, :last_activity_at, :datetime, :default => nil
|
6
6
|
add_column :<%= model_class_name.tableize %>, :last_login_from_ip_address, :string, :default => nil
|
7
|
-
|
8
|
-
add_index :<%= model_class_name.tableize %>, [:last_logout_at, :last_activity_at]
|
9
|
-
end
|
10
7
|
|
11
|
-
|
12
|
-
remove_index :<%= model_class_name.tableize %>, [:last_logout_at, :last_activity_at]
|
13
|
-
|
14
|
-
remove_column :<%= model_class_name.tableize %>, :last_login_from_ip_address
|
15
|
-
remove_column :<%= model_class_name.tableize %>, :last_activity_at
|
16
|
-
remove_column :<%= model_class_name.tableize %>, :last_logout_at
|
17
|
-
remove_column :<%= model_class_name.tableize %>, :last_login_at
|
8
|
+
add_index :<%= model_class_name.tableize %>, [:last_logout_at, :last_activity_at]
|
18
9
|
end
|
19
10
|
end
|
@@ -1,13 +1,7 @@
|
|
1
1
|
class SorceryBruteForceProtection < ActiveRecord::Migration
|
2
|
-
def
|
2
|
+
def change
|
3
3
|
add_column :<%= model_class_name.tableize %>, :failed_logins_count, :integer, :default => 0
|
4
4
|
add_column :<%= model_class_name.tableize %>, :lock_expires_at, :datetime, :default => nil
|
5
5
|
add_column :<%= model_class_name.tableize %>, :unlock_token, :string, :default => nil
|
6
6
|
end
|
7
|
-
|
8
|
-
def self.down
|
9
|
-
remove_column :<%= model_class_name.tableize %>, :lock_expires_at
|
10
|
-
remove_column :<%= model_class_name.tableize %>, :failed_logins_count
|
11
|
-
remove_column :<%= model_class_name.tableize %>, :unlock_token
|
12
|
-
end
|
13
7
|
end
|
@@ -1,16 +1,13 @@
|
|
1
1
|
class SorceryCore < ActiveRecord::Migration
|
2
|
-
def
|
2
|
+
def change
|
3
3
|
create_table :<%= model_class_name.tableize %> do |t|
|
4
|
-
t.string :
|
5
|
-
t.string :
|
6
|
-
t.string :
|
7
|
-
t.string :salt, :default => nil
|
4
|
+
t.string :email, :null => false
|
5
|
+
t.string :crypted_password, :null => false
|
6
|
+
t.string :salt, :null => false
|
8
7
|
|
9
8
|
t.timestamps
|
10
9
|
end
|
11
|
-
end
|
12
10
|
|
13
|
-
|
14
|
-
drop_table :<%= model_class_name.tableize %>
|
11
|
+
add_index :<%= model_class_name.tableize %>, :email, unique: true
|
15
12
|
end
|
16
13
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
class SorceryExternal < ActiveRecord::Migration
|
2
|
-
def
|
2
|
+
def change
|
3
3
|
create_table :authentications do |t|
|
4
4
|
t.integer :<%= model_class_name.tableize.singularize %>_id, :null => false
|
5
5
|
t.string :provider, :uid, :null => false
|
@@ -7,8 +7,4 @@ class SorceryExternal < ActiveRecord::Migration
|
|
7
7
|
t.timestamps
|
8
8
|
end
|
9
9
|
end
|
10
|
-
|
11
|
-
def self.down
|
12
|
-
drop_table :authentications
|
13
|
-
end
|
14
10
|
end
|
@@ -1,15 +1,8 @@
|
|
1
1
|
class SorceryRememberMe < ActiveRecord::Migration
|
2
|
-
def
|
2
|
+
def change
|
3
3
|
add_column :<%= model_class_name.tableize %>, :remember_me_token, :string, :default => nil
|
4
4
|
add_column :<%= model_class_name.tableize %>, :remember_me_token_expires_at, :datetime, :default => nil
|
5
|
-
|
6
|
-
add_index :<%= model_class_name.tableize %>, :remember_me_token
|
7
|
-
end
|
8
5
|
|
9
|
-
|
10
|
-
remove_index :<%= model_class_name.tableize %>, :remember_me_token
|
11
|
-
|
12
|
-
remove_column :<%= model_class_name.tableize %>, :remember_me_token_expires_at
|
13
|
-
remove_column :<%= model_class_name.tableize %>, :remember_me_token
|
6
|
+
add_index :<%= model_class_name.tableize %>, :remember_me_token
|
14
7
|
end
|
15
8
|
end
|
@@ -1,17 +1,9 @@
|
|
1
1
|
class SorceryResetPassword < ActiveRecord::Migration
|
2
|
-
def
|
2
|
+
def change
|
3
3
|
add_column :<%= model_class_name.tableize %>, :reset_password_token, :string, :default => nil
|
4
4
|
add_column :<%= model_class_name.tableize %>, :reset_password_token_expires_at, :datetime, :default => nil
|
5
5
|
add_column :<%= model_class_name.tableize %>, :reset_password_email_sent_at, :datetime, :default => nil
|
6
|
-
|
7
|
-
add_index :<%= model_class_name.tableize %>, :reset_password_token
|
8
|
-
end
|
9
6
|
|
10
|
-
|
11
|
-
remove_index :<%= model_class_name.tableize %>, :reset_password_token
|
12
|
-
|
13
|
-
remove_column :<%= model_class_name.tableize %>, :reset_password_email_sent_at
|
14
|
-
remove_column :<%= model_class_name.tableize %>, :reset_password_token_expires_at
|
15
|
-
remove_column :<%= model_class_name.tableize %>, :reset_password_token
|
7
|
+
add_index :<%= model_class_name.tableize %>, :reset_password_token
|
16
8
|
end
|
17
9
|
end
|
@@ -1,17 +1,9 @@
|
|
1
1
|
class SorceryUserActivation < ActiveRecord::Migration
|
2
|
-
def
|
2
|
+
def change
|
3
3
|
add_column :<%= model_class_name.tableize %>, :activation_state, :string, :default => nil
|
4
4
|
add_column :<%= model_class_name.tableize %>, :activation_token, :string, :default => nil
|
5
5
|
add_column :<%= model_class_name.tableize %>, :activation_token_expires_at, :datetime, :default => nil
|
6
|
-
|
7
|
-
add_index :<%= model_class_name.tableize %>, :activation_token
|
8
|
-
end
|
9
6
|
|
10
|
-
|
11
|
-
remove_index :<%= model_class_name.tableize %>, :activation_token
|
12
|
-
|
13
|
-
remove_column :<%= model_class_name.tableize %>, :activation_token_expires_at
|
14
|
-
remove_column :<%= model_class_name.tableize %>, :activation_token
|
15
|
-
remove_column :<%= model_class_name.tableize %>, :activation_state
|
7
|
+
add_index :<%= model_class_name.tableize %>, :activation_token
|
16
8
|
end
|
17
9
|
end
|
data/lib/sorcery/controller.rb
CHANGED
@@ -33,7 +33,7 @@ module Sorcery
|
|
33
33
|
user = user_class.authenticate(*credentials)
|
34
34
|
if user
|
35
35
|
old_session = session.dup.to_hash
|
36
|
-
|
36
|
+
reset_sorcery_session
|
37
37
|
old_session.each_pair do |k,v|
|
38
38
|
session[k.to_sym] = v
|
39
39
|
end
|
@@ -48,12 +48,20 @@ module Sorcery
|
|
48
48
|
end
|
49
49
|
end
|
50
50
|
|
51
|
+
# put this into the catch block to rescue undefined method `destroy_session'
|
52
|
+
# hotfix for https://github.com/NoamB/sorcery/issues/464
|
53
|
+
# can be removed when Rails 4.1 is out
|
54
|
+
def reset_sorcery_session
|
55
|
+
reset_session # protect from session fixation attacks
|
56
|
+
rescue NoMethodError
|
57
|
+
end
|
58
|
+
|
51
59
|
# Resets the session and runs hooks before and after.
|
52
60
|
def logout
|
53
61
|
if logged_in?
|
54
62
|
@current_user = current_user if @current_user.nil?
|
55
63
|
before_logout!(@current_user)
|
56
|
-
|
64
|
+
reset_sorcery_session
|
57
65
|
after_logout!
|
58
66
|
@current_user = nil
|
59
67
|
end
|
@@ -66,7 +74,11 @@ module Sorcery
|
|
66
74
|
# attempts to auto-login from the sources defined (session, basic_auth, cookie, etc.)
|
67
75
|
# returns the logged in user if found, false if not (using old restful-authentication trick, nil != false).
|
68
76
|
def current_user
|
69
|
-
|
77
|
+
if @current_user == false
|
78
|
+
false
|
79
|
+
else
|
80
|
+
@current_user ||= login_from_session || login_from_other_sources
|
81
|
+
end
|
70
82
|
end
|
71
83
|
|
72
84
|
def current_user=(user)
|
@@ -91,7 +103,7 @@ module Sorcery
|
|
91
103
|
#
|
92
104
|
# @param [<User-Model>] user the user instance.
|
93
105
|
# @return - do not depend on the return value.
|
94
|
-
def auto_login(user)
|
106
|
+
def auto_login(user, should_remember = false)
|
95
107
|
session[:user_id] = user.id
|
96
108
|
@current_user = user
|
97
109
|
end
|
@@ -39,10 +39,11 @@ module Sorcery
|
|
39
39
|
|
40
40
|
# get the login URL from the provider, if applicable. Returns nil if the provider
|
41
41
|
# does not provide a login URL. (as of v0.8.1 all providers provide a login URL)
|
42
|
-
def sorcery_login_url(provider_name)
|
42
|
+
def sorcery_login_url(provider_name, args = {})
|
43
43
|
@provider = sorcery_get_provider provider_name
|
44
44
|
sorcery_fixup_callback_url @provider
|
45
45
|
if @provider.respond_to?(:login_url) && @provider.has_callback?
|
46
|
+
@provider.state = args[:state] if args[:state]
|
46
47
|
return @provider.login_url(params, session)
|
47
48
|
else
|
48
49
|
return nil
|
@@ -89,22 +90,22 @@ module Sorcery
|
|
89
90
|
# sends user to authenticate at the provider's website.
|
90
91
|
# after authentication the user is redirected to the callback defined in the provider config
|
91
92
|
def login_at(provider_name, args = {})
|
92
|
-
redirect_to sorcery_login_url(provider_name)
|
93
|
+
redirect_to sorcery_login_url(provider_name, args)
|
93
94
|
end
|
94
95
|
|
95
96
|
# tries to login the user from provider's callback
|
96
|
-
def login_from(provider_name)
|
97
|
+
def login_from(provider_name, should_remember = false)
|
97
98
|
sorcery_fetch_user_hash provider_name
|
98
|
-
|
99
|
+
|
99
100
|
if user = user_class.load_from_provider(provider_name, @user_hash[:uid].to_s)
|
100
101
|
# we found the user.
|
101
102
|
# clear the session
|
102
103
|
return_to_url = session[:return_to_url]
|
103
|
-
|
104
|
+
reset_sorcery_session
|
104
105
|
session[:return_to_url] = return_to_url
|
105
106
|
|
106
107
|
# sign in the user
|
107
|
-
auto_login(user)
|
108
|
+
auto_login(user, should_remember)
|
108
109
|
after_login!(user)
|
109
110
|
|
110
111
|
# return the user
|
@@ -118,8 +119,8 @@ module Sorcery
|
|
118
119
|
config = user_class.sorcery_config
|
119
120
|
|
120
121
|
# first check to see if user has a particular authentication already
|
121
|
-
unless (current_user.send(config.authentications_class.
|
122
|
-
user = current_user.send(config.authentications_class.
|
122
|
+
unless (current_user.send(config.authentications_class.name.underscore.pluralize).send("find_by_#{config.provider_attribute_name}_and_#{config.provider_uid_attribute_name}", provider_name, @user_hash[:uid].to_s))
|
123
|
+
user = current_user.send(config.authentications_class.name.underscore.pluralize).build(config.provider_uid_attribute_name => @user_hash[:uid], config.provider_attribute_name => provider_name.to_s)
|
123
124
|
user.save(:validate => false)
|
124
125
|
else
|
125
126
|
user = false
|