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.
Files changed (353) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +56 -0
  3. data/.travis.yml +130 -1
  4. data/CHANGELOG.md +270 -0
  5. data/Gemfile +17 -22
  6. data/README.md +371 -0
  7. data/Rakefile +3 -79
  8. data/gemfiles/active_record-rails40.gemfile +7 -0
  9. data/gemfiles/active_record-rails41.gemfile +7 -0
  10. data/gemfiles/mongo_mapper-rails40.gemfile +9 -0
  11. data/gemfiles/mongo_mapper-rails41.gemfile +9 -0
  12. data/gemfiles/mongoid-rails40.gemfile +9 -0
  13. data/gemfiles/mongoid-rails41.gemfile +9 -0
  14. data/gemfiles/mongoid3-rails32.gemfile +9 -0
  15. data/lib/generators/sorcery/USAGE +1 -1
  16. data/lib/generators/sorcery/helpers.rb +40 -0
  17. data/lib/generators/sorcery/install_generator.rb +38 -20
  18. data/lib/generators/sorcery/templates/initializer.rb +35 -10
  19. data/lib/generators/sorcery/templates/migration/activity_logging.rb +2 -11
  20. data/lib/generators/sorcery/templates/migration/brute_force_protection.rb +3 -7
  21. data/lib/generators/sorcery/templates/migration/core.rb +5 -8
  22. data/lib/generators/sorcery/templates/migration/external.rb +3 -5
  23. data/lib/generators/sorcery/templates/migration/remember_me.rb +2 -9
  24. data/lib/generators/sorcery/templates/migration/reset_password.rb +2 -10
  25. data/lib/generators/sorcery/templates/migration/user_activation.rb +2 -10
  26. data/lib/sorcery/adapters/active_record_adapter.rb +120 -0
  27. data/lib/sorcery/adapters/base_adapter.rb +30 -0
  28. data/lib/sorcery/adapters/data_mapper_adapter.rb +176 -0
  29. data/lib/sorcery/adapters/mongo_mapper_adapter.rb +110 -0
  30. data/lib/sorcery/adapters/mongoid_adapter.rb +97 -0
  31. data/lib/sorcery/controller/config.rb +65 -0
  32. data/lib/sorcery/controller/submodules/activity_logging.rb +16 -21
  33. data/lib/sorcery/controller/submodules/brute_force_protection.rb +6 -6
  34. data/lib/sorcery/controller/submodules/external.rb +42 -43
  35. data/lib/sorcery/controller/submodules/remember_me.rb +5 -5
  36. data/lib/sorcery/controller/submodules/session_timeout.rb +11 -7
  37. data/lib/sorcery/controller.rb +22 -74
  38. data/lib/sorcery/model/config.rb +96 -0
  39. data/lib/sorcery/model/submodules/activity_logging.rb +30 -13
  40. data/lib/sorcery/model/submodules/brute_force_protection.rb +25 -27
  41. data/lib/sorcery/model/submodules/external.rb +53 -9
  42. data/lib/sorcery/model/submodules/remember_me.rb +15 -19
  43. data/lib/sorcery/model/submodules/reset_password.rb +36 -33
  44. data/lib/sorcery/model/submodules/user_activation.rb +51 -48
  45. data/lib/sorcery/model/temporary_token.rb +4 -4
  46. data/lib/sorcery/model.rb +81 -175
  47. data/lib/sorcery/protocols/oauth.rb +42 -0
  48. data/lib/sorcery/protocols/oauth2.rb +47 -0
  49. data/lib/sorcery/providers/base.rb +38 -0
  50. data/lib/sorcery/providers/facebook.rb +63 -0
  51. data/lib/sorcery/providers/github.rb +51 -0
  52. data/lib/sorcery/providers/google.rb +51 -0
  53. data/lib/sorcery/providers/heroku.rb +57 -0
  54. data/lib/sorcery/providers/jira.rb +77 -0
  55. data/lib/sorcery/providers/linkedin.rb +66 -0
  56. data/lib/sorcery/providers/liveid.rb +53 -0
  57. data/lib/sorcery/providers/salesforce.rb +50 -0
  58. data/lib/sorcery/providers/twitter.rb +59 -0
  59. data/lib/sorcery/providers/vk.rb +63 -0
  60. data/lib/sorcery/providers/xing.rb +64 -0
  61. data/lib/sorcery/test_helpers/internal/rails.rb +17 -6
  62. data/lib/sorcery/test_helpers/internal.rb +27 -6
  63. data/lib/sorcery/test_helpers/rails/controller.rb +21 -0
  64. data/lib/sorcery/test_helpers/rails/integration.rb +26 -0
  65. data/lib/sorcery/version.rb +3 -0
  66. data/lib/sorcery.rb +82 -58
  67. data/sorcery.gemspec +24 -362
  68. data/spec/active_record/user_activation_spec.rb +18 -0
  69. data/spec/active_record/user_activity_logging_spec.rb +17 -0
  70. data/spec/{rails3/spec → active_record}/user_brute_force_protection_spec.rb +6 -5
  71. data/spec/{rails3/spec → active_record}/user_oauth_spec.rb +6 -5
  72. data/spec/{rails3/spec → active_record}/user_remember_me_spec.rb +5 -4
  73. data/spec/{rails3/spec → active_record}/user_reset_password_spec.rb +7 -7
  74. data/spec/active_record/user_spec.rb +37 -0
  75. data/spec/controllers/controller_activity_logging_spec.rb +124 -0
  76. data/spec/controllers/controller_brute_force_protection_spec.rb +43 -0
  77. data/spec/controllers/controller_http_basic_auth_spec.rb +68 -0
  78. data/spec/controllers/controller_oauth2_spec.rb +414 -0
  79. data/spec/controllers/controller_oauth_spec.rb +240 -0
  80. data/spec/controllers/controller_remember_me_spec.rb +117 -0
  81. data/spec/controllers/controller_session_timeout_spec.rb +80 -0
  82. data/spec/controllers/controller_spec.rb +218 -0
  83. data/spec/data_mapper/user_activation_spec.rb +10 -0
  84. data/spec/data_mapper/user_activity_logging_spec.rb +14 -0
  85. data/spec/data_mapper/user_brute_force_protection_spec.rb +9 -0
  86. data/spec/data_mapper/user_oauth_spec.rb +9 -0
  87. data/spec/data_mapper/user_remember_me_spec.rb +8 -0
  88. data/spec/data_mapper/user_reset_password_spec.rb +8 -0
  89. data/spec/data_mapper/user_spec.rb +27 -0
  90. data/spec/mongo_mapper/user_activation_spec.rb +9 -0
  91. data/spec/mongo_mapper/user_activity_logging_spec.rb +8 -0
  92. data/spec/mongo_mapper/user_brute_force_protection_spec.rb +8 -0
  93. data/spec/mongo_mapper/user_oauth_spec.rb +8 -0
  94. data/spec/mongo_mapper/user_remember_me_spec.rb +8 -0
  95. data/spec/mongo_mapper/user_reset_password_spec.rb +8 -0
  96. data/spec/mongo_mapper/user_spec.rb +37 -0
  97. data/spec/mongoid/user_activation_spec.rb +9 -0
  98. data/spec/mongoid/user_activity_logging_spec.rb +8 -0
  99. data/spec/mongoid/user_brute_force_protection_spec.rb +8 -0
  100. data/spec/mongoid/user_oauth_spec.rb +8 -0
  101. data/spec/mongoid/user_remember_me_spec.rb +8 -0
  102. data/spec/mongoid/user_reset_password_spec.rb +8 -0
  103. data/spec/mongoid/user_spec.rb +51 -0
  104. data/spec/orm/active_record.rb +21 -0
  105. data/spec/orm/data_mapper.rb +48 -0
  106. data/spec/orm/mongo_mapper.rb +10 -0
  107. data/spec/orm/mongoid.rb +22 -0
  108. data/spec/{rails3/app/models → rails_app/app/active_record}/user.rb +1 -2
  109. data/spec/rails_app/app/active_record/user_provider.rb +3 -0
  110. data/spec/rails_app/app/controllers/sorcery_controller.rb +285 -0
  111. data/spec/rails_app/app/data_mapper/authentication.rb +8 -0
  112. data/spec/rails_app/app/data_mapper/user.rb +7 -0
  113. data/spec/{rails3_mongo_mapper/app/models → rails_app/app/mongo_mapper}/user.rb +2 -0
  114. data/spec/{rails3_mongoid/app/models → rails_app/app/mongoid}/user.rb +2 -0
  115. data/spec/{rails3_mongo_mapper → rails_app}/config/application.rb +13 -8
  116. data/spec/rails_app/config/boot.rb +4 -0
  117. data/spec/rails_app/config/database.yml +22 -0
  118. data/spec/{rails3_mongo_mapper → rails_app}/config/environments/test.rb +2 -0
  119. data/spec/{rails3_mongoid → rails_app}/config/initializers/session_store.rb +4 -0
  120. data/spec/rails_app/config/routes.rb +51 -0
  121. data/spec/{rails3_mongo_mapper → rails_app}/config.ru +1 -1
  122. data/spec/{rails3 → rails_app}/db/migrate/activation/20101224223622_add_activation_to_users.rb +3 -3
  123. data/spec/{rails3 → rails_app}/db/migrate/core/20101224223620_create_users.rb +2 -2
  124. data/spec/rails_app/db/migrate/external/20101224223628_create_authentications_and_user_providers.rb +22 -0
  125. data/spec/rails_app/log/development.log +1791 -0
  126. data/spec/shared_examples/user_activation_shared_examples.rb +137 -98
  127. data/spec/shared_examples/user_activity_logging_shared_examples.rb +83 -15
  128. data/spec/shared_examples/user_brute_force_protection_shared_examples.rb +140 -21
  129. data/spec/shared_examples/user_oauth_shared_examples.rb +21 -16
  130. data/spec/shared_examples/user_remember_me_shared_examples.rb +36 -24
  131. data/spec/shared_examples/user_reset_password_shared_examples.rb +163 -130
  132. data/spec/shared_examples/user_shared_examples.rb +355 -193
  133. data/spec/sorcery_crypto_providers_spec.rb +74 -72
  134. data/spec/spec_helper.rb +32 -4
  135. metadata +262 -508
  136. data/Gemfile.lock +0 -175
  137. data/README.rdoc +0 -261
  138. data/VERSION +0 -1
  139. data/lib/sorcery/controller/submodules/external/protocols/oauth1.rb +0 -46
  140. data/lib/sorcery/controller/submodules/external/protocols/oauth2.rb +0 -49
  141. data/lib/sorcery/controller/submodules/external/providers/base.rb +0 -21
  142. data/lib/sorcery/controller/submodules/external/providers/facebook.rb +0 -98
  143. data/lib/sorcery/controller/submodules/external/providers/github.rb +0 -92
  144. data/lib/sorcery/controller/submodules/external/providers/google.rb +0 -91
  145. data/lib/sorcery/controller/submodules/external/providers/linkedin.rb +0 -102
  146. data/lib/sorcery/controller/submodules/external/providers/liveid.rb +0 -92
  147. data/lib/sorcery/controller/submodules/external/providers/twitter.rb +0 -93
  148. data/lib/sorcery/controller/submodules/external/providers/vk.rb +0 -100
  149. data/lib/sorcery/controller/submodules/external/providers/xing.rb +0 -97
  150. data/lib/sorcery/model/adapters/active_record.rb +0 -49
  151. data/lib/sorcery/model/adapters/mongo_mapper.rb +0 -56
  152. data/lib/sorcery/model/adapters/mongoid.rb +0 -88
  153. data/lib/sorcery/test_helpers/rails.rb +0 -16
  154. data/lib/sorcery/test_helpers.rb +0 -5
  155. data/spec/Gemfile +0 -12
  156. data/spec/Gemfile.lock +0 -129
  157. data/spec/README.md +0 -31
  158. data/spec/Rakefile +0 -12
  159. data/spec/rails3/.gitignore +0 -4
  160. data/spec/rails3/.rspec +0 -1
  161. data/spec/rails3/Gemfile +0 -15
  162. data/spec/rails3/Gemfile.lock +0 -162
  163. data/spec/rails3/README +0 -256
  164. data/spec/rails3/Rakefile +0 -11
  165. data/spec/rails3/app/controllers/application_controller.rb +0 -208
  166. data/spec/rails3/config/application.rb +0 -46
  167. data/spec/rails3/config/boot.rb +0 -13
  168. data/spec/rails3/config/database.yml +0 -27
  169. data/spec/rails3/config/environments/development.rb +0 -26
  170. data/spec/rails3/config/environments/in_memory.rb +0 -35
  171. data/spec/rails3/config/environments/production.rb +0 -49
  172. data/spec/rails3/config/environments/test.rb +0 -35
  173. data/spec/rails3/config/initializers/session_store.rb +0 -8
  174. data/spec/rails3/config/routes.rb +0 -59
  175. data/spec/rails3/config.ru +0 -4
  176. data/spec/rails3/db/migrate/external/20101224223628_create_authentications.rb +0 -14
  177. data/spec/rails3/lib/tasks/.gitkeep +0 -0
  178. data/spec/rails3/public/404.html +0 -26
  179. data/spec/rails3/public/422.html +0 -26
  180. data/spec/rails3/public/500.html +0 -26
  181. data/spec/rails3/public/favicon.ico +0 -0
  182. data/spec/rails3/public/images/rails.png +0 -0
  183. data/spec/rails3/public/javascripts/application.js +0 -2
  184. data/spec/rails3/public/javascripts/controls.js +0 -965
  185. data/spec/rails3/public/javascripts/dragdrop.js +0 -974
  186. data/spec/rails3/public/javascripts/effects.js +0 -1123
  187. data/spec/rails3/public/javascripts/prototype.js +0 -6001
  188. data/spec/rails3/public/javascripts/rails.js +0 -175
  189. data/spec/rails3/public/robots.txt +0 -5
  190. data/spec/rails3/public/stylesheets/.gitkeep +0 -0
  191. data/spec/rails3/script/rails +0 -6
  192. data/spec/rails3/spec/controller_activity_logging_spec.rb +0 -130
  193. data/spec/rails3/spec/controller_brute_force_protection_spec.rb +0 -96
  194. data/spec/rails3/spec/controller_http_basic_auth_spec.rb +0 -50
  195. data/spec/rails3/spec/controller_oauth2_spec.rb +0 -380
  196. data/spec/rails3/spec/controller_oauth_spec.rb +0 -206
  197. data/spec/rails3/spec/controller_remember_me_spec.rb +0 -96
  198. data/spec/rails3/spec/controller_session_timeout_spec.rb +0 -55
  199. data/spec/rails3/spec/controller_spec.rb +0 -182
  200. data/spec/rails3/spec/integration_spec.rb +0 -23
  201. data/spec/rails3/spec/spec.opts +0 -2
  202. data/spec/rails3/spec/spec_helper.orig.rb +0 -27
  203. data/spec/rails3/spec/spec_helper.rb +0 -71
  204. data/spec/rails3/spec/user_activation_spec.rb +0 -16
  205. data/spec/rails3/spec/user_activity_logging_spec.rb +0 -8
  206. data/spec/rails3/spec/user_spec.rb +0 -36
  207. data/spec/rails3/vendor/plugins/.gitkeep +0 -0
  208. data/spec/rails3_mongo_mapper/.gitignore +0 -4
  209. data/spec/rails3_mongo_mapper/.rspec +0 -1
  210. data/spec/rails3_mongo_mapper/Gemfile +0 -16
  211. data/spec/rails3_mongo_mapper/Gemfile.lock +0 -156
  212. data/spec/rails3_mongo_mapper/Rakefile +0 -11
  213. data/spec/rails3_mongo_mapper/app/controllers/application_controller.rb +0 -122
  214. data/spec/rails3_mongo_mapper/app/helpers/application_helper.rb +0 -2
  215. data/spec/rails3_mongo_mapper/app/mailers/sorcery_mailer.rb +0 -25
  216. data/spec/rails3_mongo_mapper/app/views/layouts/application.html.erb +0 -14
  217. data/spec/rails3_mongo_mapper/app/views/sorcery_mailer/activation_email.html.erb +0 -17
  218. data/spec/rails3_mongo_mapper/app/views/sorcery_mailer/activation_email.text.erb +0 -9
  219. data/spec/rails3_mongo_mapper/app/views/sorcery_mailer/activation_success_email.text.erb +0 -9
  220. data/spec/rails3_mongo_mapper/app/views/sorcery_mailer/reset_password_email.html.erb +0 -16
  221. data/spec/rails3_mongo_mapper/app/views/sorcery_mailer/reset_password_email.text.erb +0 -8
  222. data/spec/rails3_mongo_mapper/config/boot.rb +0 -13
  223. data/spec/rails3_mongo_mapper/config/environment.rb +0 -5
  224. data/spec/rails3_mongo_mapper/config/environments/development.rb +0 -30
  225. data/spec/rails3_mongo_mapper/config/environments/in_memory.rb +0 -0
  226. data/spec/rails3_mongo_mapper/config/environments/production.rb +0 -49
  227. data/spec/rails3_mongo_mapper/config/initializers/backtrace_silencers.rb +0 -7
  228. data/spec/rails3_mongo_mapper/config/initializers/inflections.rb +0 -10
  229. data/spec/rails3_mongo_mapper/config/initializers/mime_types.rb +0 -5
  230. data/spec/rails3_mongo_mapper/config/initializers/mongo.rb +0 -2
  231. data/spec/rails3_mongo_mapper/config/initializers/secret_token.rb +0 -7
  232. data/spec/rails3_mongo_mapper/config/initializers/session_store.rb +0 -8
  233. data/spec/rails3_mongo_mapper/config/locales/en.yml +0 -5
  234. data/spec/rails3_mongo_mapper/config/routes.rb +0 -59
  235. data/spec/rails3_mongo_mapper/db/schema.rb +0 -23
  236. data/spec/rails3_mongo_mapper/db/seeds.rb +0 -7
  237. data/spec/rails3_mongo_mapper/lib/tasks/.gitkeep +0 -0
  238. data/spec/rails3_mongo_mapper/public/404.html +0 -26
  239. data/spec/rails3_mongo_mapper/public/422.html +0 -26
  240. data/spec/rails3_mongo_mapper/public/500.html +0 -26
  241. data/spec/rails3_mongo_mapper/public/favicon.ico +0 -0
  242. data/spec/rails3_mongo_mapper/public/images/rails.png +0 -0
  243. data/spec/rails3_mongo_mapper/public/javascripts/application.js +0 -2
  244. data/spec/rails3_mongo_mapper/public/javascripts/controls.js +0 -965
  245. data/spec/rails3_mongo_mapper/public/javascripts/dragdrop.js +0 -974
  246. data/spec/rails3_mongo_mapper/public/javascripts/effects.js +0 -1123
  247. data/spec/rails3_mongo_mapper/public/javascripts/prototype.js +0 -6001
  248. data/spec/rails3_mongo_mapper/public/javascripts/rails.js +0 -175
  249. data/spec/rails3_mongo_mapper/public/robots.txt +0 -5
  250. data/spec/rails3_mongo_mapper/public/stylesheets/.gitkeep +0 -0
  251. data/spec/rails3_mongo_mapper/script/rails +0 -6
  252. data/spec/rails3_mongo_mapper/spec/controller_spec.rb +0 -175
  253. data/spec/rails3_mongo_mapper/spec/spec.opts +0 -2
  254. data/spec/rails3_mongo_mapper/spec/spec_helper.orig.rb +0 -27
  255. data/spec/rails3_mongo_mapper/spec/spec_helper.rb +0 -55
  256. data/spec/rails3_mongo_mapper/spec/user_activation_spec.rb +0 -9
  257. data/spec/rails3_mongo_mapper/spec/user_activity_logging_spec.rb +0 -8
  258. data/spec/rails3_mongo_mapper/spec/user_brute_force_protection_spec.rb +0 -8
  259. data/spec/rails3_mongo_mapper/spec/user_oauth_spec.rb +0 -8
  260. data/spec/rails3_mongo_mapper/spec/user_remember_me_spec.rb +0 -8
  261. data/spec/rails3_mongo_mapper/spec/user_reset_password_spec.rb +0 -8
  262. data/spec/rails3_mongo_mapper/spec/user_spec.rb +0 -37
  263. data/spec/rails3_mongo_mapper/vendor/plugins/.gitkeep +0 -0
  264. data/spec/rails3_mongoid/.gitignore +0 -4
  265. data/spec/rails3_mongoid/.rspec +0 -1
  266. data/spec/rails3_mongoid/Gemfile +0 -15
  267. data/spec/rails3_mongoid/Gemfile.lock +0 -146
  268. data/spec/rails3_mongoid/Rakefile +0 -11
  269. data/spec/rails3_mongoid/app/controllers/application_controller.rb +0 -127
  270. data/spec/rails3_mongoid/app/helpers/application_helper.rb +0 -2
  271. data/spec/rails3_mongoid/app/mailers/sorcery_mailer.rb +0 -25
  272. data/spec/rails3_mongoid/app/views/layouts/application.html.erb +0 -14
  273. data/spec/rails3_mongoid/app/views/sorcery_mailer/activation_email.html.erb +0 -17
  274. data/spec/rails3_mongoid/app/views/sorcery_mailer/activation_email.text.erb +0 -9
  275. data/spec/rails3_mongoid/app/views/sorcery_mailer/activation_success_email.html.erb +0 -17
  276. data/spec/rails3_mongoid/app/views/sorcery_mailer/activation_success_email.text.erb +0 -9
  277. data/spec/rails3_mongoid/app/views/sorcery_mailer/reset_password_email.html.erb +0 -16
  278. data/spec/rails3_mongoid/app/views/sorcery_mailer/reset_password_email.text.erb +0 -8
  279. data/spec/rails3_mongoid/config/application.rb +0 -51
  280. data/spec/rails3_mongoid/config/boot.rb +0 -13
  281. data/spec/rails3_mongoid/config/environment.rb +0 -5
  282. data/spec/rails3_mongoid/config/environments/development.rb +0 -26
  283. data/spec/rails3_mongoid/config/environments/in_memory.rb +0 -0
  284. data/spec/rails3_mongoid/config/environments/production.rb +0 -49
  285. data/spec/rails3_mongoid/config/environments/test.rb +0 -35
  286. data/spec/rails3_mongoid/config/initializers/backtrace_silencers.rb +0 -7
  287. data/spec/rails3_mongoid/config/initializers/inflections.rb +0 -10
  288. data/spec/rails3_mongoid/config/initializers/mime_types.rb +0 -5
  289. data/spec/rails3_mongoid/config/initializers/secret_token.rb +0 -7
  290. data/spec/rails3_mongoid/config/locales/en.yml +0 -5
  291. data/spec/rails3_mongoid/config/mongoid.yml +0 -7
  292. data/spec/rails3_mongoid/config/routes.rb +0 -59
  293. data/spec/rails3_mongoid/config.ru +0 -4
  294. data/spec/rails3_mongoid/db/schema.rb +0 -23
  295. data/spec/rails3_mongoid/db/seeds.rb +0 -7
  296. data/spec/rails3_mongoid/lib/tasks/.gitkeep +0 -0
  297. data/spec/rails3_mongoid/public/404.html +0 -26
  298. data/spec/rails3_mongoid/public/422.html +0 -26
  299. data/spec/rails3_mongoid/public/500.html +0 -26
  300. data/spec/rails3_mongoid/public/favicon.ico +0 -0
  301. data/spec/rails3_mongoid/public/images/rails.png +0 -0
  302. data/spec/rails3_mongoid/public/javascripts/application.js +0 -2
  303. data/spec/rails3_mongoid/public/javascripts/controls.js +0 -965
  304. data/spec/rails3_mongoid/public/javascripts/dragdrop.js +0 -974
  305. data/spec/rails3_mongoid/public/javascripts/effects.js +0 -1123
  306. data/spec/rails3_mongoid/public/javascripts/prototype.js +0 -6001
  307. data/spec/rails3_mongoid/public/javascripts/rails.js +0 -175
  308. data/spec/rails3_mongoid/public/robots.txt +0 -5
  309. data/spec/rails3_mongoid/public/stylesheets/.gitkeep +0 -0
  310. data/spec/rails3_mongoid/script/rails +0 -6
  311. data/spec/rails3_mongoid/spec/controller_activity_logging_spec.rb +0 -111
  312. data/spec/rails3_mongoid/spec/controller_spec.rb +0 -186
  313. data/spec/rails3_mongoid/spec/spec.opts +0 -2
  314. data/spec/rails3_mongoid/spec/spec_helper.orig.rb +0 -27
  315. data/spec/rails3_mongoid/spec/spec_helper.rb +0 -55
  316. data/spec/rails3_mongoid/spec/user_activation_spec.rb +0 -9
  317. data/spec/rails3_mongoid/spec/user_activity_logging_spec.rb +0 -8
  318. data/spec/rails3_mongoid/spec/user_brute_force_protection_spec.rb +0 -8
  319. data/spec/rails3_mongoid/spec/user_oauth_spec.rb +0 -8
  320. data/spec/rails3_mongoid/spec/user_remember_me_spec.rb +0 -8
  321. data/spec/rails3_mongoid/spec/user_reset_password_spec.rb +0 -8
  322. data/spec/rails3_mongoid/spec/user_spec.rb +0 -38
  323. data/spec/rails3_mongoid/vendor/plugins/.gitkeep +0 -0
  324. data/spec/shared_examples/controller_oauth2_shared_examples.rb +0 -56
  325. data/spec/shared_examples/controller_oauth_shared_examples.rb +0 -55
  326. /data/lib/sorcery/{controller/submodules/external/protocols → protocols}/certs/ca-bundle.crt +0 -0
  327. /data/spec/{rails3/app/models → rails_app/app/active_record}/authentication.rb +0 -0
  328. /data/spec/{rails3 → rails_app}/app/helpers/application_helper.rb +0 -0
  329. /data/spec/{rails3 → rails_app}/app/mailers/sorcery_mailer.rb +0 -0
  330. /data/spec/{rails3_mongo_mapper/app/models → rails_app/app/mongo_mapper}/authentication.rb +0 -0
  331. /data/spec/{rails3_mongoid/app/models → rails_app/app/mongoid}/authentication.rb +0 -0
  332. /data/spec/{rails3 → rails_app}/app/views/application/index.html.erb +0 -0
  333. /data/spec/{rails3 → rails_app}/app/views/layouts/application.html.erb +0 -0
  334. /data/spec/{rails3 → rails_app}/app/views/sorcery_mailer/activation_email.html.erb +0 -0
  335. /data/spec/{rails3 → rails_app}/app/views/sorcery_mailer/activation_email.text.erb +0 -0
  336. /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
  337. /data/spec/{rails3_mongo_mapper → rails_app}/app/views/sorcery_mailer/activation_success_email.html.erb +0 -0
  338. /data/spec/{rails3 → rails_app}/app/views/sorcery_mailer/activation_success_email.text.erb +0 -0
  339. /data/spec/{rails3 → rails_app}/app/views/sorcery_mailer/reset_password_email.html.erb +0 -0
  340. /data/spec/{rails3 → rails_app}/app/views/sorcery_mailer/reset_password_email.text.erb +0 -0
  341. /data/spec/{rails3 → rails_app}/app/views/sorcery_mailer/send_unlock_token_email.text.erb +0 -0
  342. /data/spec/{rails3 → rails_app}/config/environment.rb +0 -0
  343. /data/spec/{rails3 → rails_app}/config/initializers/backtrace_silencers.rb +0 -0
  344. /data/spec/{rails3 → rails_app}/config/initializers/inflections.rb +0 -0
  345. /data/spec/{rails3 → rails_app}/config/initializers/mime_types.rb +0 -0
  346. /data/spec/{rails3 → rails_app}/config/initializers/secret_token.rb +0 -0
  347. /data/spec/{rails3 → rails_app}/config/locales/en.yml +0 -0
  348. /data/spec/{rails3 → rails_app}/db/migrate/activity_logging/20101224223624_add_activity_logging_to_users.rb +0 -0
  349. /data/spec/{rails3 → rails_app}/db/migrate/brute_force_protection/20101224223626_add_brute_force_protection_to_users.rb +0 -0
  350. /data/spec/{rails3 → rails_app}/db/migrate/remember_me/20101224223623_add_remember_me_token_to_users.rb +0 -0
  351. /data/spec/{rails3 → rails_app}/db/migrate/reset_password/20101224223622_add_reset_password_to_users.rb +0 -0
  352. /data/spec/{rails3 → rails_app}/db/schema.rb +0 -0
  353. /data/spec/{rails3 → rails_app}/db/seeds.rb +0 -0
