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.

Files changed (281) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +54 -0
  3. data/.travis.yml +13 -1
  4. data/CHANGELOG.md +234 -0
  5. data/Gemfile +17 -14
  6. data/Gemfile.rails4 +24 -0
  7. data/README.md +300 -0
  8. data/Rakefile +3 -79
  9. data/VERSION +1 -1
  10. data/lib/generators/sorcery/helpers.rb +40 -0
  11. data/lib/generators/sorcery/install_generator.rb +21 -17
  12. data/lib/generators/sorcery/templates/initializer.rb +1 -1
  13. data/lib/generators/sorcery/templates/migration/activity_logging.rb +2 -11
  14. data/lib/generators/sorcery/templates/migration/brute_force_protection.rb +1 -7
  15. data/lib/generators/sorcery/templates/migration/core.rb +5 -8
  16. data/lib/generators/sorcery/templates/migration/external.rb +1 -5
  17. data/lib/generators/sorcery/templates/migration/remember_me.rb +2 -9
  18. data/lib/generators/sorcery/templates/migration/reset_password.rb +2 -10
  19. data/lib/generators/sorcery/templates/migration/user_activation.rb +2 -10
  20. data/lib/sorcery/controller.rb +16 -4
  21. data/lib/sorcery/controller/submodules/external.rb +9 -8
  22. data/lib/sorcery/controller/submodules/external/protocols/oauth2.rb +2 -1
  23. data/lib/sorcery/controller/submodules/external/providers/facebook.rb +2 -1
  24. data/lib/sorcery/controller/submodules/external/providers/github.rb +2 -1
  25. data/lib/sorcery/controller/submodules/external/providers/google.rb +2 -1
  26. data/lib/sorcery/controller/submodules/external/providers/linkedin.rb +2 -1
  27. data/lib/sorcery/controller/submodules/external/providers/liveid.rb +2 -1
  28. data/lib/sorcery/controller/submodules/external/providers/twitter.rb +3 -2
  29. data/lib/sorcery/controller/submodules/external/providers/vk.rb +2 -1
  30. data/lib/sorcery/controller/submodules/external/providers/xing.rb +2 -1
  31. data/lib/sorcery/controller/submodules/remember_me.rb +1 -1
  32. data/lib/sorcery/controller/submodules/session_timeout.rb +1 -1
  33. data/lib/sorcery/model.rb +9 -3
  34. data/lib/sorcery/model/adapters/mongoid.rb +3 -3
  35. data/lib/sorcery/model/submodules/brute_force_protection.rb +6 -8
  36. data/lib/sorcery/model/submodules/reset_password.rb +5 -1
  37. data/lib/sorcery/model/submodules/user_activation.rb +18 -4
  38. data/lib/sorcery/test_helpers/internal.rb +21 -4
  39. data/lib/sorcery/test_helpers/internal/rails.rb +4 -4
  40. data/lib/sorcery/test_helpers/rails.rb +2 -2
  41. data/sorcery.gemspec +25 -363
  42. data/spec/{rails3/spec → active_record}/controller_activity_logging_spec.rb +29 -19
  43. data/spec/active_record/controller_brute_force_protection_spec.rb +136 -0
  44. data/spec/{rails3/spec → active_record}/controller_http_basic_auth_spec.rb +26 -17
  45. data/spec/{rails3/spec → active_record}/controller_oauth2_spec.rb +93 -56
  46. data/spec/{rails3/spec → active_record}/controller_oauth_spec.rb +35 -29
  47. data/spec/{rails3/spec → active_record}/controller_remember_me_spec.rb +28 -28
  48. data/spec/{rails3/spec → active_record}/controller_session_timeout_spec.rb +11 -11
  49. data/spec/{rails3/spec → active_record}/controller_spec.rb +19 -19
  50. data/spec/{rails3/spec → active_record}/integration_spec.rb +2 -2
  51. data/spec/{rails3/spec → active_record}/user_activation_spec.rb +8 -6
  52. data/spec/active_record/user_activity_logging_spec.rb +8 -0
  53. data/spec/{rails3/spec → active_record}/user_brute_force_protection_spec.rb +5 -4
  54. data/spec/{rails3/spec → active_record}/user_oauth_spec.rb +5 -4
  55. data/spec/{rails3/spec → active_record}/user_remember_me_spec.rb +4 -3
  56. data/spec/{rails3/spec → active_record}/user_reset_password_spec.rb +6 -6
  57. data/spec/{rails3/spec → active_record}/user_spec.rb +12 -10
  58. data/spec/{rails3_mongo_mapper/spec → mongo_mapper}/controller_spec.rb +15 -15
  59. data/spec/mongo_mapper/user_activation_spec.rb +10 -0
  60. data/spec/mongo_mapper/user_activity_logging_spec.rb +8 -0
  61. data/spec/mongo_mapper/user_brute_force_protection_spec.rb +8 -0
  62. data/spec/mongo_mapper/user_oauth_spec.rb +8 -0
  63. data/spec/mongo_mapper/user_remember_me_spec.rb +8 -0
  64. data/spec/mongo_mapper/user_reset_password_spec.rb +8 -0
  65. data/spec/{rails3_mongo_mapper/spec → mongo_mapper}/user_spec.rb +9 -8
  66. data/spec/{rails3_mongoid/spec → mongoid}/controller_activity_logging_spec.rb +8 -8
  67. data/spec/{rails3_mongoid/spec → mongoid}/controller_spec.rb +14 -14
  68. data/spec/mongoid/user_activation_spec.rb +10 -0
  69. data/spec/mongoid/user_activity_logging_spec.rb +9 -0
  70. data/spec/mongoid/user_brute_force_protection_spec.rb +9 -0
  71. data/spec/mongoid/user_oauth_spec.rb +9 -0
  72. data/spec/mongoid/user_remember_me_spec.rb +9 -0
  73. data/spec/mongoid/user_reset_password_spec.rb +9 -0
  74. data/spec/{rails3_mongoid/spec → mongoid}/user_spec.rb +10 -9
  75. data/spec/orm/active_record.rb +7 -0
  76. data/spec/orm/mongo_mapper.rb +10 -0
  77. data/spec/orm/mongoid.rb +17 -0
  78. data/spec/{rails3/app/models → rails_app/app/active_record}/authentication.rb +0 -0
  79. data/spec/{rails3/app/models → rails_app/app/active_record}/user.rb +1 -2
  80. data/spec/rails_app/app/active_record/user_provider.rb +3 -0
  81. data/spec/{rails3/app/controllers/application_controller.rb → rails_app/app/controllers/sorcery_controller.rb} +26 -15
  82. data/spec/{rails3 → rails_app}/app/helpers/application_helper.rb +0 -0
  83. data/spec/{rails3 → rails_app}/app/mailers/sorcery_mailer.rb +0 -0
  84. data/spec/{rails3_mongo_mapper/app/models → rails_app/app/mongo_mapper}/authentication.rb +0 -0
  85. data/spec/{rails3_mongo_mapper/app/models → rails_app/app/mongo_mapper}/user.rb +0 -0
  86. data/spec/{rails3_mongoid/app/models → rails_app/app/mongoid}/authentication.rb +0 -0
  87. data/spec/{rails3_mongoid/app/models → rails_app/app/mongoid}/user.rb +2 -0
  88. data/spec/{rails3 → rails_app}/app/views/application/index.html.erb +0 -0
  89. data/spec/{rails3 → rails_app}/app/views/layouts/application.html.erb +0 -0
  90. data/spec/{rails3 → rails_app}/app/views/sorcery_mailer/activation_email.html.erb +0 -0
  91. data/spec/{rails3 → rails_app}/app/views/sorcery_mailer/activation_email.text.erb +0 -0
  92. 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
  93. data/spec/{rails3_mongo_mapper → rails_app}/app/views/sorcery_mailer/activation_success_email.html.erb +0 -0
  94. data/spec/{rails3 → rails_app}/app/views/sorcery_mailer/activation_success_email.text.erb +0 -0
  95. data/spec/{rails3 → rails_app}/app/views/sorcery_mailer/reset_password_email.html.erb +0 -0
  96. data/spec/{rails3 → rails_app}/app/views/sorcery_mailer/reset_password_email.text.erb +0 -0
  97. data/spec/{rails3 → rails_app}/app/views/sorcery_mailer/send_unlock_token_email.text.erb +0 -0
  98. data/spec/{rails3_mongo_mapper → rails_app}/config.ru +1 -1
  99. data/spec/{rails3_mongoid → rails_app}/config/application.rb +13 -8
  100. data/spec/rails_app/config/boot.rb +4 -0
  101. data/spec/rails_app/config/database.yml +22 -0
  102. data/spec/{rails3 → rails_app}/config/environment.rb +0 -0
  103. data/spec/{rails3_mongo_mapper → rails_app}/config/environments/test.rb +2 -0
  104. data/spec/{rails3 → rails_app}/config/initializers/backtrace_silencers.rb +0 -0
  105. data/spec/{rails3 → rails_app}/config/initializers/inflections.rb +0 -0
  106. data/spec/{rails3 → rails_app}/config/initializers/mime_types.rb +0 -0
  107. data/spec/{rails3 → rails_app}/config/initializers/secret_token.rb +0 -0
  108. data/spec/{rails3 → rails_app}/config/initializers/session_store.rb +4 -0
  109. data/spec/{rails3 → rails_app}/config/locales/en.yml +0 -0
  110. data/spec/rails_app/config/routes.rb +37 -0
  111. data/spec/{rails3 → rails_app}/db/migrate/activation/20101224223622_add_activation_to_users.rb +3 -3
  112. data/spec/{rails3 → rails_app}/db/migrate/activity_logging/20101224223624_add_activity_logging_to_users.rb +0 -0
  113. data/spec/{rails3 → rails_app}/db/migrate/brute_force_protection/20101224223626_add_brute_force_protection_to_users.rb +0 -0
  114. data/spec/{rails3 → rails_app}/db/migrate/core/20101224223620_create_users.rb +0 -0
  115. data/spec/rails_app/db/migrate/external/20101224223628_create_authentications_and_user_providers.rb +22 -0
  116. data/spec/{rails3 → rails_app}/db/migrate/remember_me/20101224223623_add_remember_me_token_to_users.rb +0 -0
  117. data/spec/{rails3 → rails_app}/db/migrate/reset_password/20101224223622_add_reset_password_to_users.rb +0 -0
  118. data/spec/{rails3 → rails_app}/db/schema.rb +0 -0
  119. data/spec/{rails3 → rails_app}/db/seeds.rb +0 -0
  120. data/spec/{rails3 → rails_app}/public/404.html +0 -0
  121. data/spec/{rails3 → rails_app}/public/422.html +0 -0
  122. data/spec/{rails3 → rails_app}/public/500.html +0 -0
  123. data/spec/{rails3 → rails_app}/public/favicon.ico +0 -0
  124. data/spec/{rails3 → rails_app}/public/images/rails.png +0 -0
  125. data/spec/{rails3 → rails_app}/public/javascripts/application.js +0 -0
  126. data/spec/{rails3 → rails_app}/public/javascripts/controls.js +0 -0
  127. data/spec/{rails3 → rails_app}/public/javascripts/dragdrop.js +0 -0
  128. data/spec/{rails3 → rails_app}/public/javascripts/effects.js +0 -0
  129. data/spec/{rails3 → rails_app}/public/javascripts/prototype.js +0 -0
  130. data/spec/{rails3 → rails_app}/public/javascripts/rails.js +0 -0
  131. data/spec/{rails3 → rails_app}/public/robots.txt +0 -0
  132. data/spec/{rails3/lib/tasks → rails_app/public/stylesheets}/.gitkeep +0 -0
  133. data/spec/shared_examples/controller_oauth_shared_examples.rb +22 -8
  134. data/spec/shared_examples/user_activation_shared_examples.rb +49 -27
  135. data/spec/shared_examples/user_reset_password_shared_examples.rb +33 -21
  136. data/spec/shared_examples/user_shared_examples.rb +65 -50
  137. data/spec/sorcery_crypto_providers_spec.rb +47 -45
  138. data/spec/spec_helper.rb +38 -4
  139. metadata +117 -254
  140. data/Gemfile.lock +0 -175
  141. data/README.rdoc +0 -261
  142. data/spec/Gemfile +0 -12
  143. data/spec/Gemfile.lock +0 -129
  144. data/spec/README.md +0 -31
  145. data/spec/Rakefile +0 -12
  146. data/spec/rails3/.gitignore +0 -4
  147. data/spec/rails3/.rspec +0 -1
  148. data/spec/rails3/Gemfile +0 -15
  149. data/spec/rails3/Gemfile.lock +0 -162
  150. data/spec/rails3/README +0 -256
  151. data/spec/rails3/Rakefile +0 -11
  152. data/spec/rails3/config.ru +0 -4
  153. data/spec/rails3/config/application.rb +0 -46
  154. data/spec/rails3/config/boot.rb +0 -13
  155. data/spec/rails3/config/database.yml +0 -27
  156. data/spec/rails3/config/environments/development.rb +0 -26
  157. data/spec/rails3/config/environments/in_memory.rb +0 -35
  158. data/spec/rails3/config/environments/production.rb +0 -49
  159. data/spec/rails3/config/environments/test.rb +0 -35
  160. data/spec/rails3/config/routes.rb +0 -59
  161. data/spec/rails3/db/migrate/external/20101224223628_create_authentications.rb +0 -14
  162. data/spec/rails3/public/stylesheets/.gitkeep +0 -0
  163. data/spec/rails3/script/rails +0 -6
  164. data/spec/rails3/spec/controller_brute_force_protection_spec.rb +0 -96
  165. data/spec/rails3/spec/spec.opts +0 -2
  166. data/spec/rails3/spec/spec_helper.orig.rb +0 -27
  167. data/spec/rails3/spec/spec_helper.rb +0 -71
  168. data/spec/rails3/spec/user_activity_logging_spec.rb +0 -8
  169. data/spec/rails3/vendor/plugins/.gitkeep +0 -0
  170. data/spec/rails3_mongo_mapper/.gitignore +0 -4
  171. data/spec/rails3_mongo_mapper/.rspec +0 -1
  172. data/spec/rails3_mongo_mapper/Gemfile +0 -16
  173. data/spec/rails3_mongo_mapper/Gemfile.lock +0 -156
  174. data/spec/rails3_mongo_mapper/Rakefile +0 -11
  175. data/spec/rails3_mongo_mapper/app/controllers/application_controller.rb +0 -122
  176. data/spec/rails3_mongo_mapper/app/helpers/application_helper.rb +0 -2
  177. data/spec/rails3_mongo_mapper/app/mailers/sorcery_mailer.rb +0 -25
  178. data/spec/rails3_mongo_mapper/app/views/layouts/application.html.erb +0 -14
  179. data/spec/rails3_mongo_mapper/app/views/sorcery_mailer/activation_email.html.erb +0 -17
  180. data/spec/rails3_mongo_mapper/app/views/sorcery_mailer/activation_email.text.erb +0 -9
  181. data/spec/rails3_mongo_mapper/app/views/sorcery_mailer/activation_success_email.text.erb +0 -9
  182. data/spec/rails3_mongo_mapper/app/views/sorcery_mailer/reset_password_email.html.erb +0 -16
  183. data/spec/rails3_mongo_mapper/app/views/sorcery_mailer/reset_password_email.text.erb +0 -8
  184. data/spec/rails3_mongo_mapper/config/application.rb +0 -51
  185. data/spec/rails3_mongo_mapper/config/boot.rb +0 -13
  186. data/spec/rails3_mongo_mapper/config/environment.rb +0 -5
  187. data/spec/rails3_mongo_mapper/config/environments/development.rb +0 -30
  188. data/spec/rails3_mongo_mapper/config/environments/in_memory.rb +0 -0
  189. data/spec/rails3_mongo_mapper/config/environments/production.rb +0 -49
  190. data/spec/rails3_mongo_mapper/config/initializers/backtrace_silencers.rb +0 -7
  191. data/spec/rails3_mongo_mapper/config/initializers/inflections.rb +0 -10
  192. data/spec/rails3_mongo_mapper/config/initializers/mime_types.rb +0 -5
  193. data/spec/rails3_mongo_mapper/config/initializers/mongo.rb +0 -2
  194. data/spec/rails3_mongo_mapper/config/initializers/secret_token.rb +0 -7
  195. data/spec/rails3_mongo_mapper/config/initializers/session_store.rb +0 -8
  196. data/spec/rails3_mongo_mapper/config/locales/en.yml +0 -5
  197. data/spec/rails3_mongo_mapper/config/routes.rb +0 -59
  198. data/spec/rails3_mongo_mapper/db/schema.rb +0 -23
  199. data/spec/rails3_mongo_mapper/db/seeds.rb +0 -7
  200. data/spec/rails3_mongo_mapper/lib/tasks/.gitkeep +0 -0
  201. data/spec/rails3_mongo_mapper/public/404.html +0 -26
  202. data/spec/rails3_mongo_mapper/public/422.html +0 -26
  203. data/spec/rails3_mongo_mapper/public/500.html +0 -26
  204. data/spec/rails3_mongo_mapper/public/favicon.ico +0 -0
  205. data/spec/rails3_mongo_mapper/public/images/rails.png +0 -0
  206. data/spec/rails3_mongo_mapper/public/javascripts/application.js +0 -2
  207. data/spec/rails3_mongo_mapper/public/javascripts/controls.js +0 -965
  208. data/spec/rails3_mongo_mapper/public/javascripts/dragdrop.js +0 -974
  209. data/spec/rails3_mongo_mapper/public/javascripts/effects.js +0 -1123
  210. data/spec/rails3_mongo_mapper/public/javascripts/prototype.js +0 -6001
  211. data/spec/rails3_mongo_mapper/public/javascripts/rails.js +0 -175
  212. data/spec/rails3_mongo_mapper/public/robots.txt +0 -5
  213. data/spec/rails3_mongo_mapper/public/stylesheets/.gitkeep +0 -0
  214. data/spec/rails3_mongo_mapper/script/rails +0 -6
  215. data/spec/rails3_mongo_mapper/spec/spec.opts +0 -2
  216. data/spec/rails3_mongo_mapper/spec/spec_helper.orig.rb +0 -27
  217. data/spec/rails3_mongo_mapper/spec/spec_helper.rb +0 -55
  218. data/spec/rails3_mongo_mapper/spec/user_activation_spec.rb +0 -9
  219. data/spec/rails3_mongo_mapper/spec/user_activity_logging_spec.rb +0 -8
  220. data/spec/rails3_mongo_mapper/spec/user_brute_force_protection_spec.rb +0 -8
  221. data/spec/rails3_mongo_mapper/spec/user_oauth_spec.rb +0 -8
  222. data/spec/rails3_mongo_mapper/spec/user_remember_me_spec.rb +0 -8
  223. data/spec/rails3_mongo_mapper/spec/user_reset_password_spec.rb +0 -8
  224. data/spec/rails3_mongo_mapper/vendor/plugins/.gitkeep +0 -0
  225. data/spec/rails3_mongoid/.gitignore +0 -4
  226. data/spec/rails3_mongoid/.rspec +0 -1
  227. data/spec/rails3_mongoid/Gemfile +0 -15
  228. data/spec/rails3_mongoid/Gemfile.lock +0 -146
  229. data/spec/rails3_mongoid/Rakefile +0 -11
  230. data/spec/rails3_mongoid/app/controllers/application_controller.rb +0 -127
  231. data/spec/rails3_mongoid/app/helpers/application_helper.rb +0 -2
  232. data/spec/rails3_mongoid/app/mailers/sorcery_mailer.rb +0 -25
  233. data/spec/rails3_mongoid/app/views/layouts/application.html.erb +0 -14
  234. data/spec/rails3_mongoid/app/views/sorcery_mailer/activation_email.html.erb +0 -17
  235. data/spec/rails3_mongoid/app/views/sorcery_mailer/activation_email.text.erb +0 -9
  236. data/spec/rails3_mongoid/app/views/sorcery_mailer/activation_success_email.html.erb +0 -17
  237. data/spec/rails3_mongoid/app/views/sorcery_mailer/activation_success_email.text.erb +0 -9
  238. data/spec/rails3_mongoid/app/views/sorcery_mailer/reset_password_email.html.erb +0 -16
  239. data/spec/rails3_mongoid/app/views/sorcery_mailer/reset_password_email.text.erb +0 -8
  240. data/spec/rails3_mongoid/config.ru +0 -4
  241. data/spec/rails3_mongoid/config/boot.rb +0 -13
  242. data/spec/rails3_mongoid/config/environment.rb +0 -5
  243. data/spec/rails3_mongoid/config/environments/development.rb +0 -26
  244. data/spec/rails3_mongoid/config/environments/in_memory.rb +0 -0
  245. data/spec/rails3_mongoid/config/environments/production.rb +0 -49
  246. data/spec/rails3_mongoid/config/environments/test.rb +0 -35
  247. data/spec/rails3_mongoid/config/initializers/backtrace_silencers.rb +0 -7
  248. data/spec/rails3_mongoid/config/initializers/inflections.rb +0 -10
  249. data/spec/rails3_mongoid/config/initializers/mime_types.rb +0 -5
  250. data/spec/rails3_mongoid/config/initializers/secret_token.rb +0 -7
  251. data/spec/rails3_mongoid/config/initializers/session_store.rb +0 -8
  252. data/spec/rails3_mongoid/config/locales/en.yml +0 -5
  253. data/spec/rails3_mongoid/config/mongoid.yml +0 -7
  254. data/spec/rails3_mongoid/config/routes.rb +0 -59
  255. data/spec/rails3_mongoid/db/schema.rb +0 -23
  256. data/spec/rails3_mongoid/db/seeds.rb +0 -7
  257. data/spec/rails3_mongoid/lib/tasks/.gitkeep +0 -0
  258. data/spec/rails3_mongoid/public/404.html +0 -26
  259. data/spec/rails3_mongoid/public/422.html +0 -26
  260. data/spec/rails3_mongoid/public/500.html +0 -26
  261. data/spec/rails3_mongoid/public/favicon.ico +0 -0
  262. data/spec/rails3_mongoid/public/images/rails.png +0 -0
  263. data/spec/rails3_mongoid/public/javascripts/application.js +0 -2
  264. data/spec/rails3_mongoid/public/javascripts/controls.js +0 -965
  265. data/spec/rails3_mongoid/public/javascripts/dragdrop.js +0 -974
  266. data/spec/rails3_mongoid/public/javascripts/effects.js +0 -1123
  267. data/spec/rails3_mongoid/public/javascripts/prototype.js +0 -6001
  268. data/spec/rails3_mongoid/public/javascripts/rails.js +0 -175
  269. data/spec/rails3_mongoid/public/robots.txt +0 -5
  270. data/spec/rails3_mongoid/public/stylesheets/.gitkeep +0 -0
  271. data/spec/rails3_mongoid/script/rails +0 -6
  272. data/spec/rails3_mongoid/spec/spec.opts +0 -2
  273. data/spec/rails3_mongoid/spec/spec_helper.orig.rb +0 -27
  274. data/spec/rails3_mongoid/spec/spec_helper.rb +0 -55
  275. data/spec/rails3_mongoid/spec/user_activation_spec.rb +0 -9
  276. data/spec/rails3_mongoid/spec/user_activity_logging_spec.rb +0 -8
  277. data/spec/rails3_mongoid/spec/user_brute_force_protection_spec.rb +0 -8
  278. data/spec/rails3_mongoid/spec/user_oauth_spec.rb +0 -8
  279. data/spec/rails3_mongoid/spec/user_remember_me_spec.rb +0 -8
  280. data/spec/rails3_mongoid/spec/user_reset_password_spec.rb +0 -8
  281. data/spec/rails3_mongoid/vendor/plugins/.gitkeep +0 -0
