sorcery 0.8.2 → 0.8.6

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 (341) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +55 -0
  3. data/.travis.yml +69 -1
  4. data/CHANGELOG.md +248 -0
  5. data/Gemfile +16 -22
  6. data/Gemfile.rails4 +22 -0
  7. data/README.md +320 -0
  8. data/Rakefile +3 -79
  9. data/VERSION +1 -1
  10. data/gemfiles/active_record-rails41.gemfile +6 -0
  11. data/gemfiles/mongo_mapper-rails41.gemfile +8 -0
  12. data/gemfiles/mongoid-rails41.gemfile +11 -0
  13. data/lib/generators/sorcery/helpers.rb +40 -0
  14. data/lib/generators/sorcery/install_generator.rb +21 -17
  15. data/lib/generators/sorcery/templates/initializer.rb +1 -1
  16. data/lib/generators/sorcery/templates/migration/activity_logging.rb +2 -11
  17. data/lib/generators/sorcery/templates/migration/brute_force_protection.rb +1 -7
  18. data/lib/generators/sorcery/templates/migration/core.rb +5 -8
  19. data/lib/generators/sorcery/templates/migration/external.rb +1 -5
  20. data/lib/generators/sorcery/templates/migration/remember_me.rb +2 -9
  21. data/lib/generators/sorcery/templates/migration/reset_password.rb +2 -10
  22. data/lib/generators/sorcery/templates/migration/user_activation.rb +2 -10
  23. data/lib/sorcery/controller/submodules/external.rb +39 -20
  24. data/lib/sorcery/controller/submodules/remember_me.rb +1 -1
  25. data/lib/sorcery/controller/submodules/session_timeout.rb +2 -2
  26. data/lib/sorcery/controller.rb +18 -11
  27. data/lib/sorcery/model/adapters/active_record.rb +7 -2
  28. data/lib/sorcery/model/adapters/datamapper.rb +123 -0
  29. data/lib/sorcery/model/adapters/mongo_mapper.rb +8 -4
  30. data/lib/sorcery/model/adapters/mongoid.rb +8 -8
  31. data/lib/sorcery/model/submodules/activity_logging.rb +24 -0
  32. data/lib/sorcery/model/submodules/brute_force_protection.rb +22 -8
  33. data/lib/sorcery/model/submodules/remember_me.rb +19 -4
  34. data/lib/sorcery/model/submodules/reset_password.rb +35 -14
  35. data/lib/sorcery/model/submodules/user_activation.rb +69 -24
  36. data/lib/sorcery/model.rb +111 -73
  37. data/lib/sorcery/protocols/oauth.rb +42 -0
  38. data/lib/sorcery/protocols/oauth2.rb +47 -0
  39. data/lib/sorcery/providers/base.rb +27 -0
  40. data/lib/sorcery/providers/facebook.rb +63 -0
  41. data/lib/sorcery/providers/github.rb +51 -0
  42. data/lib/sorcery/providers/google.rb +51 -0
  43. data/lib/sorcery/providers/linkedin.rb +66 -0
  44. data/lib/sorcery/providers/liveid.rb +53 -0
  45. data/lib/sorcery/providers/twitter.rb +59 -0
  46. data/lib/sorcery/providers/vk.rb +61 -0
  47. data/lib/sorcery/providers/xing.rb +64 -0
  48. data/lib/sorcery/test_helpers/internal/rails.rb +17 -6
  49. data/lib/sorcery/test_helpers/internal.rb +23 -6
  50. data/lib/sorcery/test_helpers/rails/controller.rb +17 -0
  51. data/lib/sorcery/test_helpers/rails/integration.rb +26 -0
  52. data/lib/sorcery/test_helpers/rails.rb +1 -10
  53. data/lib/sorcery.rb +20 -28
  54. data/sorcery.gemspec +21 -363
  55. data/spec/active_record/controller_activity_logging_spec.rb +29 -0
  56. data/spec/active_record/controller_brute_force_protection_spec.rb +158 -0
  57. data/spec/active_record/controller_http_basic_auth_spec.rb +65 -0
  58. data/spec/active_record/controller_oauth2_spec.rb +342 -0
  59. data/spec/{rails3/spec → active_record}/controller_oauth_spec.rb +69 -59
  60. data/spec/active_record/controller_remember_me_spec.rb +97 -0
  61. data/spec/active_record/controller_session_timeout_spec.rb +70 -0
  62. data/spec/active_record/controller_spec.rb +8 -0
  63. data/spec/{rails3/spec → active_record}/integration_spec.rb +3 -3
  64. data/spec/active_record/user_activation_spec.rb +18 -0
  65. data/spec/active_record/user_activity_logging_spec.rb +8 -0
  66. data/spec/{rails3/spec → active_record}/user_brute_force_protection_spec.rb +6 -5
  67. data/spec/{rails3/spec → active_record}/user_oauth_spec.rb +6 -5
  68. data/spec/{rails3/spec → active_record}/user_remember_me_spec.rb +5 -4
  69. data/spec/{rails3/spec → active_record}/user_reset_password_spec.rb +7 -7
  70. data/spec/active_record/user_spec.rb +37 -0
  71. data/spec/datamapper/controller_activity_logging_spec.rb +17 -0
  72. data/spec/datamapper/controller_spec.rb +8 -0
  73. data/spec/datamapper/user_activation_spec.rb +10 -0
  74. data/spec/datamapper/user_activity_logging_spec.rb +9 -0
  75. data/spec/datamapper/user_brute_force_protection_spec.rb +9 -0
  76. data/spec/datamapper/user_oauth_spec.rb +9 -0
  77. data/spec/datamapper/user_remember_me_spec.rb +8 -0
  78. data/spec/datamapper/user_reset_password_spec.rb +8 -0
  79. data/spec/datamapper/user_spec.rb +27 -0
  80. data/spec/mongo_mapper/controller_spec.rb +8 -0
  81. data/spec/mongo_mapper/user_activation_spec.rb +9 -0
  82. data/spec/mongo_mapper/user_activity_logging_spec.rb +8 -0
  83. data/spec/mongo_mapper/user_brute_force_protection_spec.rb +8 -0
  84. data/spec/mongo_mapper/user_oauth_spec.rb +8 -0
  85. data/spec/mongo_mapper/user_remember_me_spec.rb +8 -0
  86. data/spec/mongo_mapper/user_reset_password_spec.rb +8 -0
  87. data/spec/mongo_mapper/user_spec.rb +37 -0
  88. data/spec/mongoid/controller_activity_logging_spec.rb +16 -0
  89. data/spec/mongoid/controller_spec.rb +8 -0
  90. data/spec/mongoid/user_activation_spec.rb +9 -0
  91. data/spec/mongoid/user_activity_logging_spec.rb +8 -0
  92. data/spec/mongoid/user_brute_force_protection_spec.rb +8 -0
  93. data/spec/mongoid/user_oauth_spec.rb +8 -0
  94. data/spec/mongoid/user_remember_me_spec.rb +8 -0
  95. data/spec/mongoid/user_reset_password_spec.rb +8 -0
  96. data/spec/mongoid/user_spec.rb +38 -0
  97. data/spec/orm/active_record.rb +9 -0
  98. data/spec/orm/datamapper.rb +34 -0
  99. data/spec/orm/mongo_mapper.rb +11 -0
  100. data/spec/orm/mongoid.rb +18 -0
  101. data/spec/{rails3/app/models → rails_app/app/active_record}/user.rb +1 -2
  102. data/spec/rails_app/app/active_record/user_provider.rb +3 -0
  103. data/spec/rails_app/app/controllers/sorcery_controller.rb +224 -0
  104. data/spec/rails_app/app/datamapper/authentication.rb +8 -0
  105. data/spec/rails_app/app/datamapper/user.rb +7 -0
  106. data/spec/{rails3_mongoid/app/models → rails_app/app/mongoid}/user.rb +2 -0
  107. data/spec/{rails3_mongo_mapper → rails_app}/config/application.rb +13 -8
  108. data/spec/rails_app/config/boot.rb +4 -0
  109. data/spec/rails_app/config/database.yml +22 -0
  110. data/spec/{rails3_mongo_mapper → rails_app}/config/environments/test.rb +2 -0
  111. data/spec/{rails3_mongoid → rails_app}/config/initializers/session_store.rb +4 -0
  112. data/spec/rails_app/config/routes.rb +42 -0
  113. data/spec/{rails3_mongo_mapper → rails_app}/config.ru +1 -1
  114. data/spec/{rails3 → rails_app}/db/migrate/activation/20101224223622_add_activation_to_users.rb +3 -3
  115. data/spec/rails_app/db/migrate/external/20101224223628_create_authentications_and_user_providers.rb +22 -0
  116. data/spec/rails_app/log/development.log +1791 -0
  117. data/spec/shared_examples/controller_activity_logging_shared_examples.rb +125 -0
  118. data/spec/shared_examples/controller_oauth2_shared_examples.rb +32 -36
  119. data/spec/shared_examples/controller_oauth_shared_examples.rb +35 -28
  120. data/spec/shared_examples/controller_shared_examples.rb +203 -0
  121. data/spec/shared_examples/user_activation_shared_examples.rb +136 -97
  122. data/spec/shared_examples/user_activity_logging_shared_examples.rb +10 -10
  123. data/spec/shared_examples/user_brute_force_protection_shared_examples.rb +14 -13
  124. data/spec/shared_examples/user_oauth_shared_examples.rb +23 -15
  125. data/spec/shared_examples/user_remember_me_shared_examples.rb +32 -23
  126. data/spec/shared_examples/user_reset_password_shared_examples.rb +162 -129
  127. data/spec/shared_examples/user_shared_examples.rb +265 -190
  128. data/spec/sorcery_crypto_providers_spec.rb +74 -72
  129. data/spec/spec_helper.rb +47 -4
  130. metadata +277 -501
  131. data/Gemfile.lock +0 -175
  132. data/README.rdoc +0 -261
  133. data/lib/sorcery/controller/submodules/external/protocols/oauth1.rb +0 -46
  134. data/lib/sorcery/controller/submodules/external/protocols/oauth2.rb +0 -49
  135. data/lib/sorcery/controller/submodules/external/providers/base.rb +0 -21
  136. data/lib/sorcery/controller/submodules/external/providers/facebook.rb +0 -98
  137. data/lib/sorcery/controller/submodules/external/providers/github.rb +0 -92
  138. data/lib/sorcery/controller/submodules/external/providers/google.rb +0 -91
  139. data/lib/sorcery/controller/submodules/external/providers/linkedin.rb +0 -102
  140. data/lib/sorcery/controller/submodules/external/providers/liveid.rb +0 -92
  141. data/lib/sorcery/controller/submodules/external/providers/twitter.rb +0 -93
  142. data/lib/sorcery/controller/submodules/external/providers/vk.rb +0 -100
  143. data/lib/sorcery/controller/submodules/external/providers/xing.rb +0 -97
  144. data/lib/sorcery/test_helpers.rb +0 -5
  145. data/spec/Gemfile +0 -12
  146. data/spec/Gemfile.lock +0 -129
  147. data/spec/README.md +0 -31
  148. data/spec/Rakefile +0 -12
  149. data/spec/rails3/.gitignore +0 -4
  150. data/spec/rails3/.rspec +0 -1
  151. data/spec/rails3/Gemfile +0 -15
  152. data/spec/rails3/Gemfile.lock +0 -162
  153. data/spec/rails3/README +0 -256
  154. data/spec/rails3/Rakefile +0 -11
  155. data/spec/rails3/app/controllers/application_controller.rb +0 -208
  156. data/spec/rails3/config/application.rb +0 -46
  157. data/spec/rails3/config/boot.rb +0 -13
  158. data/spec/rails3/config/database.yml +0 -27
  159. data/spec/rails3/config/environments/development.rb +0 -26
  160. data/spec/rails3/config/environments/in_memory.rb +0 -35
  161. data/spec/rails3/config/environments/production.rb +0 -49
  162. data/spec/rails3/config/environments/test.rb +0 -35
  163. data/spec/rails3/config/initializers/session_store.rb +0 -8
  164. data/spec/rails3/config/routes.rb +0 -59
  165. data/spec/rails3/config.ru +0 -4
  166. data/spec/rails3/db/migrate/external/20101224223628_create_authentications.rb +0 -14
  167. data/spec/rails3/public/stylesheets/.gitkeep +0 -0
  168. data/spec/rails3/script/rails +0 -6
  169. data/spec/rails3/spec/controller_activity_logging_spec.rb +0 -130
  170. data/spec/rails3/spec/controller_brute_force_protection_spec.rb +0 -96
  171. data/spec/rails3/spec/controller_http_basic_auth_spec.rb +0 -50
  172. data/spec/rails3/spec/controller_oauth2_spec.rb +0 -380
  173. data/spec/rails3/spec/controller_remember_me_spec.rb +0 -96
  174. data/spec/rails3/spec/controller_session_timeout_spec.rb +0 -55
  175. data/spec/rails3/spec/controller_spec.rb +0 -182
  176. data/spec/rails3/spec/spec.opts +0 -2
  177. data/spec/rails3/spec/spec_helper.orig.rb +0 -27
  178. data/spec/rails3/spec/spec_helper.rb +0 -71
  179. data/spec/rails3/spec/user_activation_spec.rb +0 -16
  180. data/spec/rails3/spec/user_activity_logging_spec.rb +0 -8
  181. data/spec/rails3/spec/user_spec.rb +0 -36
  182. data/spec/rails3/vendor/plugins/.gitkeep +0 -0
  183. data/spec/rails3_mongo_mapper/.gitignore +0 -4
  184. data/spec/rails3_mongo_mapper/.rspec +0 -1
  185. data/spec/rails3_mongo_mapper/Gemfile +0 -16
  186. data/spec/rails3_mongo_mapper/Gemfile.lock +0 -156
  187. data/spec/rails3_mongo_mapper/Rakefile +0 -11
  188. data/spec/rails3_mongo_mapper/app/controllers/application_controller.rb +0 -122
  189. data/spec/rails3_mongo_mapper/app/helpers/application_helper.rb +0 -2
  190. data/spec/rails3_mongo_mapper/app/mailers/sorcery_mailer.rb +0 -25
  191. data/spec/rails3_mongo_mapper/app/views/layouts/application.html.erb +0 -14
  192. data/spec/rails3_mongo_mapper/app/views/sorcery_mailer/activation_email.html.erb +0 -17
  193. data/spec/rails3_mongo_mapper/app/views/sorcery_mailer/activation_email.text.erb +0 -9
  194. data/spec/rails3_mongo_mapper/app/views/sorcery_mailer/activation_success_email.text.erb +0 -9
  195. data/spec/rails3_mongo_mapper/app/views/sorcery_mailer/reset_password_email.html.erb +0 -16
  196. data/spec/rails3_mongo_mapper/app/views/sorcery_mailer/reset_password_email.text.erb +0 -8
  197. data/spec/rails3_mongo_mapper/config/boot.rb +0 -13
  198. data/spec/rails3_mongo_mapper/config/environment.rb +0 -5
  199. data/spec/rails3_mongo_mapper/config/environments/development.rb +0 -30
  200. data/spec/rails3_mongo_mapper/config/environments/in_memory.rb +0 -0
  201. data/spec/rails3_mongo_mapper/config/environments/production.rb +0 -49
  202. data/spec/rails3_mongo_mapper/config/initializers/backtrace_silencers.rb +0 -7
  203. data/spec/rails3_mongo_mapper/config/initializers/inflections.rb +0 -10
  204. data/spec/rails3_mongo_mapper/config/initializers/mime_types.rb +0 -5
  205. data/spec/rails3_mongo_mapper/config/initializers/mongo.rb +0 -2
  206. data/spec/rails3_mongo_mapper/config/initializers/secret_token.rb +0 -7
  207. data/spec/rails3_mongo_mapper/config/initializers/session_store.rb +0 -8
  208. data/spec/rails3_mongo_mapper/config/locales/en.yml +0 -5
  209. data/spec/rails3_mongo_mapper/config/routes.rb +0 -59
  210. data/spec/rails3_mongo_mapper/db/schema.rb +0 -23
  211. data/spec/rails3_mongo_mapper/db/seeds.rb +0 -7
  212. data/spec/rails3_mongo_mapper/lib/tasks/.gitkeep +0 -0
  213. data/spec/rails3_mongo_mapper/public/404.html +0 -26
  214. data/spec/rails3_mongo_mapper/public/422.html +0 -26
  215. data/spec/rails3_mongo_mapper/public/500.html +0 -26
  216. data/spec/rails3_mongo_mapper/public/favicon.ico +0 -0
  217. data/spec/rails3_mongo_mapper/public/images/rails.png +0 -0
  218. data/spec/rails3_mongo_mapper/public/javascripts/application.js +0 -2
  219. data/spec/rails3_mongo_mapper/public/javascripts/controls.js +0 -965
  220. data/spec/rails3_mongo_mapper/public/javascripts/dragdrop.js +0 -974
  221. data/spec/rails3_mongo_mapper/public/javascripts/effects.js +0 -1123
  222. data/spec/rails3_mongo_mapper/public/javascripts/prototype.js +0 -6001
  223. data/spec/rails3_mongo_mapper/public/javascripts/rails.js +0 -175
  224. data/spec/rails3_mongo_mapper/public/robots.txt +0 -5
  225. data/spec/rails3_mongo_mapper/public/stylesheets/.gitkeep +0 -0
  226. data/spec/rails3_mongo_mapper/script/rails +0 -6
  227. data/spec/rails3_mongo_mapper/spec/controller_spec.rb +0 -175
  228. data/spec/rails3_mongo_mapper/spec/spec.opts +0 -2
  229. data/spec/rails3_mongo_mapper/spec/spec_helper.orig.rb +0 -27
  230. data/spec/rails3_mongo_mapper/spec/spec_helper.rb +0 -55
  231. data/spec/rails3_mongo_mapper/spec/user_activation_spec.rb +0 -9
  232. data/spec/rails3_mongo_mapper/spec/user_activity_logging_spec.rb +0 -8
  233. data/spec/rails3_mongo_mapper/spec/user_brute_force_protection_spec.rb +0 -8
  234. data/spec/rails3_mongo_mapper/spec/user_oauth_spec.rb +0 -8
  235. data/spec/rails3_mongo_mapper/spec/user_remember_me_spec.rb +0 -8
  236. data/spec/rails3_mongo_mapper/spec/user_reset_password_spec.rb +0 -8
  237. data/spec/rails3_mongo_mapper/spec/user_spec.rb +0 -37
  238. data/spec/rails3_mongo_mapper/vendor/plugins/.gitkeep +0 -0
  239. data/spec/rails3_mongoid/.gitignore +0 -4
  240. data/spec/rails3_mongoid/.rspec +0 -1
  241. data/spec/rails3_mongoid/Gemfile +0 -15
  242. data/spec/rails3_mongoid/Gemfile.lock +0 -146
  243. data/spec/rails3_mongoid/Rakefile +0 -11
  244. data/spec/rails3_mongoid/app/controllers/application_controller.rb +0 -127
  245. data/spec/rails3_mongoid/app/helpers/application_helper.rb +0 -2
  246. data/spec/rails3_mongoid/app/mailers/sorcery_mailer.rb +0 -25
  247. data/spec/rails3_mongoid/app/views/layouts/application.html.erb +0 -14
  248. data/spec/rails3_mongoid/app/views/sorcery_mailer/activation_email.html.erb +0 -17
  249. data/spec/rails3_mongoid/app/views/sorcery_mailer/activation_email.text.erb +0 -9
  250. data/spec/rails3_mongoid/app/views/sorcery_mailer/activation_success_email.html.erb +0 -17
  251. data/spec/rails3_mongoid/app/views/sorcery_mailer/activation_success_email.text.erb +0 -9
  252. data/spec/rails3_mongoid/app/views/sorcery_mailer/reset_password_email.html.erb +0 -16
  253. data/spec/rails3_mongoid/app/views/sorcery_mailer/reset_password_email.text.erb +0 -8
  254. data/spec/rails3_mongoid/config/application.rb +0 -51
  255. data/spec/rails3_mongoid/config/boot.rb +0 -13
  256. data/spec/rails3_mongoid/config/environment.rb +0 -5
  257. data/spec/rails3_mongoid/config/environments/development.rb +0 -26
  258. data/spec/rails3_mongoid/config/environments/in_memory.rb +0 -0
  259. data/spec/rails3_mongoid/config/environments/production.rb +0 -49
  260. data/spec/rails3_mongoid/config/environments/test.rb +0 -35
  261. data/spec/rails3_mongoid/config/initializers/backtrace_silencers.rb +0 -7
  262. data/spec/rails3_mongoid/config/initializers/inflections.rb +0 -10
  263. data/spec/rails3_mongoid/config/initializers/mime_types.rb +0 -5
  264. data/spec/rails3_mongoid/config/initializers/secret_token.rb +0 -7
  265. data/spec/rails3_mongoid/config/locales/en.yml +0 -5
  266. data/spec/rails3_mongoid/config/mongoid.yml +0 -7
  267. data/spec/rails3_mongoid/config/routes.rb +0 -59
  268. data/spec/rails3_mongoid/config.ru +0 -4
  269. data/spec/rails3_mongoid/db/schema.rb +0 -23
  270. data/spec/rails3_mongoid/db/seeds.rb +0 -7
  271. data/spec/rails3_mongoid/lib/tasks/.gitkeep +0 -0
  272. data/spec/rails3_mongoid/public/404.html +0 -26
  273. data/spec/rails3_mongoid/public/422.html +0 -26
  274. data/spec/rails3_mongoid/public/500.html +0 -26
  275. data/spec/rails3_mongoid/public/favicon.ico +0 -0
  276. data/spec/rails3_mongoid/public/images/rails.png +0 -0
  277. data/spec/rails3_mongoid/public/javascripts/application.js +0 -2
  278. data/spec/rails3_mongoid/public/javascripts/controls.js +0 -965
  279. data/spec/rails3_mongoid/public/javascripts/dragdrop.js +0 -974
  280. data/spec/rails3_mongoid/public/javascripts/effects.js +0 -1123
  281. data/spec/rails3_mongoid/public/javascripts/prototype.js +0 -6001
  282. data/spec/rails3_mongoid/public/javascripts/rails.js +0 -175
  283. data/spec/rails3_mongoid/public/robots.txt +0 -5
  284. data/spec/rails3_mongoid/public/stylesheets/.gitkeep +0 -0
  285. data/spec/rails3_mongoid/script/rails +0 -6
  286. data/spec/rails3_mongoid/spec/controller_activity_logging_spec.rb +0 -111
  287. data/spec/rails3_mongoid/spec/controller_spec.rb +0 -186
  288. data/spec/rails3_mongoid/spec/spec.opts +0 -2
  289. data/spec/rails3_mongoid/spec/spec_helper.orig.rb +0 -27
  290. data/spec/rails3_mongoid/spec/spec_helper.rb +0 -55
  291. data/spec/rails3_mongoid/spec/user_activation_spec.rb +0 -9
  292. data/spec/rails3_mongoid/spec/user_activity_logging_spec.rb +0 -8
  293. data/spec/rails3_mongoid/spec/user_brute_force_protection_spec.rb +0 -8
  294. data/spec/rails3_mongoid/spec/user_oauth_spec.rb +0 -8
  295. data/spec/rails3_mongoid/spec/user_remember_me_spec.rb +0 -8
  296. data/spec/rails3_mongoid/spec/user_reset_password_spec.rb +0 -8
  297. data/spec/rails3_mongoid/spec/user_spec.rb +0 -38
  298. data/spec/rails3_mongoid/vendor/plugins/.gitkeep +0 -0
  299. /data/lib/sorcery/{controller/submodules/external/protocols → protocols}/certs/ca-bundle.crt +0 -0
  300. /data/spec/{rails3/app/models → rails_app/app/active_record}/authentication.rb +0 -0
  301. /data/spec/{rails3 → rails_app}/app/helpers/application_helper.rb +0 -0
  302. /data/spec/{rails3 → rails_app}/app/mailers/sorcery_mailer.rb +0 -0
  303. /data/spec/{rails3_mongo_mapper/app/models → rails_app/app/mongo_mapper}/authentication.rb +0 -0
  304. /data/spec/{rails3_mongo_mapper/app/models → rails_app/app/mongo_mapper}/user.rb +0 -0
  305. /data/spec/{rails3_mongoid/app/models → rails_app/app/mongoid}/authentication.rb +0 -0
  306. /data/spec/{rails3 → rails_app}/app/views/application/index.html.erb +0 -0
  307. /data/spec/{rails3 → rails_app}/app/views/layouts/application.html.erb +0 -0
  308. /data/spec/{rails3 → rails_app}/app/views/sorcery_mailer/activation_email.html.erb +0 -0
  309. /data/spec/{rails3 → rails_app}/app/views/sorcery_mailer/activation_email.text.erb +0 -0
  310. /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
  311. /data/spec/{rails3_mongo_mapper → rails_app}/app/views/sorcery_mailer/activation_success_email.html.erb +0 -0
  312. /data/spec/{rails3 → rails_app}/app/views/sorcery_mailer/activation_success_email.text.erb +0 -0
  313. /data/spec/{rails3 → rails_app}/app/views/sorcery_mailer/reset_password_email.html.erb +0 -0
  314. /data/spec/{rails3 → rails_app}/app/views/sorcery_mailer/reset_password_email.text.erb +0 -0
  315. /data/spec/{rails3 → rails_app}/app/views/sorcery_mailer/send_unlock_token_email.text.erb +0 -0
  316. /data/spec/{rails3 → rails_app}/config/environment.rb +0 -0
  317. /data/spec/{rails3 → rails_app}/config/initializers/backtrace_silencers.rb +0 -0
  318. /data/spec/{rails3 → rails_app}/config/initializers/inflections.rb +0 -0
  319. /data/spec/{rails3 → rails_app}/config/initializers/mime_types.rb +0 -0
  320. /data/spec/{rails3 → rails_app}/config/initializers/secret_token.rb +0 -0
  321. /data/spec/{rails3 → rails_app}/config/locales/en.yml +0 -0
  322. /data/spec/{rails3 → rails_app}/db/migrate/activity_logging/20101224223624_add_activity_logging_to_users.rb +0 -0
  323. /data/spec/{rails3 → rails_app}/db/migrate/brute_force_protection/20101224223626_add_brute_force_protection_to_users.rb +0 -0
  324. /data/spec/{rails3 → rails_app}/db/migrate/core/20101224223620_create_users.rb +0 -0
  325. /data/spec/{rails3 → rails_app}/db/migrate/remember_me/20101224223623_add_remember_me_token_to_users.rb +0 -0
  326. /data/spec/{rails3 → rails_app}/db/migrate/reset_password/20101224223622_add_reset_password_to_users.rb +0 -0
  327. /data/spec/{rails3 → rails_app}/db/schema.rb +0 -0
  328. /data/spec/{rails3 → rails_app}/db/seeds.rb +0 -0
  329. /data/spec/{rails3 → rails_app}/public/404.html +0 -0
  330. /data/spec/{rails3 → rails_app}/public/422.html +0 -0
  331. /data/spec/{rails3 → rails_app}/public/500.html +0 -0
  332. /data/spec/{rails3 → rails_app}/public/favicon.ico +0 -0
  333. /data/spec/{rails3 → rails_app}/public/images/rails.png +0 -0
  334. /data/spec/{rails3 → rails_app}/public/javascripts/application.js +0 -0
  335. /data/spec/{rails3 → rails_app}/public/javascripts/controls.js +0 -0
  336. /data/spec/{rails3 → rails_app}/public/javascripts/dragdrop.js +0 -0
  337. /data/spec/{rails3 → rails_app}/public/javascripts/effects.js +0 -0
  338. /data/spec/{rails3 → rails_app}/public/javascripts/prototype.js +0 -0
  339. /data/spec/{rails3 → rails_app}/public/javascripts/rails.js +0 -0
  340. /data/spec/{rails3 → rails_app}/public/robots.txt +0 -0
  341. /data/spec/{rails3/lib/tasks → rails_app/public/stylesheets}/.gitkeep +0 -0
