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
@@ -3,88 +3,102 @@ shared_examples_for "rails_3_core_model" do
3
3
  after(:each) do
4
4
  User.sorcery_config.reset!
5
5
  end
6
-
6
+
7
7
  it "should enable configuration option 'username_attribute_names'" do
8
8
  sorcery_model_property_set(:username_attribute_names, :email)
9
9
  User.sorcery_config.username_attribute_names.should == [:email]
10
10
  end
11
-
11
+
12
12
  it "should enable configuration option 'password_attribute_name'" do
13
13
  sorcery_model_property_set(:password_attribute_name, :mypassword)
14
14
  User.sorcery_config.password_attribute_name.should equal(:mypassword)
15
15
  end
16
-
16
+
17
17
  it "should enable configuration option 'email_attribute_name'" do
18
18
  sorcery_model_property_set(:email_attribute_name, :my_email)
19
19
  User.sorcery_config.email_attribute_name.should equal(:my_email)
20
20
  end
21
-
21
+
22
22
  it "should enable configuration option 'crypted_password_attribute_name'" do
23
23
  sorcery_model_property_set(:crypted_password_attribute_name, :password)
24
24
  User.sorcery_config.crypted_password_attribute_name.should equal(:password)
25
25
  end
26
-
26
+
27
27
  it "should enable configuration option 'salt_attribute_name'" do
28
28
  sorcery_model_property_set(:salt_attribute_name, :my_salt)
29
29
  User.sorcery_config.salt_attribute_name.should equal(:my_salt)
30
30
  end
31
-
31
+
32
32
  it "should enable configuration option 'encryption_algorithm'" do
33
33
  sorcery_model_property_set(:encryption_algorithm, :none)
34
34
  User.sorcery_config.encryption_algorithm.should equal(:none)
35
35
  end
36
-
36
+
37
37
  it "should enable configuration option 'encryption_key'" do
38
38
  sorcery_model_property_set(:encryption_key, 'asdadas424234242')
39
39
  User.sorcery_config.encryption_key.should == 'asdadas424234242'
40
40
  end
41
-
41
+
42
42
  it "should enable configuration option 'custom_encryption_provider'" do
43
43
  sorcery_model_property_set(:encryption_algorithm, :custom)
44
44
  sorcery_model_property_set(:custom_encryption_provider, Array)
45
45
  User.sorcery_config.custom_encryption_provider.should equal(Array)
46
46
  end
47
-
47
+
48
48
  it "should enable configuration option 'salt_join_token'" do
49
49
  salt_join_token = "--%%*&-"
50
50
  sorcery_model_property_set(:salt_join_token, salt_join_token)
51
51
  User.sorcery_config.salt_join_token.should equal(salt_join_token)
52
52
  end
53
-
53
+
54
54
  it "should enable configuration option 'stretches'" do
55
55
  stretches = 15
56
56
  sorcery_model_property_set(:stretches, stretches)
57
57
  User.sorcery_config.stretches.should equal(stretches)
58
58
  end
59
59
  end
60
-
60
+
61
61
  # ----------------- PLUGIN ACTIVATED -----------------------
62
62
  describe User, "when activated with sorcery" do
63
63
  before(:all) do
64
- sorcery_reload!()
64
+ sorcery_reload!
65
65
  end
66
-
66
+
67
67
  before(:each) do
68
68
  User.delete_all
69
69
  end
70
-
70
+
71
71
  it "should respond to class method authenticate" do
72
72
  ActiveRecord::Base.should_not respond_to(:authenticate) if defined?(ActiveRecord)
73
73
  User.should respond_to(:authenticate)
74
74
  end
75
-
75
+
76
76
  it "authenticate should return true if credentials are good" do
77
77
  create_new_user
78
78
  User.authenticate(@user.send(User.sorcery_config.username_attribute_names.first), 'secret').should be_true
79
79
  end
80
-
80
+
81
81
  it "authenticate should return false if credentials are bad" do
82
82
  create_new_user