@@ -10,16 +10,16 @@ module Sorcery
10
10
  base.sorcery_config.class_eval do
11
11
  attr_accessor :activation_state_attribute_name, # the attribute name to hold activation state
12
12
  # (active/pending).
13
-
13
+
14
14
  :activation_token_attribute_name, # the attribute name to hold activation code
15
15
  # (sent by email).
16
-
16
+
17
17
  :activation_token_expires_at_attribute_name, # the attribute name to hold activation code
18
- # expiration date.
19
-
18
+ # expiration date.
19
+
20
20
  :activation_token_expiration_period, # how many seconds before the activation code
21
21
  # expires. nil for never expires.
22
-
22
+
23
23
  :user_activation_mailer, # your mailer class. Required when
24
24
  # activation_mailer_disabled == false.
25
25
 
@@ -29,14 +29,14 @@ module Sorcery
29
29
 
30
30
  :activation_needed_email_method_name, # activation needed email method on your
31
31
  # mailer class.
32
-
32
+
33
33
  :activation_success_email_method_name, # activation success email method on your
34
34
  # mailer class.
35
-
35
+
36
36
  :prevent_non_active_users_to_login # do you want to prevent or allow users that
37
37
  # did not activate by email to login?
38
38
  end
39
-
39
+
40
40
  base.sorcery_config.instance_eval do
