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
@@ -27,6 +27,12 @@ Rails.application.config.sorcery.configure do |config|
27
27
  # config.cookie_domain =
28
28
 
29
29
 
30
+ # Allow the remember_me cookie to be set through AJAX
31
+ # Default: `true`
32
+ #
33
+ # config.remember_me_httponly =
34
+
35
+
30
36
  # -- session timeout --
31
37
  # How long in seconds to keep the session alive.
32
38
  # Default: `3600`
@@ -67,7 +73,7 @@ Rails.application.config.sorcery.configure do |config|
67
73
 
68
74
 
69
75
  # -- external --
70
- # What providers are supported by this app, i.e. [:twitter, :facebook, :github, :linkedin, :xing, :google, :liveid] .
76
+ # What providers are supported by this app, i.e. [:twitter, :facebook, :github, :linkedin, :xing, :google, :liveid, :salesforce] .
71
77
  # Default: `[]`
72
78
  #
73
79
  # config.external_providers =
@@ -101,7 +107,7 @@ Rails.application.config.sorcery.configure do |config|
101
107
  # config.xing.user_info_mapping = {first_name: "first_name", last_name: "last_name"}
102
108
  #
103
109
  #
104
- # Twitter wil not accept any requests nor redirect uri containing localhost,
110
+ # Twitter will not accept any requests nor redirect uri containing localhost,
105
111
  # make sure you use 0.0.0.0:3000 to access your app in development
106
112
  #
107
113
  # config.twitter.key = ""
@@ -114,6 +120,7 @@ Rails.application.config.sorcery.configure do |config|
114
120
  # config.facebook.callback_url = "http://0.0.0.0:3000/oauth/callback?provider=facebook"
115
121
  # config.facebook.user_info_mapping = {:email => "name"}
116
122
  # config.facebook.access_permissions = ["email", "publish_stream"]
123
+ # config.facebook.display = "page"
117
124
  #
118
125
  # config.github.key = ""
119
126
  # config.github.secret = ""
@@ -139,12 +146,35 @@ Rails.application.config.sorcery.configure do |config|
139
146
  # config.liveid.callback_url = "http://mydomain.com:3000/oauth/callback?provider=liveid"
140
147
  # config.liveid.user_info_mapping = {:username => "name"}
141
148
 
149
+ # For information about JIRA API:
150
+ # https://developer.atlassian.com/display/JIRADEV/JIRA+REST+API+Example+-+OAuth+authentication
151
+ # to obtain the consumer key and the public key you can use the jira-ruby gem https://github.com/sumoheavy/jira-ruby
152
+ # or run openssl req -x509 -nodes -newkey rsa:1024 -sha1 -keyout rsakey.pem -out rsacert.pem to obtain the public key
153
+ # Make sure you have configured the application link properly
154
+
155
+ # config.jira.key = "1234567"
156
+ # config.jira.secret = "jiraTest"
157
+ # config.jira.site = "http://localhost:2990/jira/plugins/servlet/oauth"
158
+ # config.jira.signature_method = "RSA-SHA1"
159
+ # config.jira.private_key_file = "rsakey.pem"
160
+
161
+ # For information about Salesforce API:
162
+ # https://developer.salesforce.com/signup &
163
+ # https://www.salesforce.com/us/developer/docs/api_rest/
164
+ # Salesforce callback_url must be https. You can run the following to generate self-signed ssl cert
165
+ # openssl req -new -newkey rsa:2048 -sha1 -days 365 -nodes -x509 -keyout server.key -out server.crt
166
+ # Make sure you have configured the application link properly
167
+ # config.salesforce.key = '123123'
168
+ # config.salesforce.secret = 'acb123'
169
+ # config.salesforce.callback_url = "https://127.0.0.1:9292/oauth/callback?provider=salesforce"
170
+ # config.salesforce.scope = "full"
171
+ # config.salesforce.user_info_mapping = {:email => "email"}
142
172
 