83
83
  User.authenticate(@user.send(User.sorcery_config.username_attribute_names.first), 'wrong!').should be_false
84
84
  end
85
-
85
+
86
+ context "with empty credentials" do
87
+ before do
88
+ sorcery_model_property_set(:downcase_username_before_authenticating, true)
89
+ end
90
+
91
+ after do
92
+ sorcery_reload!
93
+ end
94
+
95
+ it "don't downcase empty credentials" do
96
+ expect(User.authenticate(nil, 'wrong!')).to be_false
97
+ end
98
+ end
99
+
86
100
  specify { User.should respond_to(:encrypt) }
87
-
101
+
88
102
  it "subclass should inherit config if defined so" do
89
103
  sorcery_reload!([],{:subclasses_inherit_config => true})
90
104
  class Admin < User
@@ -92,7 +106,7 @@ shared_examples_for "rails_3_core_model" do
92
106
  Admin.sorcery_config.should_not be_nil
93
107
  Admin.sorcery_config.should == User.sorcery_config
94
108
  end
95
-
109
+
96
110
  it "subclass should not inherit config if not defined so" do
97
111
  sorcery_reload!([],{:subclasses_inherit_config => false})
98
112
  class Admin2 < User
@@ -100,10 +114,10 @@ shared_examples_for "rails_3_core_model" do
100
114
  Admin2.sorcery_config.should be_nil
101
115
  end
102
116
  end
103
-
117
+
104
118
  # ----------------- REGISTRATION -----------------------
105
119
  describe User, "registration" do
106
-
120
+
107
121
  before(:all) do
108
122
  sorcery_reload!()
109
123
  end
@@ -111,11 +125,11 @@ shared_examples_for "rails_3_core_model" do
111
125
  before(:each) do
112
126
  User.delete_all
113
127
  end
114
-
128
+
115
129
  it "by default, encryption_provider should not be nil" do
116
130
  User.sorcery_config.encryption_provider.should_not be_nil
117
131
  end
118
-
132
+
119
133
  it "should encrypt password when a new user is saved" do
120
134
  create_new_user
121
135
  User.sorcery_config.encryption_provider.matches?(@user.send(User.sorcery_config.crypted_password_attribute_name),'secret',@user.salt).should be_true
@@ -125,18 +139,18 @@ shared_examples_for "rails_3_core_model" do
125
139
  create_new_user
126
140
  @user.password.should be_nil
127
141
  end
128
-
142
+
129
143
  it "should not clear the virtual password field if save failed due to validity" do
130
144
  create_new_user
131
145
  User.class_eval do
132
- validates_format_of :email, :with => /^(.)+@(.)+$/, :if => Proc.new {|r| r.email}, :message => "is invalid"
146
+ validates_format_of :email, :with => /\A(.)+@(.)+\Z/, :if => Proc.new {|r| r.email}, :message => "is invalid"
133
147
  end
134
148
  @user.password = 'blupush'
135
149
  @user.email = 'asd'
136
150
  @user.save
137
151
  @user.password.should_not be_nil
138
152
  end
139
-
153
+
140
154
  it "should not clear the virtual password field if save failed due to exception" do
141
155
  create_new_user
142
156
  @user.password = '4blupush'
@@ -150,7 +164,7 @@ shared_examples_for "rails_3_core_model" do
150
164
  end
151
165
  @user.password.should_not be_nil
152
166
  end
153
-
167
+
154
168
  it "should not encrypt the password twice when a user is updated" do
155
169
  create_new_user
156
170
  @user.email = "blup@bla.com"
@@ -166,34 +180,34 @@ shared_examples_for "rails_3_core_model" do
166
180
  end
167
181
 
168
182
  end
169
-
183
+
170
184
  # ----------------- PASSWORD ENCRYPTION -----------------------
171
185
  describe User, "special encryption cases" do
172
186
  before(:all) do
173
187
  sorcery_reload!()
174
188
  @text = "Some Text!"
175
189
  end
176
-
190
+
177
191
  before(:each) do
178
192
  User.delete_all
179
193
  end