41
41
  @defaults.merge!(:@activation_state_attribute_name => :activation_state,
42
42
  :@activation_token_attribute_name => :activation_token,
@@ -49,27 +49,24 @@ module Sorcery
49
49
  :@prevent_non_active_users_to_login => true)
50
50
  reset!
51
51
  end
52
-
52
+
53
53
  base.class_eval do
54
54
  # don't setup activation if no password supplied - this user is created automatically
55
- before_create :setup_activation, :if => Proc.new { |user| user.send(sorcery_config.password_attribute_name).present? }
55
+ sorcery_adapter.define_callback :before, :create, :setup_activation, :if => Proc.new { |user| user.send(sorcery_config.password_attribute_name).present? }
56
56
  # don't send activation needed email if no crypted password created - this user is external (OAuth etc.)
57
- after_create :send_activation_needed_email!, :if => Proc.new { |user| !user.external? }
57
+ sorcery_adapter.define_callback :after, :create, :send_activation_needed_email!, :if => :send_activation_needed_email?
58
58
  end
59
-
59
+
60
60
  base.sorcery_config.after_config << :validate_mailer_defined
61
- base.sorcery_config.after_config << :define_user_activation_mongoid_fields if defined?(Mongoid) and base.ancestors.include?(Mongoid::Document)
62
- if defined?(MongoMapper) and base.ancestors.include?(MongoMapper::Document)
63
- base.sorcery_config.after_config << :define_user_activation_mongo_mapper_fields
64
- end
61
+ base.sorcery_config.after_config << :define_user_activation_fields
65
62
  base.sorcery_config.before_authenticate << :prevent_non_active_login