143
173
  # --- user config ---
144
174
  config.user_config do |user|
145
175
  # -- core --
146
176
  # specify username attributes, for example: [:username, :email].
147
- # Default: `[:username]`
177
+ # Default: `[:email]`
148
178
  #
149
179
  # user.username_attribute_names =
150
180
 
@@ -217,11 +247,6 @@ Rails.application.config.sorcery.configure do |config|
217
247
 
218
248
 
219
249
  # -- remember_me --
220
- # allow the remember_me cookie to settable through AJAX
221
- # Default: `true`
222
- #
223
- # user.remember_me_httponly =
224
-
225
250
  # How long in seconds the session length will be
226
251
  # Default: `604800`
227
252
  #
@@ -330,7 +355,7 @@ Rails.application.config.sorcery.configure do |config|
330
355
  # user.reset_password_expiration_period =
331
356
 
332
357
 
333
- # hammering protection, how long to wait before allowing another email to be sent.
358
+ # hammering protection, how long in seconds to wait before allowing another email to be sent.
334
359
  # Default: `5 * 60`
335
360
  #
336
361
  # user.reset_password_time_between_emails =
@@ -400,7 +425,7 @@ Rails.application.config.sorcery.configure do |config|
400
425
  # user.last_activity_at_attribute_name =
401
426
 
402
427
 
403
- # How long since last activity is he user defined logged out?
428
+ # How long since last activity is the user defined logged out?
404
429
  # Default: `10 * 60`
405
430
  #
406
431
  # user.activity_timeout =
@@ -1,19 +1,10 @@
1
1
  class SorceryActivityLogging < ActiveRecord::Migration
2
- def self.up
2
+ def change
3
3
  add_column :<%= model_class_name.tableize %>, :last_login_at, :datetime, :default => nil
4
4
  add_column :<%= model_class_name.tableize %>, :last_logout_at, :datetime, :default => nil
5
5
  add_column :<%= model_class_name.tableize %>, :last_activity_at, :datetime, :default => nil
6
6
  add_column :<%= model_class_name.tableize %>, :last_login_from_ip_address, :string, :default => nil
7
-
8
- add_index :<%= model_class_name.tableize %>, [:last_logout_at, :last_activity_at]
9
- end
10
7
 
11
- def self.down
12
- remove_index :<%= model_class_name.tableize %>, [:last_logout_at, :last_activity_at]
13
-
14
- remove_column :<%= model_class_name.tableize %>, :last_login_from_ip_address
15
- remove_column :<%= model_class_name.tableize %>, :last_activity_at
16
- remove_column :<%= model_class_name.tableize %>, :last_logout_at
17
- remove_column :<%= model_class_name.tableize %>, :last_login_at
8
+ add_index :<%= model_class_name.tableize %>, [:last_logout_at, :last_activity_at]
18
9
  end
19
10
  end
@@ -1,13 +1,9 @@
1
1
  class SorceryBruteForceProtection < ActiveRecord::Migration
2
- def self.up
2
+ def change
3
3
  add_column :<%= model_class_name.tableize %>, :failed_logins_count, :integer, :default => 0
4
4
  add_column :<%= model_class_name.tableize %>, :lock_expires_at, :datetime, :default => nil
5
5
  add_column :<%= model_class_name.tableize %>, :unlock_token, :string, :default => nil
6
- end
7
6
 
8
- def self.down
9
- remove_column :<%= model_class_name.tableize %>, :lock_expires_at
10
- remove_column :<%= model_class_name.tableize %>, :failed_logins_count
11
- remove_column :<%= model_class_name.tableize %>, :unlock_token
7
+ add_index :<%= model_class_name.tableize %>, :unlock_token
12
8
  end
13
- end
9
+ end
@@ -1,16 +1,13 @@
1
1
  class SorceryCore < ActiveRecord::Migration