180
-
194
+
181
195
  after(:each) do
182
196
  User.sorcery_config.reset!
183
197
  end
184
-
198
+
185
199
  it "should work with no password encryption" do
186
200
  sorcery_model_property_set(:encryption_algorithm, :none)
187
201
  create_new_user
188
202
  User.authenticate(@user.send(User.sorcery_config.username_attribute_names.first), 'secret').should be_true
189
203
  end
190
-
204
+
191
205
  it "should work with custom password encryption" do
192
206
  class MyCrypto
193
207
  def self.encrypt(*tokens)
194
208
  tokens.flatten.join('').gsub(/e/,'A')
195
209
  end
196
-
210
+
197
211
  def self.matches?(crypted,*tokens)
198
212
  crypted == encrypt(*tokens)
199
213
  end
@@ -203,49 +217,49 @@ shared_examples_for "rails_3_core_model" do
203
217
  create_new_user
204
218
  User.authenticate(@user.send(User.sorcery_config.username_attribute_names.first), 'secret').should be_true
205
219
  end
206
-
220
+
207
221
  it "if encryption algo is aes256, it should set key to crypto provider" do
208
222
  sorcery_model_property_set(:encryption_algorithm, :aes256)
209
223
  sorcery_model_property_set(:encryption_key, nil)
210
224
  expect{User.encrypt(@text)}.to raise_error(ArgumentError)
211
225
  sorcery_model_property_set(:encryption_key, "asd234dfs423fddsmndsflktsdf32343")
212
- expect{User.encrypt(@text)}.to_not raise_error(ArgumentError)
226
+ expect{User.encrypt(@text)}.to_not raise_error
213
227
  end
214
-
228
+
215
229
  it "if encryption algo is aes256, it should set key to crypto provider, even if attributes are set in reverse" do
216
230
  sorcery_model_property_set(:encryption_key, nil)
217
231
  sorcery_model_property_set(:encryption_algorithm, :none)
218
232
  sorcery_model_property_set(:encryption_key, "asd234dfs423fddsmndsflktsdf32343")
219
233
  sorcery_model_property_set(:encryption_algorithm, :aes256)
220
- expect{User.encrypt(@text)}.to_not raise_error(ArgumentError)
234
+ expect{User.encrypt(@text)}.to_not raise_error
221
235
  end
222
-
236
+
223
237
  it "if encryption algo is md5 it should work" do
224
238
  sorcery_model_property_set(:encryption_algorithm, :md5)
225
239
  User.encrypt(@text).should == Sorcery::CryptoProviders::MD5.encrypt(@text)
226
240
  end
227
-
241
+
228
242
  it "if encryption algo is sha1 it should work" do
229
243
  sorcery_model_property_set(:encryption_algorithm, :sha1)
230
244
  User.encrypt(@text).should == Sorcery::CryptoProviders::SHA1.encrypt(@text)
231
245
  end
232
-
246
+
233
247
  it "if encryption algo is sha256 it should work" do
234
248
  sorcery_model_property_set(:encryption_algorithm, :sha256)
235
249
  User.encrypt(@text).should == Sorcery::CryptoProviders::SHA256.encrypt(@text)
236
250
  end
237
-
251
+
238
252
  it "if encryption algo is sha512 it should work" do
239
253
  sorcery_model_property_set(:encryption_algorithm, :sha512)
240
254
  User.encrypt(@text).should == Sorcery::CryptoProviders::SHA512.encrypt(@text)
241
255
  end
242
-
256
+
243
257
  it "salt should be random for each user and saved in db" do
244
258
  sorcery_model_property_set(:salt_attribute_name, :salt)
245
259
  create_new_user
246
260
  @user.salt.should_not be_nil
247
261
  end
248
-
262
+
249
263
  it "if salt is set should use it to encrypt" do
250
264
  sorcery_model_property_set(:salt_attribute_name, :salt)
251
265
  sorcery_model_property_set(:encryption_algorithm, :sha512)