66
-
63
+
67
64
  base.extend(ClassMethods)
68
65
  base.send(:include, InstanceMethods)
69
66
 
70
67
 
71
68
  end
72
-
69
+
73
70
  module ClassMethods
74
71
  # Find user by token, also checks for expiration.
75
72
  # Returns the user if token found and is valid.
@@ -78,9 +75,9 @@ module Sorcery
78
75
  token_expiration_date_attr = @sorcery_config.activation_token_expires_at_attribute_name
79
76
  load_from_token(token, token_attr_name, token_expiration_date_attr)
80
77
  end
81
-
78
+
82
79
  protected
83
-
80
+
84
81
  # This submodule requires the developer to define his own mailer class to be used by it
85
82
  # when activation_mailer_disabled is false
86
83
  def validate_mailer_defined
@@ -88,35 +85,16 @@ module Sorcery
88
85
  raise ArgumentError, msg if @sorcery_config.user_activation_mailer == nil and @sorcery_config.activation_mailer_disabled == false
89
86
  end
90
87
 
91
- def define_user_activation_mongoid_fields
92
- self.class_eval do
93
- field sorcery_config.activation_state_attribute_name, :type => String
94
- field sorcery_config.activation_token_attribute_name, :type => String
95
- field sorcery_config.activation_token_expires_at_attribute_name, :type => Time
96
- end
97
- end
98
-
99
- def define_user_activation_mongo_mapper_fields
88
+ def define_user_activation_fields
100
89
  self.class_eval do