2
- def self.up
2
+ def change
3
3
  create_table :<%= model_class_name.tableize %> do |t|
4
- t.string :username, :null => false # if you use another field as a username, for example email, you can safely remove this field.
5
- t.string :email, :default => nil # if you use this field as a username, you might want to make it :null => false.
6
- t.string :crypted_password, :default => nil
7
- t.string :salt, :default => nil
4
+ t.string :email, :null => false
5
+ t.string :crypted_password
6
+ t.string :salt
8
7
 
9
8
  t.timestamps
10
9
  end
11
- end
12
10
 
13
- def self.down
14
- drop_table :<%= model_class_name.tableize %>
11
+ add_index :<%= model_class_name.tableize %>, :email, unique: true
15
12
  end
16
13
  end
@@ -1,14 +1,12 @@
1
1
  class SorceryExternal < ActiveRecord::Migration
2
- def self.up
2
+ def change
3
3
  create_table :authentications do |t|
4
4
  t.integer :<%= model_class_name.tableize.singularize %>_id, :null => false
5
5
  t.string :provider, :uid, :null => false
6
6
 
7
7
  t.timestamps
8
8
  end
9
- end
10
9
 
11
- def self.down
12
- drop_table :authentications
10
+ add_index :<%= model_class_name.tableize %>, [:provider, :uid]
13
11
  end
14
- end
12
+ end
@@ -1,15 +1,8 @@
1
1
  class SorceryRememberMe < ActiveRecord::Migration
2
- def self.up
2
+ def change
3
3
  add_column :<%= model_class_name.tableize %>, :remember_me_token, :string, :default => nil
4
4
  add_column :<%= model_class_name.tableize %>, :remember_me_token_expires_at, :datetime, :default => nil
5
-
6
- add_index :<%= model_class_name.tableize %>, :remember_me_token
7
- end
8
5
 
9
- def self.down
10
- remove_index :<%= model_class_name.tableize %>, :remember_me_token
11
-
12
- remove_column :<%= model_class_name.tableize %>, :remember_me_token_expires_at
13
- remove_column :<%= model_class_name.tableize %>, :remember_me_token
6
+ add_index :<%= model_class_name.tableize %>, :remember_me_token
14
7
  end
15
8
  end
@@ -1,17 +1,9 @@
1
1
  class SorceryResetPassword < ActiveRecord::Migration
2
- def self.up
2
+ def change
3
3
  add_column :<%= model_class_name.tableize %>, :reset_password_token, :string, :default => nil
4
4
  add_column :<%= model_class_name.tableize %>, :reset_password_token_expires_at, :datetime, :default => nil
5
5
  add_column :<%= model_class_name.tableize %>, :reset_password_email_sent_at, :datetime, :default => nil
6
-
7
- add_index :<%= model_class_name.tableize %>, :reset_password_token
8
- end
9
6
 
10
- def self.down
11
- remove_index :<%= model_class_name.tableize %>, :reset_password_token
12
-
13
- remove_column :<%= model_class_name.tableize %>, :reset_password_email_sent_at
14
- remove_column :<%= model_class_name.tableize %>, :reset_password_token_expires_at
15
- remove_column :<%= model_class_name.tableize %>, :reset_password_token
7
+ add_index :<%= model_class_name.tableize %>, :reset_password_token
16
8
  end
17
9
  end
@@ -1,17 +1,9 @@
1
1
  class SorceryUserActivation < ActiveRecord::Migration
2
- def self.up
2
+ def change
3
3
  add_column :<%= model_class_name.tableize %>, :activation_state, :string, :default => nil
4
4
  add_column :<%= model_class_name.tableize %>, :activation_token, :string, :default => nil
5
5
  add_column :<%= model_class_name.tableize %>, :activation_token_expires_at, :datetime, :default => nil
6
-
7
- add_index :<%= model_class_name.tableize %>, :activation_token
8
- end
9
6
 
