sorcery 0.8.2 → 0.9.0
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.
- checksums.yaml +7 -0
- data/.gitignore +56 -0
- data/.travis.yml +130 -1
- data/CHANGELOG.md +270 -0
- data/Gemfile +17 -22
- data/README.md +371 -0
- data/Rakefile +3 -79
- data/gemfiles/active_record-rails40.gemfile +7 -0
- data/gemfiles/active_record-rails41.gemfile +7 -0
- data/gemfiles/mongo_mapper-rails40.gemfile +9 -0
- data/gemfiles/mongo_mapper-rails41.gemfile +9 -0
- data/gemfiles/mongoid-rails40.gemfile +9 -0
- data/gemfiles/mongoid-rails41.gemfile +9 -0
- data/gemfiles/mongoid3-rails32.gemfile +9 -0
- data/lib/generators/sorcery/USAGE +1 -1
- data/lib/generators/sorcery/helpers.rb +40 -0
- data/lib/generators/sorcery/install_generator.rb +38 -20
- data/lib/generators/sorcery/templates/initializer.rb +35 -10
- data/lib/generators/sorcery/templates/migration/activity_logging.rb +2 -11
- data/lib/generators/sorcery/templates/migration/brute_force_protection.rb +3 -7
- data/lib/generators/sorcery/templates/migration/core.rb +5 -8
- data/lib/generators/sorcery/templates/migration/external.rb +3 -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/adapters/active_record_adapter.rb +120 -0
- data/lib/sorcery/adapters/base_adapter.rb +30 -0
- data/lib/sorcery/adapters/data_mapper_adapter.rb +176 -0
- data/lib/sorcery/adapters/mongo_mapper_adapter.rb +110 -0
- data/lib/sorcery/adapters/mongoid_adapter.rb +97 -0
- data/lib/sorcery/controller/config.rb +65 -0
- data/lib/sorcery/controller/submodules/activity_logging.rb +16 -21
- data/lib/sorcery/controller/submodules/brute_force_protection.rb +6 -6
- data/lib/sorcery/controller/submodules/external.rb +42 -43
- data/lib/sorcery/controller/submodules/remember_me.rb +5 -5
- data/lib/sorcery/controller/submodules/session_timeout.rb +11 -7
- data/lib/sorcery/controller.rb +22 -74
- data/lib/sorcery/model/config.rb +96 -0
- data/lib/sorcery/model/submodules/activity_logging.rb +30 -13
- data/lib/sorcery/model/submodules/brute_force_protection.rb +25 -27
- data/lib/sorcery/model/submodules/external.rb +53 -9
- data/lib/sorcery/model/submodules/remember_me.rb +15 -19
- data/lib/sorcery/model/submodules/reset_password.rb +36 -33
- data/lib/sorcery/model/submodules/user_activation.rb +51 -48
- data/lib/sorcery/model/temporary_token.rb +4 -4
- data/lib/sorcery/model.rb +81 -175
- data/lib/sorcery/protocols/oauth.rb +42 -0
- data/lib/sorcery/protocols/oauth2.rb +47 -0
- data/lib/sorcery/providers/base.rb +38 -0
- data/lib/sorcery/providers/facebook.rb +63 -0
- data/lib/sorcery/providers/github.rb +51 -0
- data/lib/sorcery/providers/google.rb +51 -0
- data/lib/sorcery/providers/heroku.rb +57 -0
- data/lib/sorcery/providers/jira.rb +77 -0
- data/lib/sorcery/providers/linkedin.rb +66 -0
- data/lib/sorcery/providers/liveid.rb +53 -0
- data/lib/sorcery/providers/salesforce.rb +50 -0
- data/lib/sorcery/providers/twitter.rb +59 -0
- data/lib/sorcery/providers/vk.rb +63 -0
- data/lib/sorcery/providers/xing.rb +64 -0
- data/lib/sorcery/test_helpers/internal/rails.rb +17 -6
- data/lib/sorcery/test_helpers/internal.rb +27 -6
- data/lib/sorcery/test_helpers/rails/controller.rb +21 -0
- data/lib/sorcery/test_helpers/rails/integration.rb +26 -0
- data/lib/sorcery/version.rb +3 -0
- data/lib/sorcery.rb +82 -58
- data/sorcery.gemspec +24 -362
- data/spec/active_record/user_activation_spec.rb +18 -0
- data/spec/active_record/user_activity_logging_spec.rb +17 -0
- data/spec/{rails3/spec → active_record}/user_brute_force_protection_spec.rb +6 -5
- data/spec/{rails3/spec → active_record}/user_oauth_spec.rb +6 -5
- data/spec/{rails3/spec → active_record}/user_remember_me_spec.rb +5 -4
- data/spec/{rails3/spec → active_record}/user_reset_password_spec.rb +7 -7
- data/spec/active_record/user_spec.rb +37 -0
- data/spec/controllers/controller_activity_logging_spec.rb +124 -0
- data/spec/controllers/controller_brute_force_protection_spec.rb +43 -0
- data/spec/controllers/controller_http_basic_auth_spec.rb +68 -0
- data/spec/controllers/controller_oauth2_spec.rb +414 -0
- data/spec/controllers/controller_oauth_spec.rb +240 -0
- data/spec/controllers/controller_remember_me_spec.rb +117 -0
- data/spec/controllers/controller_session_timeout_spec.rb +80 -0
- data/spec/controllers/controller_spec.rb +218 -0
- data/spec/data_mapper/user_activation_spec.rb +10 -0
- data/spec/data_mapper/user_activity_logging_spec.rb +14 -0
- data/spec/data_mapper/user_brute_force_protection_spec.rb +9 -0
- data/spec/data_mapper/user_oauth_spec.rb +9 -0
- data/spec/data_mapper/user_remember_me_spec.rb +8 -0
- data/spec/data_mapper/user_reset_password_spec.rb +8 -0
- data/spec/data_mapper/user_spec.rb +27 -0
- data/spec/mongo_mapper/user_activation_spec.rb +9 -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/mongo_mapper/user_spec.rb +37 -0
- data/spec/mongoid/user_activation_spec.rb +9 -0
- data/spec/mongoid/user_activity_logging_spec.rb +8 -0
- data/spec/mongoid/user_brute_force_protection_spec.rb +8 -0
- data/spec/mongoid/user_oauth_spec.rb +8 -0
- data/spec/mongoid/user_remember_me_spec.rb +8 -0
- data/spec/mongoid/user_reset_password_spec.rb +8 -0
- data/spec/mongoid/user_spec.rb +51 -0
- data/spec/orm/active_record.rb +21 -0
- data/spec/orm/data_mapper.rb +48 -0
- data/spec/orm/mongo_mapper.rb +10 -0
- data/spec/orm/mongoid.rb +22 -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/rails_app/app/controllers/sorcery_controller.rb +285 -0
- data/spec/rails_app/app/data_mapper/authentication.rb +8 -0
- data/spec/rails_app/app/data_mapper/user.rb +7 -0
- data/spec/{rails3_mongo_mapper/app/models → rails_app/app/mongo_mapper}/user.rb +2 -0
- data/spec/{rails3_mongoid/app/models → rails_app/app/mongoid}/user.rb +2 -0
- data/spec/{rails3_mongo_mapper → 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_mongo_mapper → rails_app}/config/environments/test.rb +2 -0
- data/spec/{rails3_mongoid → rails_app}/config/initializers/session_store.rb +4 -0
- data/spec/rails_app/config/routes.rb +51 -0
- data/spec/{rails3_mongo_mapper → rails_app}/config.ru +1 -1
- data/spec/{rails3 → rails_app}/db/migrate/activation/20101224223622_add_activation_to_users.rb +3 -3
- data/spec/{rails3 → rails_app}/db/migrate/core/20101224223620_create_users.rb +2 -2
- data/spec/rails_app/db/migrate/external/20101224223628_create_authentications_and_user_providers.rb +22 -0
- data/spec/rails_app/log/development.log +1791 -0
- data/spec/shared_examples/user_activation_shared_examples.rb +137 -98
- data/spec/shared_examples/user_activity_logging_shared_examples.rb +83 -15
- data/spec/shared_examples/user_brute_force_protection_shared_examples.rb +140 -21
- data/spec/shared_examples/user_oauth_shared_examples.rb +21 -16
- data/spec/shared_examples/user_remember_me_shared_examples.rb +36 -24
- data/spec/shared_examples/user_reset_password_shared_examples.rb +163 -130
- data/spec/shared_examples/user_shared_examples.rb +355 -193
- data/spec/sorcery_crypto_providers_spec.rb +74 -72
- data/spec/spec_helper.rb +32 -4
- metadata +262 -508
- data/Gemfile.lock +0 -175
- data/README.rdoc +0 -261
- data/VERSION +0 -1
- data/lib/sorcery/controller/submodules/external/protocols/oauth1.rb +0 -46
- data/lib/sorcery/controller/submodules/external/protocols/oauth2.rb +0 -49
- data/lib/sorcery/controller/submodules/external/providers/base.rb +0 -21
- data/lib/sorcery/controller/submodules/external/providers/facebook.rb +0 -98
- data/lib/sorcery/controller/submodules/external/providers/github.rb +0 -92
- data/lib/sorcery/controller/submodules/external/providers/google.rb +0 -91
- data/lib/sorcery/controller/submodules/external/providers/linkedin.rb +0 -102
- data/lib/sorcery/controller/submodules/external/providers/liveid.rb +0 -92
- data/lib/sorcery/controller/submodules/external/providers/twitter.rb +0 -93
- data/lib/sorcery/controller/submodules/external/providers/vk.rb +0 -100
- data/lib/sorcery/controller/submodules/external/providers/xing.rb +0 -97
- data/lib/sorcery/model/adapters/active_record.rb +0 -49
- data/lib/sorcery/model/adapters/mongo_mapper.rb +0 -56
- data/lib/sorcery/model/adapters/mongoid.rb +0 -88
- data/lib/sorcery/test_helpers/rails.rb +0 -16
- data/lib/sorcery/test_helpers.rb +0 -5
- 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/app/controllers/application_controller.rb +0 -208
- 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/initializers/session_store.rb +0 -8
- data/spec/rails3/config/routes.rb +0 -59
- data/spec/rails3/config.ru +0 -4
- data/spec/rails3/db/migrate/external/20101224223628_create_authentications.rb +0 -14
- data/spec/rails3/lib/tasks/.gitkeep +0 -0
- data/spec/rails3/public/404.html +0 -26
- data/spec/rails3/public/422.html +0 -26
- data/spec/rails3/public/500.html +0 -26
- data/spec/rails3/public/favicon.ico +0 -0
- data/spec/rails3/public/images/rails.png +0 -0
- data/spec/rails3/public/javascripts/application.js +0 -2
- data/spec/rails3/public/javascripts/controls.js +0 -965
- data/spec/rails3/public/javascripts/dragdrop.js +0 -974
- data/spec/rails3/public/javascripts/effects.js +0 -1123
- data/spec/rails3/public/javascripts/prototype.js +0 -6001
- data/spec/rails3/public/javascripts/rails.js +0 -175
- data/spec/rails3/public/robots.txt +0 -5
- data/spec/rails3/public/stylesheets/.gitkeep +0 -0
- data/spec/rails3/script/rails +0 -6
- data/spec/rails3/spec/controller_activity_logging_spec.rb +0 -130
- data/spec/rails3/spec/controller_brute_force_protection_spec.rb +0 -96
- data/spec/rails3/spec/controller_http_basic_auth_spec.rb +0 -50
- data/spec/rails3/spec/controller_oauth2_spec.rb +0 -380
- data/spec/rails3/spec/controller_oauth_spec.rb +0 -206
- data/spec/rails3/spec/controller_remember_me_spec.rb +0 -96
- data/spec/rails3/spec/controller_session_timeout_spec.rb +0 -55
- data/spec/rails3/spec/controller_spec.rb +0 -182
- data/spec/rails3/spec/integration_spec.rb +0 -23
- 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_activation_spec.rb +0 -16
- data/spec/rails3/spec/user_activity_logging_spec.rb +0 -8
- data/spec/rails3/spec/user_spec.rb +0 -36
- 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/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/controller_spec.rb +0 -175
- 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/spec/user_spec.rb +0 -37
- 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/application.rb +0 -51
- 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/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/config.ru +0 -4
- 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/controller_activity_logging_spec.rb +0 -111
- data/spec/rails3_mongoid/spec/controller_spec.rb +0 -186
- 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/spec/user_spec.rb +0 -38
- data/spec/rails3_mongoid/vendor/plugins/.gitkeep +0 -0
- data/spec/shared_examples/controller_oauth2_shared_examples.rb +0 -56
- data/spec/shared_examples/controller_oauth_shared_examples.rb +0 -55
- /data/lib/sorcery/{controller/submodules/external/protocols → protocols}/certs/ca-bundle.crt +0 -0
- /data/spec/{rails3/app/models → rails_app/app/active_record}/authentication.rb +0 -0
- /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_mongoid/app/models → rails_app/app/mongoid}/authentication.rb +0 -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 → rails_app}/config/environment.rb +0 -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/locales/en.yml +0 -0
- /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/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/README.md
ADDED
|
@@ -0,0 +1,371 @@
|
|
|
1
|
+
[](https://travis-ci.org/NoamB/sorcery)
|
|
2
|
+
[](https://codeclimate.com/github/NoamB/sorcery)
|
|
3
|
+
[](http://inch-ci.org/github/NoamB/sorcery)
|
|
4
|
+
|
|
5
|
+
# sorcery
|
|
6
|
+
Magical Authentication for Rails 3 and 4. Supports ActiveRecord,
|
|
7
|
+
DataMapper, Mongoid and MongoMapper.
|
|
8
|
+
|
|
9
|
+
Inspired by restful_authentication, Authlogic and Devise. Crypto code taken
|
|
10
|
+
almost unchanged from Authlogic. OAuth code inspired by OmniAuth and Ryan
|
|
11
|
+
Bates's railscasts about it.
|
|
12
|
+
|
|
13
|
+
**What's happening now?** We are working on 1.0 version, which will include some API-breaking changes. It should be released about April 2015.
|
|
14
|
+
Until then we'll continue releasing `0.9.x` version with bug fixed.
|
|
15
|
+
|
|
16
|
+
**Rails 4 status:** [Sorcery 0.9.0](http://rubygems.org/gems/sorcery/versions/0.9.0) is fully tested and ready for Rails 4.0, 4.1 and 4.2.
|
|
17
|
+
**Mongoid status:** Version 0.9.0 works with Mongoid 4.
|
|
18
|
+
|
|
19
|
+
https://github.com/NoamB/sorcery/wiki/Simple-Password-Authentication
|
|
20
|
+
|
|
21
|
+
## Philosophy
|
|
22
|
+
|
|
23
|
+
Sorcery is a stripped-down, bare-bones authentication library, with which you
|
|
24
|
+
can write your own authentication flow. It was built with a few goals in mind:
|
|
25
|
+
|
|
26
|
+
* Less is more - less than 20 public methods to remember for the entire
|
|
27
|
+
feature-set make the lib easy to 'get'.
|
|
28
|
+
* No built-in or generated code - use the library's methods inside *your
|
|
29
|
+
own* MVC structures, and don't fight to fix someone else's.
|
|
30
|
+
* Magic yes, Voodoo no - the lib should be easy to hack for most developers.
|
|
31
|
+
* Configuration over Confusion - Centralized (1 file), Simple & short
|
|
32
|
+
configuration as possible, not drowning in syntactic sugar.
|
|
33
|
+
* Keep MVC cleanly separated - DB is for models, sessions are for
|
|
34
|
+
controllers. Models stay unaware of sessions.
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
Hopefully, I've achieved this. If not, let me know.
|
|
38
|
+
|
|
39
|
+
## Useful Links
|
|
40
|
+
|
|
41
|
+
[Documentation](http://rubydoc.info/gems/sorcery) |
|
|
42
|
+
[Railscast](http://railscasts.com/episodes/283-authentication-with-sorcery) | [Simple tutorial](https://github.com/NoamB/sorcery/wiki/Simple-Password-Authentication) | [Example Rails 3 app](https://github.com/NoamB/sorcery-example-app)
|
|
43
|
+
|
|
44
|
+
Check out the tutorials in the [Wiki](https://github.com/NoamB/sorcery/wiki) for more!
|
|
45
|
+
|
|
46
|
+
## API Summary
|
|
47
|
+
|
|
48
|
+
Below is a summary of the library methods. Most method names are self
|
|
49
|
+
explaining and the rest are commented:
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
### core
|
|
53
|
+
```ruby
|
|
54
|
+
require_login # this is a before filter
|
|
55
|
+
login(email, password, remember_me = false)
|
|
56
|
+
auto_login(user)# login without credentials
|
|
57
|
+
logout
|
|
58
|
+
logged_in? # available to view
|
|
59
|
+
current_user # available to view
|
|
60
|
+
redirect_back_or_to # used when a user tries to access a page while logged out, is asked to login, and we want to return him back to the page he originally wanted.
|
|
61
|
+
@user.external? # external users, such as facebook/twitter etc.
|
|
62
|
+
User.authenticates_with_sorcery!
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### http basic auth
|
|
66
|
+
```ruby
|
|
67
|
+
require_login_from_http_basic # this is a before filter
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### external
|
|
71
|
+
```ruby
|
|
72
|
+
login_at(provider) # sends the user to an external service (twitter etc.) to authenticate.
|
|
73
|
+
login_from(provider) # tries to login from the external provider's callback.
|
|
74
|
+
create_from(provider) # create the user in the local app db.
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### remember me
|
|
78
|
+
```ruby
|
|
79
|
+
auto_login(user, should_remember=false) # login without credentials, optional remember_me
|
|
80
|
+
remember_me!
|
|
81
|
+
forget_me!
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### reset password
|
|
85
|
+
```ruby
|
|
86
|
+
User.load_from_reset_password_token(token)
|
|
87
|
+
@user.generate_reset_password_token! # if you want to send the email by youself
|
|
88
|
+
@user.deliver_reset_password_instructions! # generates the token and sends the email
|
|
89
|
+
@user.change_password!(new_password)
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### user activation
|
|
93
|
+
```ruby
|
|
94
|
+
User.load_from_activation_token(token)
|
|
95
|
+
@user.setup_activation
|
|
96
|
+
@user.activate!
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Please see the tutorials in the github wiki for detailed usage information.
|
|
100
|
+
|
|
101
|
+
## Installation
|
|
102
|
+
|
|
103
|
+
If using bundler, first add 'sorcery' to your Gemfile:
|
|
104
|
+
|
|
105
|
+
```ruby
|
|
106
|
+
gem "sorcery"
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
And run
|
|
110
|
+
|
|
111
|
+
```ruby
|
|
112
|
+
bundle install
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
Otherwise simply
|
|
116
|
+
|
|
117
|
+
```ruby
|
|
118
|
+
gem install sorcery
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
## Rails configuration
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
rails generate sorcery:install
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
This will generate the core migration file, the initializer file and the
|
|
128
|
+
'User' model class.
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
rails generate sorcery:install remember_me reset_password
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
This will generate the migrations files for remember_me and reset_password
|
|
135
|
+
submodules and will create the initializer file (and add submodules to it),
|
|
136
|
+
and create the 'User' model class.
|
|
137
|
+
|
|
138
|
+
```bash
|
|
139
|
+
rails generate sorcery:install --model Person
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
This will generate the core migration file, the initializer and change the
|
|
143
|
+
model class (in the initializer and migration files) to the class 'Person'
|
|
144
|
+
(and its pluralized version, 'people')
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
rails generate sorcery:install http_basic_auth external remember_me --only-submodules
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
This will generate only the migration files for the specified submodules and
|
|
151
|
+
will add them to the initializer file.
|
|
152
|
+
|
|
153
|
+
Inside the initializer, the comments will tell you what each setting does.
|
|
154
|
+
|
|
155
|
+
## DelayedJob Integration
|
|
156
|
+
|
|
157
|
+
By default emails are sent synchronously. You can send them asynchronously by
|
|
158
|
+
using the [delayed_job gem](https://github.com/collectiveidea/delayed_job).
|
|
159
|
+
|
|
160
|
+
After implementing the `delayed_job` into your project add the code below at
|
|
161
|
+
the end of the `config/initializers/sorcery.rb` file. After that all emails
|
|
162
|
+
will be sent asynchronously.
|
|
163
|
+
|
|
164
|
+
```ruby
|
|
165
|
+
module Sorcery
|
|
166
|
+
module Model
|
|
167
|
+
module InstanceMethods
|
|
168
|
+
def generic_send_email(method, mailer)
|
|
169
|
+
config = sorcery_config
|
|
170
|
+
mail = config.send(mailer).delay.send(config.send(method), self)
|
|
171
|
+
end
|
|
172
|
+
end
|
|
173
|
+
end
|
|
174
|
+
end
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
Sidekiq and Resque integrations are coming soon.
|
|
178
|
+
|
|
179
|
+
## Single Table Inheritance (STI) Support
|
|
180
|
+
STI is supported via a single setting in config/initializers/sorcery.rb.
|
|
181
|
+
|
|
182
|
+
## Full Features List by module
|
|
183
|
+
|
|
184
|
+
**Core** (see [lib/sorcery/model.rb](https://github.com/NoamB/sorcery/blob/master/lib/sorcery/model.rb) and
|
|
185
|
+
[lib/sorcery/controller.rb](https://github.com/NoamB/sorcery/blob/master/lib/sorcery/controller.rb)):
|
|
186
|
+
|
|
187
|
+
* login/logout, optional return user to requested url on login, configurable
|
|
188
|
+
redirect for non-logged-in users.
|
|
189
|
+
* password encryption, algorithms: bcrypt(default), md5, sha1, sha256,
|
|
190
|
+
sha512, aes256, custom(yours!), none. Configurable stretches and salt.
|
|
191
|
+
* configurable attribute names for username, password and email.
|
|
192
|
+
* allow multiple fields to serve as username.
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
**User Activation** (see [lib/sorcery/model/submodules/user_activation.rb](https://github.com/NoamB/sorcery/blob/master/lib/sorcery/model/submodules/user_activation.rb)):
|
|
196
|
+
|
|
197
|
+
* User activation by email with optional success email.
|
|
198
|
+
* configurable attribute names.
|
|
199
|
+
* configurable mailer, method name, and attribute name.
|
|
200
|
+
* configurable temporary token expiration.
|
|
201
|
+
* Optionally prevent non-active users to login.
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
**Reset Password** (see [lib/sorcery/model/submodules/reset_password.rb](https://github.com/NoamB/sorcery/blob/master/lib/sorcery/model/submodules/reset_password.rb)):
|
|
205
|
+
|
|
206
|
+
* Reset password with email verification.
|
|
207
|
+
* configurable mailer, method name, and attribute name.
|
|
208
|
+
* configurable temporary token expiration.
|
|
209
|
+
* configurable time between emails (hammering protection).
|
|
210
|
+
|
|
211
|
+
|
|
212
|
+
**Remember Me** (see [lib/sorcery/model/submodules/remember_me.rb](https://github.com/NoamB/sorcery/blob/master/lib/sorcery/model/submodules/remember_me.rb)):
|
|
213
|
+
|
|
214
|
+
* Remember me with configurable expiration.
|
|
215
|
+
* configurable attribute names.
|
|
216
|
+
|
|
217
|
+
|
|
218
|
+
**Session Timeout** (see [lib/sorcery/controller/submodules/session_timeout.rb](https://github.com/NoamB/sorcery/blob/master/lib/sorcery/controller/submodules/session_timeout.rb)):
|
|
219
|
+
|
|
220
|
+
* Configurable session timeout.
|
|
221
|
+
* Optionally session timeout will be calculated from last user action.
|
|
222
|
+
|
|
223
|
+
|
|
224
|
+
**Brute Force Protection** (see [lib/sorcery/model/submodules/brute_force_protection.rb](https://github.com/NoamB/sorcery/blob/master/lib/sorcery/model/submodules/brute_force_protection.rb)):
|
|
225
|
+
|
|
226
|
+
* Brute force login hammering protection.
|
|
227
|
+
* configurable logins before lock and lock duration.
|
|
228
|
+
|
|
229
|
+
|
|
230
|
+
**Basic HTTP Authentication** (see [lib/sorcery/controller/submodules/http_basic_auth.rb](https://github.com/NoamB/sorcery/blob/master/lib/sorcery/controller/submodules/http_basic_auth.rb)):
|
|
231
|
+
|
|
232
|
+
* A before filter for requesting authentication with HTTP Basic.
|
|
233
|
+
* automatic login from HTTP Basic.
|
|
234
|
+
* automatic login is disabled if session key changed.
|
|
235
|
+
|
|
236
|
+
|
|
237
|
+
**Activity Logging** (see [lib/sorcery/model/submodules/activity_logging.rb](https://github.com/NoamB/sorcery/blob/master/lib/sorcery/model/submodules/activity_logging.rb)):
|
|
238
|
+
|
|
239
|
+
* automatic logging of last login, last logout, last activity time and IP
|
|
240
|
+
address for last login.
|
|
241
|
+
* an easy method of collecting the list of currently logged in users.
|
|
242
|
+
* configurable timeout by which to decide whether to include a user in the
|
|
243
|
+
list of logged in users.
|
|
244
|
+
|
|
245
|
+
|
|
246
|
+
**External** (see [lib/sorcery/controller/submodules/external.rb](https://github.com/NoamB/sorcery/blob/master/lib/sorcery/controller/submodules/external.rb)):
|
|
247
|
+
|
|
248
|
+
* OAuth1 and OAuth2 support (currently: Twitter, Facebook, Github, Google, Heroku,
|
|
249
|
+
LinkedIn, VK, LiveID, Xing, and Salesforce)
|
|
250
|
+
* configurable db field names and authentications table.
|
|
251
|
+
|
|
252
|
+
|
|
253
|
+
## Next Planned Features
|
|
254
|
+
|
|
255
|
+
I've got some thoughts which include (unordered):
|
|
256
|
+
|
|
257
|
+
* Passing a block to encrypt, allowing the developer to define his own mix
|
|
258
|
+
of salting and encrypting
|
|
259
|
+
* Forgot username, maybe as part of the reset_password module
|
|
260
|
+
* Scoping logins (to a subdomain or another arbitrary field)
|
|
261
|
+
* Allowing storing the salt and crypted password in the same DB field for
|
|
262
|
+
extra security
|
|
263
|
+
* Other reset password strategies (security questions?)
|
|
264
|
+
* Other brute force protection strategies (captcha)
|
|
265
|
+
|
|
266
|
+
|
|
267
|
+
Have an idea? Let me know, and it might get into the gem!
|
|
268
|
+
|
|
269
|
+
## Backward compatibility
|
|
270
|
+
|
|
271
|
+
While the lib is young and evolving fast I'm breaking backward compatibility
|
|
272
|
+
quite often. I'm constantly finding better ways to do things and throwing away
|
|
273
|
+
old ways. To let you know when things are changing in a non-compatible way,
|
|
274
|
+
I'm bumping the minor version of the gem. The patch version changes are
|
|
275
|
+
backward compatible.
|
|
276
|
+
|
|
277
|
+
In short, an app that works with x.3.1 should be able to upgrade to x.3.2 with
|
|
278
|
+
no code changes. The same cannot be said about upgrading to x.4.0 and above,
|
|
279
|
+
however.
|
|
280
|
+
|
|
281
|
+
## DataMapper Support
|
|
282
|
+
|
|
283
|
+
Important notes:
|
|
284
|
+
|
|
285
|
+
* Expected to work with DM adapters: dm-mysql-adapter,
|
|
286
|
+
dm-redis-adapter.
|
|
287
|
+
* Submodules DM adapter dependent: activity_logging (dm-mysql-adapter)
|
|
288
|
+
* Usage: include DataMapper::Resource in user model, follow sorcery
|
|
289
|
+
instructions (remember to add property id, validators and accessor
|
|
290
|
+
attributes such as password and password_confirmation)
|
|
291
|
+
* Option downcase__username_before_authenticating and dm-mysql,
|
|
292
|
+
http://datamapper.lighthouseapp.com/projects/20609/tickets/1105-add-support-for-definingchanging-default-collation
|
|
293
|
+
|
|
294
|
+
## Upgrading
|
|
295
|
+
|
|
296
|
+
Important notes while upgrading:
|
|
297
|
+
|
|
298
|
+
* If you are upgrading from <= **0.8.6** and you use Sorcery model methods in your app,
|
|
299
|
+
you might need to change them from `user.method` to `user.sorcery_adapter.method` and from
|
|
300
|
+
`User.method` to `User.sorcery_adapter_method`
|
|
301
|
+
|
|
302
|
+
* If you are upgrading from <= **0.8.5** and you're using Sorcery test helpers,
|
|
303
|
+
you need to change the way you include them to following code:
|
|
304
|
+
|
|
305
|
+
```ruby
|
|
306
|
+
RSpec.configure do |config|
|
|
307
|
+
config.include Sorcery::TestHelpers::Rails::Controller, type: :controller
|
|
308
|
+
config.include Sorcery::TestHelpers::Rails::Integration, type: :feature
|
|
309
|
+
end
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
* If are upgrading to **0.8.2** and use activity_logging feature with
|
|
313
|
+
ActiveRecord, you will have to add a new column
|
|
314
|
+
`last_login_from_ip_address`
|
|
315
|
+
[#465](https://github.com/NoamB/sorcery/issues/465)
|
|
316
|
+
* Sinatra support existed until **v0.7.0** (including), but was dropped
|
|
317
|
+
later due to being a maintenance nightmare.
|
|
318
|
+
* If upgrading from <= **0.6.1 to >= **0.7.0** you need to change
|
|
319
|
+
'username
|
|
320
|
+
_attribute_name' to 'username_attribute_names' in initializer.
|
|
321
|
+
* If upgrading from <= **v0.5.1** to >= **v0.5.2** you need to explicitly
|
|
322
|
+
set your user_class model in the initializer file.
|
|
323
|
+
|
|
324
|
+
```ruby
|
|
325
|
+
# This line must come after the 'user config' block.
|
|
326
|
+
config.user_class = User
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
|
|
330
|
+
## Contributing to sorcery
|
|
331
|
+
|
|
332
|
+
Your feedback is very welcome and will make this gem much much better for you,
|
|
333
|
+
me and everyone else. Besides feedback on code, features, suggestions and bug
|
|
334
|
+
reports, you may want to actually make an impact on the code. For this:
|
|
335
|
+
|
|
336
|
+
* Fork it.
|
|
337
|
+
* Fix it.
|
|
338
|
+
* Test it.
|
|
339
|
+
* Commit it.
|
|
340
|
+
* Send me a pull request so I'll... Pull it.
|
|
341
|
+
|
|
342
|
+
|
|
343
|
+
If you feel sorcery has made your life easier, and you would like to express
|
|
344
|
+
your thanks via a donation, my paypal email is in the contact details.
|
|
345
|
+
|
|
346
|
+
## Contact
|
|
347
|
+
|
|
348
|
+
Feel free to ask questions using these contact details:
|
|
349
|
+
|
|
350
|
+
#### Noam Ben-Ari
|
|
351
|
+
|
|
352
|
+
email: nbenari@gmail.com ( also for paypal )
|
|
353
|
+
|
|
354
|
+
twitter: @nbenari
|
|
355
|
+
|
|
356
|
+
#### Kir Shatrov
|
|
357
|
+
|
|
358
|
+
email: shatrov@me.com
|
|
359
|
+
|
|
360
|
+
twitter: @Kiiiir
|
|
361
|
+
|
|
362
|
+
#### Grzegorz Witek
|
|
363
|
+
|
|
364
|
+
email: arnvald.to@gmail.com
|
|
365
|
+
|
|
366
|
+
twitter: @arnvald
|
|
367
|
+
|
|
368
|
+
## Copyright
|
|
369
|
+
|
|
370
|
+
Copyright (c) 2010-2014 Noam Ben Ari (nbenari@gmail.com). See LICENSE.txt for
|
|
371
|
+
further details.
|
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
|
|
@@ -16,7 +16,7 @@ Examples:
|
|
|
16
16
|
This will generate the core migration file, the initializer and change the model class
|
|
17
17
|
(in the initializer and migration files) to the class 'Person' (and it's pluralized version, 'people')
|
|
18
18
|
|
|
19
|
-
rails generate sorcery:install http_basic_auth external remember_me --
|
|
19
|
+
rails generate sorcery:install http_basic_auth external remember_me --only-submodules
|
|
20
20
|
|
|
21
21
|
This will generate only the migration files for the specified submodules and will
|
|
22
22
|
add them to the initializer file.
|
|
@@ -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,35 @@
|
|
|
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",
|
|
18
|
+
:desc => "[DEPRECATED] Please use --only-submodules option instead"
|
|
19
|
+
|
|
20
|
+
class_option :only_submodules, :optional => true, :type => :boolean, :banner => "only-submodules",
|
|
16
21
|
: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
|
-
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def check_deprecated_options
|
|
25
|
+
if options[:migrations]
|
|
26
|
+
warn("[DEPRECATED] `--migrations` option is deprecated, please use `--only-submodules` instead")
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
19
30
|
# Copy the initializer file to config/initializers folder.
|
|
20
31
|
def copy_initializer_file
|
|
21
|
-
template "initializer.rb",
|
|
32
|
+
template "initializer.rb", sorcery_config_path unless only_submodules?
|
|
22
33
|
end
|
|
23
34
|
|
|
24
35
|
def configure_initializer_file
|
|
@@ -26,24 +37,33 @@ module Sorcery
|
|
|
26
37
|
if submodules
|
|
27
38
|
submodule_names = submodules.collect{ |submodule| ':' + submodule }
|
|
28
39
|
|
|
29
|
-
gsub_file
|
|
40
|
+
gsub_file sorcery_config_path, /submodules = \[.*\]/ do |str|
|
|
30
41
|
current_submodule_names = (str =~ /\[(.*)\]/ ? $1 : '').delete(' ').split(',')
|
|
31
42
|
"submodules = [#{(current_submodule_names | submodule_names).join(', ')}]"
|
|
32
43
|
end
|
|
33
44
|
end
|
|
45
|
+
end
|
|
34
46
|
|
|
35
|
-
|
|
36
|
-
unless
|
|
47
|
+
def configure_model
|
|
48
|
+
# Generate the model and add 'authenticates_with_sorcery!' unless you passed --only-submodules
|
|
49
|
+
unless only_submodules?
|
|
37
50
|
generate "model #{model_class_name} --skip-migration"
|
|
38
|
-
|
|
51
|
+
|
|
52
|
+
inject_sorcery_to_model
|
|
39
53
|
end
|
|
40
54
|
end
|
|
41
55
|
|
|
56
|
+
def inject_sorcery_to_model
|
|
57
|
+
indents = " " * (namespaced? ? 2 : 1)
|
|
58
|
+
|
|
59
|
+
inject_into_class(model_path, model_class_name, "#{indents}authenticates_with_sorcery!\n")
|
|
60
|
+
end
|
|
61
|
+
|
|
42
62
|
# Copy the migrations files to db/migrate folder
|
|
43
63
|
def copy_migration_files
|
|
44
|
-
# Copy core migration file in all cases except when you pass --
|
|
64
|
+
# Copy core migration file in all cases except when you pass --only-submodules.
|
|
45
65
|
return unless defined?(Sorcery::Generators::InstallGenerator::ActiveRecord)
|
|
46
|
-
migration_template "migration/core.rb", "db/migrate/sorcery_core.rb" unless
|
|
66
|
+
migration_template "migration/core.rb", "db/migrate/sorcery_core.rb" unless only_submodules?
|
|
47
67
|
|
|
48
68
|
if submodules
|
|
49
69
|
submodules.each do |submodule|
|
|
@@ -52,10 +72,9 @@ module Sorcery
|
|
|
52
72
|
end
|
|
53
73
|
end
|
|
54
74
|
end
|
|
55
|
-
|
|
56
75
|
|
|
57
76
|
end
|
|
58
|
-
|
|
77
|
+
|
|
59
78
|
# Define the next_migration_number method (necessary for the migration_template method to work)
|
|
60
79
|
def self.next_migration_number(dirname)
|
|
61
80
|
if ActiveRecord::Base.timestamped_migrations
|
|
@@ -65,13 +84,12 @@ module Sorcery
|
|
|
65
84
|
"%.3d" % (current_migration_number(dirname) + 1)
|
|
66
85
|
end
|
|
67
86
|
end
|
|
68
|
-
|
|
69
|
-
private
|
|
70
87
|
|
|
71
|
-
|
|
72
|
-
def
|
|
73
|
-
options[:
|
|
88
|
+
private
|
|
89
|
+
def only_submodules?
|
|
90
|
+
options[:migrations] || options[:only_submodules]
|
|
74
91
|
end
|
|
92
|
+
|
|
75
93
|
end
|
|
76
94
|
end
|
|
77
95
|
end
|