101
- key sorcery_config.activation_state_attribute_name, String
102
- key sorcery_config.activation_token_attribute_name, String
103
- key sorcery_config.activation_token_expires_at_attribute_name, Time
90
+ sorcery_adapter.define_field sorcery_config.activation_state_attribute_name, String
91
+ sorcery_adapter.define_field sorcery_config.activation_token_attribute_name, String
92
+ sorcery_adapter.define_field sorcery_config.activation_token_expires_at_attribute_name, Time
104
93
  end
105
94
  end
106
95
  end
107
-
108
- module InstanceMethods
109
- # clears activation code, sets the user as 'active' and optionaly sends a success email.
110
- def activate!
111
- config = sorcery_config
112
- self.send(:"#{config.activation_token_attribute_name}=", nil)
113
- self.send(:"#{config.activation_state_attribute_name}=", "active")
114
- send_activation_success_email! unless self.external?
115
- save!(:validate => false) # don't run validations
116
- end
117
-
118
- protected
119
96
 
97
+ module InstanceMethods
120
98
  def setup_activation
121
99
  config = sorcery_config
122
100
  generated_activation_token = TemporaryToken.generate_random_token
@@ -125,15 +103,40 @@ module Sorcery
125
103
  self.send(:"#{config.activation_token_expires_at_attribute_name}=", Time.now.in_time_zone + config.activation_token_expiration_period) if config.activation_token_expiration_period