10
- def self.down
11
- remove_index :<%= model_class_name.tableize %>, :activation_token
12
-
13
- remove_column :<%= model_class_name.tableize %>, :activation_token_expires_at
14
- remove_column :<%= model_class_name.tableize %>, :activation_token
15
- remove_column :<%= model_class_name.tableize %>, :activation_state
7
+ add_index :<%= model_class_name.tableize %>, :activation_token
16
8
  end
17
9
  end
@@ -0,0 +1,120 @@
1
+ module Sorcery
2
+ module Adapters
3
+ class ActiveRecordAdapter < BaseAdapter
4
+ def update_attributes(attrs)
5
+ attrs.each do |name, value|
6
+ @model.send(:"#{name}=", value)
7
+ end
8
+ primary_key = @model.class.primary_key
9
+ @model.class.where(:"#{primary_key}" => @model.send(:"#{primary_key}")).update_all(attrs)
10
+ end
11
+
12
+ def save(options = {})
13
+ mthd = options.delete(:raise_on_failure) ? :save! : :save
14
+ @model.send(mthd, options)
15
+ end
16
+
17
+ def increment(field)
18
+ @model.increment!(field)
19
+ end
20
+
21
+ def find_authentication_by_oauth_credentials(relation_name, provider, uid)
22
+ @user_config ||= ::Sorcery::Controller::Config.user_class.to_s.constantize.sorcery_config
23
+ conditions = {
24
+ @user_config.provider_uid_attribute_name => uid,
25
+ @user_config.provider_attribute_name => provider
26
+ }
27
+
28
+ @model.public_send(relation_name).where(conditions).first
29
+ end
30
+
31
+ class << self
32
+ def define_field(name, type, options={})
33
+ # AR fields are defined through migrations, only validator here
34
+ end
35
+
36
+ def define_callback(time, event, method_name, options={})
37
+ @klass.send "#{time}_#{event}", method_name, options.slice(:if)
38
+ end
39
+
40
+ def find_by_oauth_credentials(provider, uid)
41
+ @user_config ||= ::Sorcery::Controller::Config.user_class.to_s.constantize.sorcery_config
42
+ conditions = {
43
+ @user_config.provider_uid_attribute_name => uid,
44
+ @user_config.provider_attribute_name => provider
45
+ }
46
+
47
+ @klass.where(conditions).first
48
+ end
49
+
50
+ def find_by_remember_me_token(token)
51
+ @klass.where(@klass.sorcery_config.remember_me_token_attribute_name => token).first
52
+ end
53
+
54
+ def find_by_credentials(credentials)
55
+ relation = nil
56
+
57
+ @klass.sorcery_config.username_attribute_names.each do |attribute|
58
+ if @klass.sorcery_config.downcase_username_before_authenticating
59
+ condition = @klass.arel_table[attribute].lower.eq(@klass.arel_table.lower(credentials[0]))
60
+ else
61
+ condition = @klass.arel_table[attribute].eq(credentials[0])
62
+ end
63
+
64
+ if relation.nil?
65
+ relation = condition
66
+ else
67
+ relation = relation.or(condition)
68
+ end
69
+ end
70
+
71
+ @klass.where(relation).first
72
+ end
73
+
74
+ def find_by_token(token_attr_name, token)
75
+ condition = @klass.arel_table[token_attr_name].eq(token)
76
+
77
+ @klass.where(condition).first
78
+ end
79
+
80
+ def find_by_activation_token(token)
81
+ @klass.where(@klass.sorcery_config.activation_token_attribute_name => token).first
82
+ end
83
+
84
+ def find_by_id(id)
85
+ @klass.find_by_id(id)
86
+ end
87
+
88
+ def find_by_username(username)
89
+ @klass.sorcery_config.username_attribute_names.each do |attribute|
90
+ if @klass.sorcery_config.downcase_username_before_authenticating
91
+ username = username.downcase
92
+ end
93
+
94
+ result = @klass.where(attribute => username).first
95
+ return result if result
96
+ end
97
+ end
98
+
99
+ def find_by_email(email)
100
+ @klass.where(@klass.sorcery_config.email_attribute_name => email).first
101
+ end
102
+
103
+ def get_current_users
104
+ config = @klass.sorcery_config
105
+
106
+ @klass
107
+ .where("#{config.last_activity_at_attribute_name} IS NOT NULL") \
108
+ .where("#{config.last_logout_at_attribute_name} IS NULL OR #{config.last_activity_at_attribute_name} > #{config.last_logout_at_attribute_name}") \
109
+ .where("#{config.last_activity_at_attribute_name} > ? ", config.activity_timeout.seconds.ago.utc.to_s(:db))
110
+ end
111
+
112
+ def transaction(&blk)
113
+ @klass.tap(&blk)
114
+ end
115
+ end
116
+ end
117
+
118
+
119
+ end
120
+ end
@@ -0,0 +1,30 @@
1
+ module Sorcery
2
+ module Adapters
3
+ class BaseAdapter
4
+ def initialize(model)
5
+ @model = model
6
+ end
7
+
8
+ def self.from(klass)
9
+ @klass = klass
10
+ self
11
+ end
12
+
13
+ def self.delete_all
14
+ @klass.delete_all
15
+ end
16
+
17
+ def self.find(id)
18
+ find_by_id(id)
19
+ end
20
+
21
+ def increment(field)
22
+ @model.increment(field)
23
+ end
24
+
25
+ def update_attribute(name, value)
26
+ update_attributes(name => value)
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,176 @@
1
+ module Sorcery
2
+ module Adapters
3
+ class DataMapperAdapter < BaseAdapter
4
+ module Wrapper
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ sorcery_adapter.verify_submodules_compatibility!
9
+ end
10
+
11
+ def sorcery_adapter
12
+ @sorcery_adapter ||= Sorcery::Adapters::DataMapperAdapter.new(self)
13
+ end
14
+
15
+ module ClassMethods
16
+ def sorcery_adapter
17
+ Sorcery::Adapters::DataMapperAdapter.from(self)
18
+ end
19
+ end
20
+ end
21
+
22
+ def increment(attr)
23
+ @model[attr] ||= 0
24
+ @model[attr] += 1
25
+ @model
26
+ end
27
+
28
+ def update_attributes(attrs)
29
+ attrs.each do |name, value|
30
+ value = value.utc if value.is_a?(ActiveSupport::TimeWithZone)
31
+ @model.send(:"#{name}=", value)
32
+ end
33
+ @model.class.get(@model.id).update(attrs)
34
+ end
35
+
36
+ def update_attribute(name, value)
37
+ update_attributes(name => value)
38
+ end
39
+
40
+ def save(options = {})
41
+ if options.key?(:validate) && !options[:validate]
42
+ @model.save!
43
+ else
44
+ @model.save
45
+ end
46
+ end
47
+
48
+ class << self
49
+ def define_field(name, type, options={})
50
+ @klass.property name, type, options.slice(:length, :default)
51
+
52
+ # Workaround local timezone retrieval problem NOTE dm-core issue #193
53
+ if type == Time
54
+ @klass.send(:alias_method, "orig_#{name}", name)
55
+ @klass.send :define_method, name do
56
+ t = send("orig_#{name}")
57
+ t && Time.new(t.year, t.month, t.day, t.hour, t.min, t.sec, 0)
58
+ end
59
+ end
60
+ end
61
+
62
+ def define_callback(time, event, method_name, options={})
63
+ event = :valid? if event == :validation
64
+ condition = options[:if]
65
+
66
+ user_klass = @klass
67
+
68
+ block = Proc.new do |record|
69
+ if condition.nil?
70
+ send(method_name)
71
+ elsif condition.respond_to?(:call)
72
+ send(method_name) if condition.call(self)
73
+ elsif condition.is_a? Symbol
74
+ send(method_name) if send(condition)
75
+ end
76
+ end
77
+
78
+ @klass.send(time, event, &block)
79
+ end
80
+
81
+ def find(id)
82
+ @klass.get(id)
83
+ end
84
+
85
+ def delete_all
86
+ @klass.destroy
87
+ end
88
+
89
+ # NOTE
90
+ # DM Adapter dependent
91
+ # DM creates MySQL tables case insensitive by default
92
+ # http://datamapper.lighthouseapp.com/projects/20609-datamapper/tickets/1105
93
+ def find_by_credentials(credentials)
94
+ credential = credentials[0].dup
95
+ credential.downcase! if @klass.sorcery_config.downcase_username_before_authenticating
96
+ @klass.sorcery_config.username_attribute_names.each do |name|
97
+ @user = @klass.first(name => credential)
98
+ break if @user
99
+ end
100
+ !!@user ? @klass.get(@user.id) : nil
101
+ end
102
+
103
+ def find_by_oauth_credentials(provider, uid)
104
+ @user_config = ::Sorcery::Controller::Config.user_class.to_s.constantize.sorcery_config
105
+ user = @klass.first(@user_config.provider_attribute_name => provider, @user_config.provider_uid_attribute_name => uid)
106
+ !!user ? @klass.get(user.id) : nil
107
+ end
108
+
109
+ def find_by_token(token_attr_name, token)
110
+ @klass.first(token_attr_name => token)
111
+ end
112
+
113
+ def find_by_id(id)
114
+ @klass.get(id)
115
+ rescue ::DataMapper::ObjectNotFoundError
116
+ nil
117
+ end
118
+
119
+ def find_by_activation_token(token)
120
+ user = @klass.first(@klass.sorcery_config.activation_token_attribute_name => token)
121
+ !!user ? @klass.get(user.id) : nil
122
+ end
123
+
124
+ def find_by_remember_me_token(token)
125
+ user = @klass.first(@klass.sorcery_config.remember_me_token_attribute_name => token)
126
+ !!user ? @klass.get(user.id) : nil
127
+ end
128
+
129
+ def find_by_username(username)
130
+ user = nil
131
+ @klass.sorcery_config.username_attribute_names.each do |name|
132
+ user = @klass.first(name => username)
133
+ break if user
134
+ end
135
+ !!user ? @klass.get(user.id) : nil
136
+ end
137
+
138
+ def transaction(&blk)
139
+ @klass.tap(&blk)
140
+ end
141
+
142
+ def find_by_sorcery_token(token_attr_name, token)
143
+ user = @klass.first(token_attr_name => token)
144
+ !!user ? @klass.get(user.id) : nil
145
+ end
146
+
147
+ def find_by_email(email)
148
+ user = @klass.first(@klass.sorcery_config.email_attribute_name => email)
149
+ !!user ? @klass.get(user.id) : nil
150
+ end
151
+
152
+ # NOTE
153
+ # DM Adapter dependent
154
+ def get_current_users
155
+ unless @klass.repository.adapter.is_a?(::DataMapper::Adapters::MysqlAdapter)
156
+ raise 'Unsupported DataMapper Adapter'
157
+ end
158
+ config = @klass.sorcery_config
159
+ ret = @klass.all(config.last_logout_at_attribute_name => nil) |
160
+ @klass.all(config.last_activity_at_attribute_name.gt => config.last_logout_at_attribute_name)
161
+ ret = ret.all(config.last_activity_at_attribute_name.not => nil)
162
+ ret = ret.all(config.last_activity_at_attribute_name.gt => config.activity_timeout.seconds.ago.utc)
163
+ ret
164
+ end
165
+
166
+ def verify_submodules_compatibility!
167
+ active_submodules = [::Sorcery::Controller::Config.submodules].flatten
168
+
169
+ if active_submodules.include?(:activity_logging) && !repository.adapter.is_a?(::DataMapper::Adapters::MysqlAdapter)
170
+ raise "DataMapper adapter compatibility error, please check documentation"
171
+ end
172
+ end
173
+ end
174
+ end
175
+ end
176
+ end
@@ -0,0 +1,110 @@
1
+ module Sorcery
2
+ module Adapters
3
+ class MongoMapperAdapter < BaseAdapter
4
+ module Wrapper
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ extend Sorcery::Model
9
+ end
10
+
11
+ def sorcery_adapter
12
+ @sorcery_adapter ||= Sorcery::Adapters::MongoMapperAdapter.new(self)
13
+ end
14
+
15
+ module ClassMethods
16
+ def sorcery_adapter
17
+ Sorcery::Adapters::MongoMapperAdapter.from(self)
18
+ end
19
+ end
20
+ end
21
+
22
+ def increment(attr)
23
+ @model[attr] ||= 0
24
+ @model[attr] += 1
25
+ @model.class.increment(@model.id, attr => 1)
26
+ end
27
+
28
+ def save(options = {})
29
+ if options.delete(:raise_on_failure) && options[:validate] != false
30
+ @model.save! options
31
+ else
32
+ @model.save options
33
+ end
34
+ end
35
+
36
+ def update_attributes(attrs)
37
+ @model.update_attributes(attrs)
38
+ end
39
+
40
+ class << self
41
+ def define_field(name, type, options={})
42
+ @klass.key name, type, options.slice(:default)
43
+ end
44
+
45
+ def define_callback(time, event, method_name, options={})
46
+ @klass.send "#{time}_#{event}", method_name, options.slice(:if)
47
+ end
48
+
49
+ def credential_regex(credential)
50
+ return { :$regex => /^#{Regexp.escape(credential)}$/i } if (@klass.sorcery_config.downcase_username_before_authenticating)
51
+ return credential
52
+ end
53
+
54
+ def find_by_credentials(credentials)
55
+ user = nil
56
+ @klass.sorcery_config.username_attribute_names.each do |attribute|
57
+ user = @klass.where(attribute => credential_regex(credentials[0])).first
58
+ break if user
59
+ end
60
+ user
61
+ end
62
+
63
+ def find_by_oauth_credentials(provider, uid)
64
+ @user_config ||= ::Sorcery::Controller::Config.user_class.to_s.constantize.sorcery_config
65
+ @klass.where(@user_config.provider_attribute_name => provider, @user_config.provider_uid_attribute_name => uid).first
66
+ end
67
+
68
+ def find_by_id(id)
69
+ @klass.find(id)
70
+ end
71
+
72
+ def find_by_username(username)
73
+ if @klass.sorcery_config.downcase_username_before_authenticating
74
+ username = username.downcase
75
+ end
76
+
77
+ @klass.sorcery_config.username_attribute_names.each do |attribute|
78
+ result = @klass.where(attribute => username).first
79
+ return result if result
80
+ end
81
+ end
82
+
83
+ def find_by_activation_token(token)
84
+ @klass.where(@klass.sorcery_config.activation_token_attribute_name => token).first
85
+ end
86
+
87
+ def find_by_email(email)
88
+ @klass.where(@klass.sorcery_config.email_attribute_name => email).first
89
+ end
90
+
91
+ def find_by_token(token_attr_name, token)
92
+ @klass.where(token_attr_name => token).first
93
+ end
94
+
95
+ def transaction(&blk)
96
+ @klass.tap(&blk)
97
+ end
98
+
99
+ def find_by_sorcery_token(token_attr_name, token)
100
+ @klass.where(token_attr_name => token).first
101
+ end
102
+
103
+ def get_current_users
104
+ raise "this method is unavailable for MongoMapper"
105
+ end
106
+
107
+ end
108
+ end
109
+ end
110
+ end