@@ -0,0 +1,158 @@
1
+ require 'spec_helper'
2
+
3
+ describe SorceryController, :active_record => true do
4
+
5
+ let(:db_user) { User.find_by_email 'bla@bla.com' }
6
+ let!(:user) { create_new_user }
7
+
8
+ def request_test_login
9
+ get :test_login, :email => 'bla@bla.com', :password => 'blabla'
10
+ end
11
+
12
+ before(:all) do
13
+ ActiveRecord::Migrator.migrate("#{Rails.root}/db/migrate/brute_force_protection")
14
+ User.reset_column_information
15
+ end
16
+
17
+ after(:all) do
18
+ ActiveRecord::Migrator.rollback("#{Rails.root}/db/migrate/brute_force_protection")
19
+ end
20
+
21
+ # ----------------- SESSION TIMEOUT -----------------------
22
+ describe "brute force protection features" do
23
+
24
+ before(:all) do
25
+ sorcery_reload!([:brute_force_protection])
26
+ end
27
+
28
+
29
+ after(:each) do
30
+ Sorcery::Controller::Config.reset!
31
+ sorcery_controller_property_set(:user_class, User)
32
+ Timecop.return
33
+ end
34
+
35
+ it "counts login retries" do
36
+ 3.times { request_test_login }
37
+ expect(db_user.failed_logins_count).to eq 3
38
+ end
39
+
40
+ it "generates unlock token before mail is sent" do
41
+ sorcery_model_property_set(:consecutive_login_retries_amount_limit, 2)
42
+ sorcery_model_property_set(:login_lock_time_period, 0)
43
+ sorcery_model_property_set(:unlock_token_mailer, SorceryMailer)
44
+ 3.times { request_test_login }
45
+ expect(ActionMailer::Base.deliveries.last.body.to_s.match(db_user.unlock_token)).not_to be_nil
46
+ end
47
+
48
+ it "unlocks after entering unlock token" do
49
+ sorcery_model_property_set(:consecutive_login_retries_amount_limit, 2)
50
+ sorcery_model_property_set(:login_lock_time_period, 0)
51
+ sorcery_model_property_set(:unlock_token_mailer, SorceryMailer)
52
+ 3.times { request_test_login }
53
+
54
+ expect(db_user.unlock_token).not_to be_nil
55
+
56
+ token = db_user.unlock_token
57
+ user = User.load_from_unlock_token(token)
58
+
59
+ expect(user).not_to be_nil
60
+
61
+ user.unlock!
62
+ expect(User.load_from_unlock_token(db_user.unlock_token)).to be_nil
63
+ end
64
+
65
+ it "resets the counter on a good login" do
66
+ # dirty hack for rails 4
67
+ allow(@controller).to receive(:register_last_activity_time_to_db)
68
+
69
+ sorcery_model_property_set(:consecutive_login_retries_amount_limit, 5)
70
+ 3.times { request_test_login }
71
+ get :test_login, :email => 'bla@bla.com', :password => 'secret'
72
+
73
+ expect(db_user.failed_logins_count).to eq 0
74
+ end
75
+
76
+ it "locks user when number of retries reached the limit" do
77
+ expect(db_user.lock_expires_at).to be_nil
78
+
79
+ sorcery_model_property_set(:consecutive_login_retries_amount_limit, 1)
80
+ request_test_login
81
+
82
+ expect(db_user.reload.lock_expires_at).not_to be_nil
83
+ end
84
+
85
+ it "unlocks after lock time period passes" do
86
+ sorcery_model_property_set(:consecutive_login_retries_amount_limit, 2)
87
+ sorcery_model_property_set(:login_lock_time_period, 0.2)
88
+ 2.times { request_test_login }
89
+
90
+ expect(db_user.reload.lock_expires_at).not_to be_nil
91
+
92
+ Timecop.travel(Time.now.in_time_zone + 0.3)
93
+ request_test_login
94
+
95
+ expect(db_user.reload.lock_expires_at).to be_nil
96
+ end
97
+
98
+ it "doest not unlock if time period is 0 (permanent lock)" do
99
+ sorcery_model_property_set(:consecutive_login_retries_amount_limit, 2)
100
+ sorcery_model_property_set(:login_lock_time_period, 0)
101
+ 2.times { request_test_login }
102
+ unlock_date = db_user.lock_expires_at
103
+ Timecop.travel(Time.now.in_time_zone + 1)
104
+ request_test_login
105
+
106
+ expect(db_user.lock_expires_at.to_s).to eq unlock_date.to_s
107
+ end
108
+
109
+ context "unlock_token_mailer_disabled is true" do
110
+
111
+ before(:each) do
112
+ sorcery_model_property_set(:unlock_token_mailer_disabled, true)
113
+ sorcery_model_property_set(:consecutive_login_retries_amount_limit, 2)
114
+ sorcery_model_property_set(:login_lock_time_period, 0)
115
+ sorcery_model_property_set(:unlock_token_mailer, SorceryMailer)
116
+ end
117
+
118
+ it "generates unlock token after user locked" do
119
+ 3.times { request_test_login }
120
+
121
+ expect(db_user.unlock_token).not_to be_nil
122
+ end
123
+
124
+ it "doest *not* automatically send unlock mail" do
125
+ old_size = ActionMailer::Base.deliveries.size
126
+ 3.times { request_test_login }
127
+
128
+ expect(ActionMailer::Base.deliveries.size).to eq old_size
129
+ end
130
+
131
+ end
132
+
133
+ context "unlock_token_mailer_disabled is false" do
134
+
135
+ before(:each) do
136
+ sorcery_model_property_set(:unlock_token_mailer_disabled, false)
137
+ sorcery_model_property_set(:consecutive_login_retries_amount_limit, 2)
138
+ sorcery_model_property_set(:login_lock_time_period, 0)
139
+ sorcery_model_property_set(:unlock_token_mailer, SorceryMailer)
140
+ end
141
+
142
+ it "sets the unlock token after user locked" do
143
+ 3.times { request_test_login }
144
+
145
+ expect(db_user.unlock_token).not_to be_nil
146
+ end
147
+
148
+ it "automatically sends unlock mail" do
149
+ old_size = ActionMailer::Base.deliveries.size
150
+ 3.times { request_test_login }
151
+
152
+ expect(ActionMailer::Base.deliveries.size).to eq old_size + 1
153
+ end
154
+
155
+ end
156
+
157
+ end
158
+ end
@@ -0,0 +1,65 @@
1
+ require 'spec_helper'
2
+
3
+ describe SorceryController, :active_record => true do
4
+
5
+ let!(:user) { create_new_user }
6
+
7
+ # ----------------- HTTP BASIC AUTH -----------------------
8
+ describe "with http basic auth features" do
9
+ before(:all) do
10
+ sorcery_reload!([:http_basic_auth])
11
+
12
+ sorcery_controller_property_set(:controller_to_realm_map, {"sorcery" => "sorcery"})
13
+ end
14
+
15
+ after(:each) do
16
+ logout_user
17
+ end
18
+
19
+ it "requests basic authentication when before_filter is used" do
20
+ get :test_http_basic_auth
21
+
22
+ expect(response.code).to eq "401"
23
+ end
24
+
25
+ it "authenticates from http basic if credentials are sent" do
26
+ # dirty hack for rails 4
27
+ allow(subject).to receive(:register_last_activity_time_to_db)
28
+
29
+ @request.env["HTTP_AUTHORIZATION"] = "Basic " + Base64::encode64("#{user.email}:secret")
30
+ get :test_http_basic_auth, nil, :http_authentication_used => true
31
+
32
+ expect(response).to be_a_success
33
+ end
34
+
35
+ it "fails authentication if credentials are wrong" do
36
+ @request.env["HTTP_AUTHORIZATION"] = "Basic " + Base64::encode64("#{user.email}:wrong!")
37
+ get :test_http_basic_auth, nil, :http_authentication_used => true
38
+
39
+ expect(response).to redirect_to root_url
40
+ end
41
+
42
+ it "allows configuration option 'controller_to_realm_map'" do
43
+ sorcery_controller_property_set(:controller_to_realm_map, {"1" => "2"})
44
+
45
+ expect(Sorcery::Controller::Config.controller_to_realm_map).to eq({"1" => "2"})
46
+ end
47
+
48
+ it "displays the correct realm name configured for the controller" do
49
+ sorcery_controller_property_set(:controller_to_realm_map, {"sorcery" => "Salad"})
50
+ get :test_http_basic_auth
51
+
52
+ expect(response.headers["WWW-Authenticate"]).to eq "Basic realm=\"Salad\""
53
+ end
54
+
55
+ it "signs in the user's session on successful login" do
56
+ # dirty hack for rails 4
57
+ allow(controller).to receive(:register_last_activity_time_to_db)
58
+
59
+ @request.env["HTTP_AUTHORIZATION"] = "Basic " + Base64::encode64("#{user.email}:secret")
60
+ get :test_http_basic_auth, nil, :http_authentication_used => true
61
+
62
+ expect(session[:user_id]).to be User.find_by_email(user.email).id
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,342 @@
1
+ require 'spec_helper'
2
+
3
+ require 'shared_examples/controller_oauth2_shared_examples'
4
+
5
+ describe SorceryController, :active_record => true do
6
+ before(:all) do
7
+ ActiveRecord::Migrator.migrate("#{Rails.root}/db/migrate/external")
8
+ User.reset_column_information
9
+
10
+ sorcery_reload!([:external])
11
+ set_external_property
12
+ end
13
+
14
+ after(:all) do
15
+ ActiveRecord::Migrator.rollback("#{Rails.root}/db/migrate/external")
16
+ end
17
+
18
+ it_behaves_like "oauth2_controller"
19
+
20
+ # ----------------- OAuth -----------------------
21
+ context "with OAuth features" do
22
+
23
+ before(:each) do
24
+ stub_all_oauth2_requests!
25
+ end
26
+
27
+ after(:each) do
28
+ User.delete_all
29
+ Authentication.delete_all
30
+ end
31
+
32
+ context "when callback_url begin with /" do
33
+ before do
34
+ sorcery_controller_external_property_set(:facebook, :callback_url, "/oauth/twitter/callback")
35
+ end
36
+ it "login_at redirects correctly" do
37
+ create_new_user
38
+ get :login_at_test_facebook
39
+ expect(response).to be_a_redirect
40
+ expect(response).to redirect_to("https://graph.facebook.com/oauth/authorize?client_id=#{::Sorcery::Controller::Config.facebook.key}&display=page&redirect_uri=http%3A%2F%2Ftest.host%2Foauth%2Ftwitter%2Fcallback&response_type=code&scope=email%2Coffline_access&state=")
41
+ end
42
+ it "logins with state" do
43
+ create_new_user
44
+ get :login_at_test_with_state
45
+ expect(response).to be_a_redirect
46
+ expect(response).to redirect_to("https://graph.facebook.com/oauth/authorize?client_id=#{::Sorcery::Controller::Config.facebook.key}&display=page&redirect_uri=http%3A%2F%2Ftest.host%2Foauth%2Ftwitter%2Fcallback&response_type=code&scope=email%2Coffline_access&state=bla")
47
+ end
48
+ after do
49
+ sorcery_controller_external_property_set(:facebook, :callback_url, "http://blabla.com")
50
+ end
51
+ end
52
+
53
+ #this test can never pass because of the previous test (the callback url can't change anymore)
54
+ =begin
55
+ context "when callback_url begin with http://" do
56
+ it "login_at redirects correctly" do
57
+ create_new_user
58
+ get :login_at_test2
59
+ response.should be_a_redirect
60
+ response.should redirect_to("https://graph.facebook.com/oauth/authorize?response_type=code&client_id=#{::Sorcery::Controller::Config.facebook.key}&redirect_uri=http%3A%2F%2Fblabla.com&scope=email%2Coffline_access&display=page&state")
61
+ end
62
+ end
63
+ =end
64
+ it "'login_from' logins if user exists" do
65
+ # dirty hack for rails 4
66
+ allow(subject).to receive(:register_last_activity_time_to_db)
67
+
68
+ sorcery_model_property_set(:authentications_class, Authentication)
69
+ create_new_external_user(:facebook)
70
+ get :test_login_from_facebook
71
+
72
+ expect(flash[:notice]).to eq "Success!"
73
+ end
74
+
75
+ it "'login_from' fails if user doesn't exist" do
76
+ sorcery_model_property_set(:authentications_class, Authentication)
77
+ create_new_user
78
+ get :test_login_from_facebook
79
+
80
+ expect(flash[:alert]).to eq "Failed!"
81
+ end
82
+
83
+ it "on successful login_from the user is redirected to the url he originally wanted" do
84
+ # dirty hack for rails 4
85
+ allow(subject).to receive(:register_last_activity_time_to_db)
86
+
87
+ sorcery_model_property_set(:authentications_class, Authentication)
88
+ create_new_external_user(:facebook)
89
+ get :test_return_to_with_external_facebook, {}, :return_to_url => "fuu"
90
+
91
+ expect(response).to redirect_to("fuu")
92
+ expect(flash[:notice]).to eq "Success!"
93
+ end
94
+
95
+ [:github, :google, :liveid].each do |provider|
96
+
97
+ describe "with #{provider}" do
98
+
99
+ it "login_at redirects correctly" do
100
+ create_new_user
101
+ get :"login_at_test_#{provider}"
102
+
103
+ expect(response).to be_a_redirect
104
+ expect(response).to redirect_to(provider_url provider)
105
+ end
106
+
107
+ it "'login_from' logins if user exists" do
108
+ # dirty hack for rails 4
109
+ allow(subject).to receive(:register_last_activity_time_to_db)
110
+
111
+ sorcery_model_property_set(:authentications_class, Authentication)
112
+ create_new_external_user(provider)
113
+ get :"test_login_from_#{provider}"
114
+
115
+ expect(flash[:notice]).to eq "Success!"
116
+ end
117
+
118
+ it "'login_from' fails if user doesn't exist" do
119
+ sorcery_model_property_set(:authentications_class, Authentication)
120
+ create_new_user
121
+ get :"test_login_from_#{provider}"
122
+
123
+ expect(flash[:alert]).to eq "Failed!"
124
+ end
125
+
126
+ it "on successful login_from the user is redirected to the url he originally wanted (github)" do
127
+ # dirty hack for rails 4
128
+ allow(subject).to receive(:register_last_activity_time_to_db)
129
+
130
+ sorcery_model_property_set(:authentications_class, Authentication)
131
+ create_new_external_user(provider)
132
+ get :"test_return_to_with_external_#{provider}", {}, :return_to_url => "fuu"
133
+
134
+ expect(response).to redirect_to "fuu"
135
+ expect(flash[:notice]).to eq "Success!"
136
+ end
137
+ end
138
+ end
139
+
140
+ end
141
+
142
+ describe "OAuth with User Activation features" do
143
+ before(:all) do
144
+ ActiveRecord::Migrator.migrate("#{Rails.root}/db/migrate/activation")
145
+ sorcery_reload!([:user_activation,:external], :user_activation_mailer => ::SorceryMailer)
146
+ sorcery_controller_property_set(:external_providers, [:facebook, :github, :google, :liveid])
147
+ sorcery_controller_external_property_set(:facebook, :key, "eYVNBjBDi33aa9GkA3w")
148
+ sorcery_controller_external_property_set(:facebook, :secret, "XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8")
149
+ sorcery_controller_external_property_set(:facebook, :callback_url, "http://blabla.com")
150
+ sorcery_controller_external_property_set(:github, :key, "eYVNBjBDi33aa9GkA3w")
151
+ sorcery_controller_external_property_set(:github, :secret, "XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8")
152
+ sorcery_controller_external_property_set(:github, :callback_url, "http://blabla.com")
153
+ sorcery_controller_external_property_set(:google, :key, "eYVNBjBDi33aa9GkA3w")
154
+ sorcery_controller_external_property_set(:google, :secret, "XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8")
155
+ sorcery_controller_external_property_set(:google, :callback_url, "http://blabla.com")
156
+ sorcery_controller_external_property_set(:liveid, :key, "eYVNBjBDi33aa9GkA3w")
157
+ sorcery_controller_external_property_set(:liveid, :secret, "XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8")
158
+ sorcery_controller_external_property_set(:liveid, :callback_url, "http://blabla.com")
159
+
160
+ end
161
+
162
+ after(:all) do
163
+ ActiveRecord::Migrator.rollback("#{Rails.root}/db/migrate/activation")
164
+ end
165
+
166
+ after(:each) do
167
+ User.delete_all
168
+ end
169
+
170
+ it "does not send activation email to external users" do
171
+ old_size = ActionMailer::Base.deliveries.size
172
+ create_new_external_user(:facebook)
173
+
174
+ expect(ActionMailer::Base.deliveries.size).to eq old_size
175
+ end
176
+
177
+ it "does not send external users an activation success email" do
178
+ sorcery_model_property_set(:activation_success_email_method_name, nil)
179
+ create_new_external_user(:facebook)
180
+ old_size = ActionMailer::Base.deliveries.size
181
+ @user.activate!
182
+
183
+ expect(ActionMailer::Base.deliveries.size).to eq old_size
184
+ end
185
+
186
+ # provider: github
187
+ [:github, :google, :liveid].each do |provider|
188
+ it "does not send activation email to external users (github)" do
189
+ old_size = ActionMailer::Base.deliveries.size
190
+ create_new_external_user provider
191
+ expect(ActionMailer::Base.deliveries.size).to eq old_size
192
+ end
193
+
194
+ it "does not send external users an activation success email (github)" do
195
+ sorcery_model_property_set(:activation_success_email_method_name, nil)
196
+ create_new_external_user provider
197
+ old_size = ActionMailer::Base.deliveries.size
198
+ @user.activate!
199
+
200
+ expect(ActionMailer::Base.deliveries.size).to eq old_size
201
+ end
202
+ end
203
+ end
204
+
205
+ describe "OAuth with user activation features" do
206
+ before(:all) do
207
+ ActiveRecord::Migrator.migrate("#{Rails.root}/db/migrate/external")
208
+ ActiveRecord::Migrator.migrate("#{Rails.root}/db/migrate/activity_logging")
209
+ User.reset_column_information
210
+ sorcery_reload!([:activity_logging, :external])
211
+ end
212
+
213
+ after(:all) do
214
+ ActiveRecord::Migrator.rollback("#{Rails.root}/db/migrate/external")
215
+ ActiveRecord::Migrator.rollback("#{Rails.root}/db/migrate/activity_logging")
216
+ end
217
+
218
+ %w(facebook github google liveid).each do |provider|
219
+ context "when #{provider}" do
220
+ before(:each) do
221
+ User.delete_all
222
+ Authentication.delete_all
223
+ sorcery_controller_property_set(:register_login_time, true)
224
+ stub_all_oauth2_requests!
225
+ sorcery_model_property_set(:authentications_class, Authentication)
226
+ create_new_external_user(provider.to_sym)
227
+ end
228
+
229
+ it "registers login time" do
230
+ now = Time.now.in_time_zone
231
+ get "test_login_from_#{provider}".to_sym
232
+
233
+ expect(User.last.last_login_at).not_to be_nil
234
+ expect(User.last.last_login_at.to_s(:db)).to be >= now.to_s(:db)
235
+ expect(User.last.last_login_at.to_s(:db)).to be <= (now+2).to_s(:db)
236
+ end
237
+
238
+ it "does not register login time if configured so" do
239
+ sorcery_controller_property_set(:register_login_time, false)
240
+ now = Time.now.in_time_zone
241
+ get "test_login_from_#{provider}".to_sym
242
+
243
+ expect(User.last.last_login_at).to be_nil
244
+ end
245
+ end
246
+ end
247
+ end
248
+
249
+ describe "OAuth with session timeout features" do
250
+ before(:all) do
251
+ ActiveRecord::Migrator.migrate("#{Rails.root}/db/migrate/external")
252
+ User.reset_column_information
253
+ sorcery_reload!([:session_timeout, :external])
254
+ end
255
+
256
+ after(:all) do
257
+ ActiveRecord::Migrator.rollback("#{Rails.root}/db/migrate/external")
258
+ end
259
+
260
+ %w(facebook github google liveid).each do |provider|
261
+ context "when #{provider}" do
262
+ before(:each) do
263
+ User.delete_all
264
+ Authentication.delete_all
265
+ sorcery_model_property_set(:authentications_class, Authentication)
266
+ sorcery_controller_property_set(:session_timeout,0.5)
267
+ stub_all_oauth2_requests!
268
+ create_new_external_user(provider.to_sym)
269
+ end
270
+
271
+ after(:each) do
272
+ Timecop.return
273
+ end
274
+
275
+ it "does not reset session before session timeout" do
276
+ get "test_login_from_#{provider}".to_sym
277
+
278
+ expect(session[:user_id]).not_to be_nil
279
+ expect(flash[:notice]).to eq "Success!"
280
+ end
281
+
282
+ it "resets session after session timeout" do
283
+ get "test_login_from_#{provider}".to_sym
284
+ Timecop.travel(Time.now.in_time_zone+0.6)
285
+ get :test_should_be_logged_in
286
+
287
+ expect(session[:user_id]).to be_nil
288
+ expect(response).to be_a_redirect
289
+ end
290
+ end
291
+ end
292
+ end
293
+
294
+ def stub_all_oauth2_requests!
295
+ access_token = double(OAuth2::AccessToken)
296
+ allow(access_token).to receive(:token_param=)
297
+ response = double(OAuth2::Response)
298
+ allow(response).to receive(:body) { {
299
+ "id"=>"123",
300
+ "name"=>"Noam Ben Ari",
301
+ "first_name"=>"Noam",
302
+ "last_name"=>"Ben Ari",
303
+ "link"=>"http://www.facebook.com/nbenari1",
304
+ "hometown"=>{"id"=>"110619208966868", "name"=>"Haifa, Israel"},
305
+ "location"=>{"id"=>"106906559341067", "name"=>"Pardes Hanah, Hefa, Israel"},
306
+ "bio"=>"I'm a new daddy, and enjoying it!",
307
+ "gender"=>"male",
308
+ "email"=>"nbenari@gmail.com",
309
+ "timezone"=>2,
310
+ "locale"=>"en_US",
311
+ "languages"=>[{"id"=>"108405449189952", "name"=>"Hebrew"}, {"id"=>"106059522759137", "name"=>"English"}, {"id"=>"112624162082677", "name"=>"Russian"}],
312
+ "verified"=>true,
313
+ "updated_time"=>"2011-02-16T20:59:38+0000"}.to_json }
314
+ allow(access_token).to receive(:get) { response }
315
+ allow_any_instance_of(OAuth2::Strategy::AuthCode).to receive(:get_token) { access_token }
316
+ end
317
+
318
+ def set_external_property
319
+ sorcery_controller_property_set(:external_providers, [:facebook, :github, :google, :liveid])
320
+ sorcery_controller_external_property_set(:facebook, :key, "eYVNBjBDi33aa9GkA3w")
321
+ sorcery_controller_external_property_set(:facebook, :secret, "XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8")
322
+ sorcery_controller_external_property_set(:facebook, :callback_url, "http://blabla.com")
323
+ sorcery_controller_external_property_set(:github, :key, "eYVNBjBDi33aa9GkA3w")
324
+ sorcery_controller_external_property_set(:github, :secret, "XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8")
325
+ sorcery_controller_external_property_set(:github, :callback_url, "http://blabla.com")
326
+ sorcery_controller_external_property_set(:google, :key, "eYVNBjBDi33aa9GkA3w")
327
+ sorcery_controller_external_property_set(:google, :secret, "XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8")
328
+ sorcery_controller_external_property_set(:google, :callback_url, "http://blabla.com")
329
+ sorcery_controller_external_property_set(:liveid, :key, "eYVNBjBDi33aa9GkA3w")
330
+ sorcery_controller_external_property_set(:liveid, :secret, "XpbeSdCoaKSmQGSeokz5qcUATClRW5u08QWNfv71N8")
331
+ sorcery_controller_external_property_set(:liveid, :callback_url, "http://blabla.com")
332
+ end
333
+
334
+ def provider_url(provider)
335
+ {
336
+ github: "https://github.com/login/oauth/authorize?client_id=#{::Sorcery::Controller::Config.github.key}&display=&redirect_uri=http%3A%2F%2Fblabla.com&response_type=code&scope=&state=",
337
+ google: "https://accounts.google.com/o/oauth2/auth?client_id=#{::Sorcery::Controller::Config.google.key}&display=&redirect_uri=http%3A%2F%2Fblabla.com&response_type=code&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile&state=",
338
+ liveid: "https://oauth.live.com/authorize?client_id=#{::Sorcery::Controller::Config.liveid.key}&display=&redirect_uri=http%3A%2F%2Fblabla.com&response_type=code&scope=wl.basic+wl.emails+wl.offline_access&state="
339
+ }[provider]
340
+ end
341
+
342
+ end