126
104
  end
127
105
 
106
+ # clears activation code, sets the user as 'active' and optionaly sends a success email.
107
+ def activate!
108
+ config = sorcery_config
109
+ self.send(:"#{config.activation_token_attribute_name}=", nil)
110
+ self.send(:"#{config.activation_state_attribute_name}=", "active")
111
+ send_activation_success_email! if send_activation_success_email?
112
+ sorcery_adapter.save(:validate => false, :raise_on_failure => true)
113
+ end
114
+
115
+ protected
116
+
128
117
  # called automatically after user initial creation.
129
118
  def send_activation_needed_email!
130
- generic_send_email(:activation_needed_email_method_name, :user_activation_mailer) unless sorcery_config.activation_needed_email_method_name.nil? or sorcery_config.activation_mailer_disabled == true
119
+ generic_send_email(:activation_needed_email_method_name, :user_activation_mailer)
131
120
  end
132
121
 
133
122
  def send_activation_success_email!
134
- generic_send_email(:activation_success_email_method_name, :user_activation_mailer) unless sorcery_config.activation_success_email_method_name.nil? or sorcery_config.activation_mailer_disabled == true
123
+ generic_send_email(:activation_success_email_method_name, :user_activation_mailer)
135
124
  end
136
-
125
+
126
+ def send_activation_success_email?
127
+ !external? && (
128
+ !(sorcery_config.activation_success_email_method_name.nil? ||
129
+ sorcery_config.activation_mailer_disabled == true)
130
+ )
131
+ end
132
+
133
+ def send_activation_needed_email?
134
+ !external? && (
135
+ !(sorcery_config.activation_needed_email_method_name.nil? ||
136
+ sorcery_config.activation_mailer_disabled == true)
137
+ )
138
+ end
139
+
137
140
  def prevent_non_active_login
138
141
  config = sorcery_config
139
142
  config.prevent_non_active_users_to_login ? self.send(config.activation_state_attribute_name) == "active" : true
@@ -143,4 +146,4 @@ module Sorcery
143
146
  end
144
147
  end
145
148
  end
146
- end
149
+ end
@@ -3,22 +3,22 @@ require 'securerandom'
3
3
  module Sorcery
4
4
  module Model
5
5
  # This module encapsulates the logic for temporary token.
6
- # A temporary token is created to identify a user in scenarios
6
+ # A temporary token is created to identify a user in scenarios
7
7
  # such as reseting password and activating the user by email.
8
8
  module TemporaryToken
9
9
  def self.included(base)
10
10
  base.extend(ClassMethods)
11
11
  end
12
-
12
+
13
13
  # Random code, used for salt and temporary tokens.
14
14
  def self.generate_random_token
15
15
  SecureRandom.base64(15).tr('+/=lIO0', 'pqrsxyz')
16
16
  end
17
-
17
+
18
18
  module ClassMethods
19
19
  def load_from_token(token, token_attr_name, token_expiration_date_attr)
20
20
  return nil if token.blank?
21
- user = find_by_sorcery_token(token_attr_name,token)
21
+ user = sorcery_adapter.find_by_token(token_attr_name,token)
22
22
  if !user.blank? && !user.send(token_expiration_date_attr).nil?
23
23
  return Time.now.in_time_zone < user.send(token_expiration_date_attr) ? user : nil
24
24
  end
data/lib/sorcery/model.rb CHANGED
@@ -7,91 +7,70 @@ module Sorcery
7
7
  # which when called adds the other capabilities to the class.
8
8
  # This method is also the place to configure the plugin in the Model layer.
9
9
  module Model
10
- def self.included(klass)
11
- klass.class_eval do
12
- class << self
13
- def authenticates_with_sorcery!
14
- @sorcery_config = Config.new
15
- self.class_eval do
16
- extend ClassMethods # included here, before submodules, so they can be overriden by them.
17
- include InstanceMethods
18
- include TemporaryToken
19
- end
10
+ def authenticates_with_sorcery!
11
+ @sorcery_config = Config.new
20
12
 
21
- include_required_submodules!
13
+ extend ClassMethods # included here, before submodules, so they can be overriden by them.
14
+ include InstanceMethods
15
+ include TemporaryToken
22
16
 
23
- # This runs the options block set in the initializer on the model class.
24
- ::Sorcery::Controller::Config.user_config.tap{|blk| blk.call(@sorcery_config) if blk}
17
+ include_required_submodules!
25
18
 
26
- init_mongoid_support! if defined?(Mongoid) and self.ancestors.include?(Mongoid::Document)
27
- init_mongo_mapper_support! if defined?(MongoMapper) and self.ancestors.include?(MongoMapper::Document)
19
+ # This runs the options block set in the initializer on the model class.
20
+ ::Sorcery::Controller::Config.user_config.tap{|blk| blk.call(@sorcery_config) if blk}
28
21
 
29
- init_orm_hooks!
22
+ define_base_fields
23
+ init_orm_hooks!
30
24
 
31
- @sorcery_config.after_config << :add_config_inheritance if @sorcery_config.subclasses_inherit_config
32
- @sorcery_config.after_config.each { |c| send(c) }
33
- end
25
+ @sorcery_config.after_config << :add_config_inheritance if @sorcery_config.subclasses_inherit_config
26
+ @sorcery_config.after_config.each { |c| send(c) }
27
+ end
34
28
 
35
- protected
36
-
37
- # includes required submodules into the model class,
38
- # which usually is called User.
39
- def include_required_submodules!
40
- self.class_eval do
41
- @sorcery_config.submodules = ::Sorcery::Controller::Config.submodules
42
- @sorcery_config.submodules.each do |mod|
43
- begin
44
- include Submodules.const_get(mod.to_s.split("_").map {|p| p.capitalize}.join(""))
45
- rescue NameError
46
- # don't stop on a missing submodule. Needed because some submodules are only defined
47
- # in the controller side.
48
- end
49
- end
50
- end
51
- end
29
+ private
52
30
 
53
- # defines mongoid fields on the model class,
54
- # using 1.8.x hash syntax to perserve compatibility.
55
- def init_mongoid_support!
56
- self.class_eval do
57
- sorcery_config.username_attribute_names.each do |username|
58
- field username, :type => String
59
- end
60
- field sorcery_config.email_attribute_name, :type => String unless sorcery_config.username_attribute_names.include?(sorcery_config.email_attribute_name)
61
- field sorcery_config.crypted_password_attribute_name, :type => String
62
- field sorcery_config.salt_attribute_name, :type => String
63
- end
64
- end
31
+ def define_base_fields
32
+ self.class_eval do
33
+ sorcery_config.username_attribute_names.each do |username|
34
+ sorcery_adapter.define_field username, String, length: 255
35
+ end
36
+ unless sorcery_config.username_attribute_names.include?(sorcery_config.email_attribute_name)
37
+ sorcery_adapter.define_field sorcery_config.email_attribute_name, String, length: 255
38
+ end
39
+ sorcery_adapter.define_field sorcery_config.crypted_password_attribute_name, String, length: 255
40
+ sorcery_adapter.define_field sorcery_config.salt_attribute_name, String, length: 255
41
+ end
65
42
 