data/Rakefile CHANGED
@@ -1,82 +1,6 @@
1
- # require 'bundler'
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
- RSpec::Core::RakeTask.new(:spec) do |spec|
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.4
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", "config/initializers/sorcery.rb" unless options[:migrations]
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 "config/initializers/sorcery.rb", /submodules = \[.*\]/ do |str|
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
- insert_into_file "app/models/#{model_class_name.underscore}.rb", " authenticates_with_sorcery!\n", :after => "class #{model_class_name} < ActiveRecord::Base\n"
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: `[:username]`
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 self.up
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
- def self.down
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 self.up
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 self.up
2
+ def change
3
3
  create_table :<%= model_class_name.tableize %> do |t|
4
- t.string :username, :null => false # if you use another field as a username, for example email, you can safely remove this field.
5
- t.string :email, :default => nil # if you use this field as a username, you might want to make it :null => false.
6
- t.string :crypted_password, :default => nil
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
- def self.down
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 self.up
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 self.up
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
- def self.down
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 self.up
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
- def self.down
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 self.up
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
- def self.down
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
@@ -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
- reset_session # protect from session fixation attacks
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
- reset_session
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
- @current_user ||= login_from_session || login_from_other_sources unless @current_user == false
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
- reset_session
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.to_s.downcase.pluralize).send("find_by_#{config.provider_attribute_name}_and_#{config.provider_uid_attribute_name}", provider_name, @user_hash[:uid].to_s))
122
- user = current_user.send(config.authentications_class.to_s.downcase.pluralize).build(config.provider_uid_attribute_name => @user_hash[:uid], config.provider_attribute_name => provider_name.to_s)
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