@@ -253,7 +267,7 @@ shared_examples_for "rails_3_core_model" do
253
267
  @user.crypted_password.should_not == Sorcery::CryptoProviders::SHA512.encrypt('secret')
254
268
  @user.crypted_password.should == Sorcery::CryptoProviders::SHA512.encrypt('secret',@user.salt)
255
269
  end
256
-
270
+
257
271
  it "if salt_join_token is set should use it to encrypt" do
258
272
  sorcery_model_property_set(:salt_attribute_name, :salt)
259
273
  sorcery_model_property_set(:salt_join_token, "-@=>")
@@ -265,15 +279,15 @@ shared_examples_for "rails_3_core_model" do
265
279
  Sorcery::CryptoProviders::SHA512.join_token = User.sorcery_config.salt_join_token
266
280
  @user.crypted_password.should == Sorcery::CryptoProviders::SHA512.encrypt('secret',@user.salt)
267
281
  end
268
-
282
+
269
283
  end
270
-
284
+
271
285
  describe User, "ORM adapter" do
272
286
  before(:all) do
273
287
  sorcery_reload!()
274
288
  User.delete_all
275
289
  end
276
-
290
+
277
291
  before(:each) do
278
292
  create_new_user
279
293
  end
@@ -284,6 +298,7 @@ shared_examples_for "rails_3_core_model" do
284
298
  end
285
299
 
286
300
  it "find_by_username should work as expected" do
301
+ sorcery_model_property_set(:username_attribute_names, [:username])
287
302
  User.find_by_username("gizmo").should == @user
288
303
  end
289
304
 
@@ -302,17 +317,17 @@ shared_examples_for "external_user" do
302
317
  before(:each) do
303
318
  User.delete_all
304
319
  end
305
-
320
+
306
321
  it "should respond to 'external?'" do
307
322
  create_new_user
308
323
  @user.should respond_to(:external?)
309
324
  end
310
-
325
+
311
326
  it "external? should be false for regular users" do
312
327
  create_new_user
313
328
  @user.external?.should be_false
314
329
  end
315
-
330
+
316
331
  it "external? should be true for external users" do
317
332
  create_new_external_user(:twitter)
318
333
  @user.external?.should be_true
@@ -1,56 +1,56 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
1
+ require 'spec_helper'
2
2
 
3
3
  describe "Crypto Providers wrappers" do
4
4
 
5
5
  describe Sorcery::CryptoProviders::MD5 do
6
-
6
+
7
7
  after(:each) do
8
8
  Sorcery::CryptoProviders::MD5.reset!
9
9
  end
10
-
10
+
11
11
  it "encrypt works via wrapper like normal lib" do
12
12
  Sorcery::CryptoProviders::MD5.encrypt('Noam Ben-Ari').should == Digest::MD5.hexdigest('Noam Ben-Ari')
13
13
  end
14
-
14
+
15
15
  it "works with multiple stretches" do
16
16
  Sorcery::CryptoProviders::MD5.stretches = 3
17
17
  Sorcery::CryptoProviders::MD5.encrypt('Noam Ben-Ari').should == Digest::MD5.hexdigest(Digest::MD5.hexdigest(Digest::MD5.hexdigest('Noam Ben-Ari')))
18
18
  end
19
-
19
+
20
20
  it "matches? returns true when matches" do
21
21
  Sorcery::CryptoProviders::MD5.matches?(Digest::MD5.hexdigest('Noam Ben-Ari'), 'Noam Ben-Ari').should be_true
22
22
  end
23
-
23
+
24
24
  it "matches? returns false when no match" do
25
25
  Sorcery::CryptoProviders::MD5.matches?(Digest::MD5.hexdigest('Noam Ben-Ari'), 'Some Dude').should be_false
26
26
  end
27
-
27
+
28
28
  end
29
-
29
+
30
30
  describe Sorcery::CryptoProviders::SHA1 do
31
-
31
+
32
32
  before(:all) do
33
33
  @digest = 'Noam Ben-Ari'
34
34
  Sorcery::CryptoProviders::SHA1.stretches.times {@digest = Digest::SHA1.hexdigest(@digest)}