66
- # defines mongo_mapper fields on the model class,
67
- def init_mongo_mapper_support!
68
- self.class_eval do
69
- sorcery_config.username_attribute_names.each do |username|
70
- key username, String
71
- end
72
- key sorcery_config.email_attribute_name, String unless sorcery_config.username_attribute_names.include?(sorcery_config.email_attribute_name)
73
- key sorcery_config.crypted_password_attribute_name, String
74
- key sorcery_config.salt_attribute_name, String
75
- end
76
- end
43
+ end
77
44
 
78
- # add virtual password accessor and ORM callbacks.
79
- def init_orm_hooks!
80
- self.class_eval do
81
- attr_accessor @sorcery_config.password_attribute_name
82
- #attr_protected @sorcery_config.crypted_password_attribute_name, @sorcery_config.salt_attribute_name
83
- before_save :encrypt_password, :if => Proc.new { |record|
84
- record.send(sorcery_config.password_attribute_name).present?
85
- }
86
- after_save :clear_virtual_password, :if => Proc.new { |record|
87
- record.send(sorcery_config.password_attribute_name).present?
88
- }
89
- end
45
+ # includes required submodules into the model class,
46
+ # which usually is called User.
47
+ def include_required_submodules!
48
+ self.class_eval do
49
+ @sorcery_config.submodules = ::Sorcery::Controller::Config.submodules
50
+ @sorcery_config.submodules.each do |mod|
51
+ begin
52
+ include Submodules.const_get(mod.to_s.split('_').map {|p| p.capitalize}.join)
53
+ rescue NameError
54
+ # don't stop on a missing submodule. Needed because some submodules are only defined
55
+ # in the controller side.
90
56
  end
91
57
  end
92
58
  end
93
59
  end
94
60
 
61
+ # add virtual password accessor and ORM callbacks.
62
+ def init_orm_hooks!
63
+ sorcery_adapter.define_callback :before, :validation, :encrypt_password, if: Proc.new {|record|
64
+ record.send(sorcery_config.password_attribute_name).present?
65
+ }
66
+
67
+ sorcery_adapter.define_callback :after, :save, :clear_virtual_password, if: Proc.new {|record|
68
+ record.send(sorcery_config.password_attribute_name).present?
69
+ }
70
+
71
+ attr_accessor sorcery_config.password_attribute_name
72
+ end
73
+
95
74
  module ClassMethods
96
75
  # Returns the class instance variable for configuration, when called by the class itself.
97
76
  def sorcery_config
@@ -104,13 +83,18 @@ module Sorcery
104
83
  # returns the user if success, nil otherwise.
105
84
  def authenticate(*credentials)
106
85
  raise ArgumentError, "at least 2 arguments required" if credentials.size < 2
107
- credentials[0].downcase! if @sorcery_config.downcase_username_before_authenticating
108
- user = find_by_credentials(credentials)
109
86
 
110
- set_encryption_attributes()
87
+ return false if credentials[0].blank?
88
+
89
+ if @sorcery_config.downcase_username_before_authenticating
90
+ credentials[0].downcase!
91
+ end
92
+
93
+ user = sorcery_adapter.find_by_credentials(credentials)
94
+
95
+ set_encryption_attributes
111
96
 
112
- _salt = user.send(@sorcery_config.salt_attribute_name) if user && !@sorcery_config.salt_attribute_name.nil? && !@sorcery_config.encryption_provider.nil?
113
- user if user && @sorcery_config.before_authenticate.all? {|c| user.send(c)} && credentials_match?(user.send(@sorcery_config.crypted_password_attribute_name),credentials[1],_salt)
97
+ user if user && @sorcery_config.before_authenticate.all? {|c| user.send(c)} && user.valid_password?(credentials[1])
114
98
  end
115
99
 
116
100
  # encrypt tokens using current encryption_provider.
@@ -129,13 +113,7 @@ module Sorcery
129
113
  @sorcery_config.encryption_provider.stretches = @sorcery_config.stretches if @sorcery_config.encryption_provider.respond_to?(:stretches) && @sorcery_config.stretches
130
114
  @sorcery_config.encryption_provider.join_token = @sorcery_config.salt_join_token if @sorcery_config.encryption_provider.respond_to?(:join_token) && @sorcery_config.salt_join_token
131
115
  end
132
-
133
- # Calls the configured encryption provider to compare the supplied password with the encrypted one.
134
- def credentials_match?(crypted, *tokens)
135
- return crypted == tokens.join if @sorcery_config.encryption_provider.nil?
136
- @sorcery_config.encryption_provider.matches?(crypted, *tokens)
137
- end
138
-
116
+
139
117
  def add_config_inheritance
140
118
  self.class_eval do
141
119
  def self.inherited(subclass)
@@ -164,6 +142,16 @@ module Sorcery
164
142
  send(sorcery_config.crypted_password_attribute_name).nil?
165
143
  end
166
144
 
145
+ # Calls the configured encryption provider to compare the supplied password with the encrypted one.
146
+ def valid_password?(pass)
147
+ _crypted = self.send(sorcery_config.crypted_password_attribute_name)
148
+ return _crypted == pass if sorcery_config.encryption_provider.nil?
149
+
150
+ _salt = self.send(sorcery_config.salt_attribute_name) unless sorcery_config.salt_attribute_name.nil?
151
+
152
+ sorcery_config.encryption_provider.matches?(_crypted, pass, _salt)
153
+ end
154
+
167
155
  protected
168
156
 
169
157
  # creates new salt and saves it.
@@ -177,6 +165,10 @@ module Sorcery
177
165
  def clear_virtual_password
178
166
  config = sorcery_config
179
167
  self.send(:"#{config.password_attribute_name}=", nil)
168
+
169
+ if respond_to?(:"#{config.password_attribute_name}_confirmation=")
170
+ self.send(:"#{config.password_attribute_name}_confirmation=", nil)
171
+ end
180
172
  end
181
173
 
182
174
  # calls the requested email method on the configured mailer
@@ -185,100 +177,14 @@ module Sorcery
185
177
  config = sorcery_config
186
178
  mail = config.send(mailer).send(config.send(method),self)
187
179
  if defined?(ActionMailer) and config.send(mailer).kind_of?(Class) and config.send(mailer) < ActionMailer::Base
188
- mail.deliver
189
- end
190
- end
191
- end
192
-
193
- # Each class which calls 'activate_sorcery!' receives an instance of this class.
194
- # Every submodule which gets loaded may add accessors to this class so that all
195
- # options will be configured from a single place.
196
- class Config
197
-
198
- attr_accessor :username_attribute_names, # change default username attribute, for example, to use :email
199
- # as the login.
200
-
201
- :password_attribute_name, # change *virtual* password attribute, the one which is used
202
- # until an encrypted one is generated.
203
-
204
- :email_attribute_name, # change default email attribute.
205
-
206
- :downcase_username_before_authenticating, # downcase the username before trying to authenticate, default is false
207
-
208
- :crypted_password_attribute_name, # change default crypted_password attribute.
209
- :salt_join_token, # what pattern to use to join the password with the salt
210
- :salt_attribute_name, # change default salt attribute.
211
- :stretches, # how many times to apply encryption to the password.
212
- :encryption_key, # encryption key used to encrypt reversible encryptions such as
213
- # AES256.
214
-
215
- :subclasses_inherit_config, # make this configuration inheritable for subclasses. Useful for
216
- # ActiveRecord's STI.
217
-
218
- :submodules, # configured in config/application.rb
219
- :before_authenticate, # an array of method names to call before authentication
220
- # completes. used internally.
221
-
222
- :after_config # an array of method names to call after configuration by user.
223
- # used internally.
224
-
225
- attr_reader :encryption_provider, # change default encryption_provider.
226
- :custom_encryption_provider, # use an external encryption class.
227
- :encryption_algorithm # encryption algorithm name. See 'encryption_algorithm=' below
228
- # for available options.
229
-
230
- def initialize
231
- @defaults = {
232
- :@submodules => [],
233
- :@username_attribute_names => [:username],
234
- :@password_attribute_name => :password,
235
- :@downcase_username_before_authenticating => false,
236
- :@email_attribute_name => :email,
237
- :@crypted_password_attribute_name => :crypted_password,
238
- :@encryption_algorithm => :bcrypt,
239
- :@encryption_provider => CryptoProviders::BCrypt,
240
- :@custom_encryption_provider => nil,
241
- :@encryption_key => nil,
242
- :@salt_join_token => "",
243
- :@salt_attribute_name => :salt,
244
- :@stretches => nil,
245
- :@subclasses_inherit_config => false,
246
- :@before_authenticate => [],
247
- :@after_config => []
248
- }
249
- reset!
250
- end
251
-
252
- # Resets all configuration options to their default values.
253
- def reset!
254
- @defaults.each do |k,v|
255
- instance_variable_set(k,v)
256
- end
257
- end
258
-
259
- def username_attribute_names=(fields)
260
- @username_attribute_names = fields.kind_of?(Array) ? fields : [fields]
261
- end
262
-
263
- def custom_encryption_provider=(provider)
264
- @custom_encryption_provider = @encryption_provider = provider
265
- end
266
-
267
- def encryption_algorithm=(algo)
268
- @encryption_algorithm = algo
269
- @encryption_provider = case @encryption_algorithm.to_sym
270
- when :none then nil
271
- when :md5 then CryptoProviders::MD5
272
- when :sha1 then CryptoProviders::SHA1
273
- when :sha256 then CryptoProviders::SHA256
274
- when :sha512 then CryptoProviders::SHA512
275
- when :aes256 then CryptoProviders::AES256
276
- when :bcrypt then CryptoProviders::BCrypt
277
- when :custom then @custom_encryption_provider
278
- else raise ArgumentError.new("Encryption algorithm supplied, #{algo}, is invalid")
180
+ # Rails 4.2 deprecates #deliver
181
+ if mail.respond_to?(:deliver_now)
182
+ mail.deliver_now
183
+ else
184
+ mail.deliver
185
+ end
279
186
  end
280
187
  end
281
-
282
188
  end
283
189
 
284
190
  end
@@ -0,0 +1,42 @@
1
+ require 'oauth'
2
+
3
+ module Sorcery
4
+ module Protocols
5
+ module Oauth
6
+
7
+ def oauth_version
8
+ '1.0'
9
+ end
10
+
11
+ def get_request_token(token=nil,secret=nil)
12
+ return ::OAuth::RequestToken.new(get_consumer, token, secret) if token && secret
13
+ get_consumer.get_request_token(oauth_callback: @callback_url)
14
+ end
15
+
16
+ def authorize_url(args)
17
+ get_request_token(
18
+ args[:request_token],
19
+ args[:request_token_secret]
20
+ ).authorize_url({
21
+ oauth_callback: @callback_url
22
+ })
23
+ end
24
+
25
+ def get_access_token(args)
26
+ get_request_token(
27
+ args[:request_token],
28
+ args[:request_token_secret]
29
+ ).get_access_token({
30
+ oauth_verifier: args[:oauth_verifier]
31
+ })
32
+ end
33
+
34
+ protected
35
+
36
+ def get_consumer
37
+ ::OAuth::Consumer.new(@key, @secret, site: @site)
38
+ end
39
+
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,47 @@
1
+ require 'oauth2'
2
+
3
+ module Sorcery
4
+ module Protocols
5
+ module Oauth2
6
+
7
+ def oauth_version
8
+ '2.0'
9
+ end
10
+
11
+ def authorize_url(options = {})
12
+ client = build_client(options)
13
+ client.auth_code.authorize_url(
14
+ redirect_uri: @callback_url,
15
+ scope: @scope,
16
+ display: @display,
17
+ state: @state
18
+ )
19
+ end
20
+
21
+ def get_access_token(args, options = {})
22
+ client = build_client(options)
23
+ client.auth_code.get_token(
24
+ args[:code],
25
+ {
26
+ redirect_uri: @callback_url,
27
+ parse: options.delete(:parse)
28
+ },
29
+ options
30
+ )
31
+ end
32
+
33
+ def build_client(options = {})
34
+ defaults = {
35
+ site: @site,
36
+ ssl: { ca_file: Sorcery::Controller::Config.ca_file }
37
+ }
38
+ ::OAuth2::Client.new(
39
+ @key,
40
+ @secret,
41
+ defaults.merge!(options)
42
+ )
43
+ end
44
+
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,38 @@
1
+ module Sorcery
2
+ module Providers
3
+ class Base
4
+
5
+ attr_reader :access_token
6
+
7
+ attr_accessor :callback_url, :key, :original_callback_url, :secret,
8
+ :site, :state, :user_info_mapping
9
+
10
+ def has_callback?; true; end
11
+
12
+ def initialize
13
+ @user_info_mapping = {}
14
+ end
15
+
16
+ def auth_hash(access_token, hash={})
17
+ return hash if access_token.nil?
18
+
19
+ token_hash = hash.dup
20
+ token_hash[:token] = access_token.token if access_token.respond_to?(:token)
21
+ token_hash[:refresh_token] = access_token.refresh_token if access_token.respond_to?(:refresh_token)
22
+ token_hash[:expires_at] = access_token.expires_at if access_token.respond_to?(:expires_at)
23
+ token_hash[:expires_in] = access_token.expires_at if access_token.respond_to?(:expires_in)
24
+ token_hash
25
+ end
26
+
27
+ def self.name
28
+ super.gsub(/Sorcery::Providers::/, '').downcase
29
+ end
30
+
31
+ # Ensure that all descendant classes are loaded before run this
32
+ def self.descendants
33
+ ObjectSpace.each_object(Class).select { |klass| klass < self }
34
+ end
35
+
36
+ end
37
+ end
38
+ end