35
35
  end
36
-
36
+
37
37
  after(:each) do
38
38
  Sorcery::CryptoProviders::SHA1.reset!
39
39
  end
40
-
40
+
41
41
  it "encrypt works via wrapper like normal lib" do
42
42
  Sorcery::CryptoProviders::SHA1.encrypt('Noam Ben-Ari').should == @digest
43
43
  end
44
-
44
+
45
45
  it "works with multiple stretches" do
46
46
  Sorcery::CryptoProviders::SHA1.stretches = 3
47
47
  Sorcery::CryptoProviders::SHA1.encrypt('Noam Ben-Ari').should == Digest::SHA1.hexdigest(Digest::SHA1.hexdigest(Digest::SHA1.hexdigest('Noam Ben-Ari')))
48
48
  end
49
-
49
+
50
50
  it "matches? returns true when matches" do
51
51
  Sorcery::CryptoProviders::SHA1.matches?(@digest, 'Noam Ben-Ari').should be_true
52
52
  end
53
-
53
+
54
54
  it "matches? returns false when no match" do
55
55
  Sorcery::CryptoProviders::SHA1.matches?(@digest, 'Some Dude').should be_false
56
56
  end
@@ -62,67 +62,67 @@ describe "Crypto Providers wrappers" do
62
62
  end
63
63
 
64
64
  describe Sorcery::CryptoProviders::SHA256 do
65
-
65
+
66
66
  before(:all) do
67
67
  @digest = 'Noam Ben-Ari'
68
68
  Sorcery::CryptoProviders::SHA256.stretches.times {@digest = Digest::SHA256.hexdigest(@digest)}
69
69
  end
70
-
70
+
71
71
  after(:each) do
72
72
  Sorcery::CryptoProviders::SHA256.reset!
73
73
  end
74
-
74
+
75
75
  it "encrypt works via wrapper like normal lib" do
76
76
  Sorcery::CryptoProviders::SHA256.encrypt('Noam Ben-Ari').should == @digest
77
77
  end
78
-
78
+
79
79
  it "works with multiple stretches" do
80
80
  Sorcery::CryptoProviders::SHA256.stretches = 3
81
81
  Sorcery::CryptoProviders::SHA256.encrypt('Noam Ben-Ari').should == Digest::SHA256.hexdigest(Digest::SHA256.hexdigest(Digest::SHA256.hexdigest('Noam Ben-Ari')))
82
82
  end
83
-
83
+
84
84
  it "matches? returns true when matches" do
85
85
  Sorcery::CryptoProviders::SHA256.matches?(@digest, 'Noam Ben-Ari').should be_true
86
86
  end
87
-
87
+
88
88
  it "matches? returns false when no match" do
89
89
  Sorcery::CryptoProviders::SHA256.matches?(@digest, 'Some Dude').should be_false
90
90
  end
91
-
91
+
92
92
  end
93
-
93
+
94
94
  describe Sorcery::CryptoProviders::SHA512 do
95
-
95
+
96
96
  before(:all) do
97
97
  @digest = 'Noam Ben-Ari'
98
98
  Sorcery::CryptoProviders::SHA512.stretches.times {@digest = Digest::SHA512.hexdigest(@digest)}
99
99
  end
100
-
100
+
101
101
  after(:each) do
102
102
  Sorcery::CryptoProviders::SHA512.reset!
103
103
  end
104
-
104
+
105
105
  it "encrypt works via wrapper like normal lib" do
106
106
  Sorcery::CryptoProviders::SHA512.encrypt('Noam Ben-Ari').should == @digest
107
107
  end
108
-
108
+
109
109
  it "works with multiple stretches" do
110
110
  Sorcery::CryptoProviders::SHA512.stretches = 3
111
111
  Sorcery::CryptoProviders::SHA512.encrypt('Noam Ben-Ari').should == Digest::SHA512.hexdigest(Digest::SHA512.hexdigest(Digest::SHA512.hexdigest('Noam Ben-Ari')))
112
112
  end
113
-
113
+
114
114
  it "matches? returns true when matches" do
115
115
  Sorcery::CryptoProviders::SHA512.matches?(@digest, 'Noam Ben-Ari').should be_true
116
116
  end
117
-
117
+
118
118
  it "matches? returns false when no match" do
119
119
  Sorcery::CryptoProviders::SHA512.matches?(@digest, 'Some Dude').should be_false
120
120
  end
121
-
121
+
122
122
  end
123
-
123
+
124
124
  describe Sorcery::CryptoProviders::AES256 do
125
-
125
+
126
126
  before(:all) do
127
127
  aes = OpenSSL::Cipher::Cipher.new("AES-256-ECB")
128
128
  aes.encrypt
@@ -132,19 +132,19 @@ describe "Crypto Providers wrappers" do
132
132
  @digest = [aes.update(@digest) + aes.final].pack("m").chomp
133
133
  Sorcery::CryptoProviders::AES256.key = @key
134
134
  end
135
-
135
+
136
136
  it "encrypt works via wrapper like normal lib" do
137
137
  Sorcery::CryptoProviders::AES256.encrypt('Noam Ben-Ari').should == @digest
138
138
  end
139
-
139
+
140
140
  it "matches? returns true when matches" do
141
141
  Sorcery::CryptoProviders::AES256.matches?(@digest, 'Noam Ben-Ari').should be_true
142
142
  end
143
-
143
+
144
144
  it "matches? returns false when no match" do
145
145
  Sorcery::CryptoProviders::AES256.matches?(@digest, 'Some Dude').should be_false
146
146
  end
147
-
147
+
148
148
  it "can be decrypted" do
149
149
  aes = OpenSSL::Cipher::Cipher.new("AES-256-ECB")
150
150
  aes.decrypt
@@ -153,31 +153,31 @@ describe "Crypto Providers wrappers" do
153
153
  end
154
154
 
155
155
  end
156
-
156
+
157
157
  describe Sorcery::CryptoProviders::BCrypt do
158
-
158
+
159
159
  before(:all) do
160
160
  Sorcery::CryptoProviders::BCrypt.cost = 1
161
161
  @digest = BCrypt::Password.create('Noam Ben-Ari', :cost => Sorcery::CryptoProviders::BCrypt.cost)
162
162
  end
163
-
163
+
164
164
  after(:each) do
165
165
  Sorcery::CryptoProviders::BCrypt.reset!
166
166
  end
167
-
167
+
168
168
  it "should be comparable with original secret" do
169
169
  BCrypt::Password.new(Sorcery::CryptoProviders::BCrypt.encrypt('Noam Ben-Ari')).should == 'Noam Ben-Ari'
170
170
  end
171
-
171
+
172
172
  it "works with multiple costs" do
173
173
  Sorcery::CryptoProviders::BCrypt.cost = 3
174
174
  BCrypt::Password.new(Sorcery::CryptoProviders::BCrypt.encrypt('Noam Ben-Ari')).should == 'Noam Ben-Ari'
175
175
  end
176
-
176
+
177
177
  it "matches? returns true when matches" do
178
178
  Sorcery::CryptoProviders::BCrypt.matches?(@digest, 'Noam Ben-Ari').should be_true
179
179
  end
180
-
180
+
181
181
  it "matches? returns false when no match" do
182
182
  Sorcery::CryptoProviders::BCrypt.matches?(@digest, 'Some Dude').should be_false
183
183
  end
@@ -188,9 +188,11 @@ describe "Crypto Providers wrappers" do
188
188
 
189
189
  it "sets cost when stretches is set" do
190
190
  Sorcery::CryptoProviders::BCrypt.stretches = 4
191
- Sorcery::CryptoProviders::BCrypt.cost.should == 4
191
+
192
+ # stubbed in Sorcery::TestHelpers::Internal
193
+ Sorcery::CryptoProviders::BCrypt.cost.should == 1
192
194
  end
193
-
195
+
194
196
  end
195
-
197
+
196
198
  end