sorcery 0.6.1 → 0.7.1

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 (185) hide show
  1. data/Gemfile +1 -0
  2. data/Gemfile.lock +52 -45
  3. data/README.rdoc +26 -54
  4. data/Rakefile +26 -0
  5. data/VERSION +1 -1
  6. data/lib/generators/sorcery/USAGE +22 -0
  7. data/lib/generators/sorcery/install_generator.rb +71 -0
  8. data/lib/{sorcery/initializers → generators/sorcery/templates}/initializer.rb +82 -61
  9. data/lib/generators/sorcery/templates/migration/activity_logging.rb +17 -0
  10. data/lib/generators/sorcery/templates/migration/brute_force_protection.rb +11 -0
  11. data/lib/generators/{sorcery_migration/templates → sorcery/templates/migration}/core.rb +3 -3
  12. data/lib/generators/{sorcery_migration/templates → sorcery/templates/migration}/external.rb +1 -1
  13. data/lib/generators/sorcery/templates/migration/remember_me.rb +15 -0
  14. data/lib/generators/sorcery/templates/migration/reset_password.rb +17 -0
  15. data/lib/generators/sorcery/templates/migration/user_activation.rb +17 -0
  16. data/lib/sorcery/controller/submodules/activity_logging.rb +23 -9
  17. data/lib/sorcery/controller/submodules/brute_force_protection.rb +2 -1
  18. data/lib/sorcery/controller/submodules/external/protocols/certs/ca-bundle.crt +5182 -0
  19. data/lib/sorcery/controller/submodules/external/protocols/oauth2.rb +27 -8
  20. data/lib/sorcery/controller/submodules/external/providers/github.rb +80 -0
  21. data/lib/sorcery/controller/submodules/external/providers/twitter.rb +5 -0
  22. data/lib/sorcery/controller/submodules/external.rb +10 -3
  23. data/lib/sorcery/controller/submodules/http_basic_auth.rb +1 -1
  24. data/lib/sorcery/controller/submodules/remember_me.rb +15 -5
  25. data/lib/sorcery/controller/submodules/session_timeout.rb +1 -1
  26. data/lib/sorcery/controller.rb +59 -38
  27. data/lib/sorcery/crypto_providers/aes256.rb +7 -3
  28. data/lib/sorcery/engine.rb +1 -0
  29. data/lib/sorcery/model/adapters/active_record.rb +2 -1
  30. data/lib/sorcery/model/adapters/mongo_mapper.rb +49 -0
  31. data/lib/sorcery/model/adapters/mongoid.rb +7 -2
  32. data/lib/sorcery/model/submodules/brute_force_protection.rb +13 -3
  33. data/lib/sorcery/model/submodules/remember_me.rb +9 -2
  34. data/lib/sorcery/model/submodules/reset_password.rb +11 -2
  35. data/lib/sorcery/model/submodules/user_activation.rb +13 -2
  36. data/lib/sorcery/model/temporary_token.rb +5 -0
  37. data/lib/sorcery/model.rb +34 -15
  38. data/lib/sorcery/test_helpers/internal/rails.rb +1 -1
  39. data/lib/sorcery/test_helpers/rails.rb +2 -2
  40. data/lib/sorcery.rb +6 -7
  41. data/sorcery.gemspec +86 -203
  42. data/spec/Gemfile.lock +23 -12
  43. data/spec/README.md +31 -0
  44. data/spec/rails3/Gemfile +3 -1
  45. data/spec/rails3/Gemfile.lock +45 -28
  46. data/spec/rails3/app/controllers/application_controller.rb +40 -22
  47. data/spec/rails3/app/views/application/index.html.erb +17 -0
  48. data/spec/rails3/spec/controller_activity_logging_spec.rb +23 -0
  49. data/spec/rails3/spec/controller_oauth2_spec.rb +59 -16
  50. data/spec/rails3/spec/controller_remember_me_spec.rb +37 -6
  51. data/spec/rails3/spec/controller_spec.rb +30 -0
  52. data/spec/rails3/spec/integration_spec.rb +23 -0
  53. data/spec/rails3/spec/spec_helper.rb +6 -5
  54. data/spec/rails3_mongo_mapper/.gitignore +4 -0
  55. data/spec/rails3_mongo_mapper/.rspec +1 -0
  56. data/spec/{sinatra_modular → rails3_mongo_mapper}/Gemfile +5 -5
  57. data/spec/rails3_mongo_mapper/Gemfile.lock +159 -0
  58. data/spec/{sinatra → rails3_mongo_mapper}/Rakefile +3 -3
  59. data/spec/rails3_mongo_mapper/app/controllers/application_controller.rb +108 -0
  60. data/spec/rails3_mongo_mapper/app/helpers/application_helper.rb +2 -0
  61. data/spec/rails3_mongo_mapper/app/models/authentication.rb +6 -0
  62. data/spec/rails3_mongo_mapper/app/models/user.rb +5 -0
  63. data/spec/rails3_mongo_mapper/app/views/layouts/application.html.erb +14 -0
  64. data/spec/rails3_mongo_mapper/app/views/sorcery_mailer/activation_email.html.erb +17 -0
  65. data/spec/rails3_mongo_mapper/app/views/sorcery_mailer/activation_email.text.erb +9 -0
  66. data/spec/rails3_mongo_mapper/app/views/sorcery_mailer/activation_success_email.html.erb +17 -0
  67. data/spec/rails3_mongo_mapper/app/views/sorcery_mailer/activation_success_email.text.erb +9 -0
  68. data/spec/rails3_mongo_mapper/app/views/sorcery_mailer/reset_password_email.html.erb +16 -0
  69. data/spec/rails3_mongo_mapper/app/views/sorcery_mailer/reset_password_email.text.erb +8 -0
  70. data/spec/rails3_mongo_mapper/config/application.rb +51 -0
  71. data/spec/rails3_mongo_mapper/config/boot.rb +13 -0
  72. data/spec/rails3_mongo_mapper/config/environment.rb +5 -0
  73. data/spec/rails3_mongo_mapper/config/environments/development.rb +30 -0
  74. data/spec/rails3_mongo_mapper/config/environments/in_memory.rb +0 -0
  75. data/spec/rails3_mongo_mapper/config/environments/production.rb +49 -0
  76. data/spec/rails3_mongo_mapper/config/environments/test.rb +35 -0
  77. data/spec/rails3_mongo_mapper/config/initializers/backtrace_silencers.rb +7 -0
  78. data/spec/rails3_mongo_mapper/config/initializers/inflections.rb +10 -0
  79. data/spec/rails3_mongo_mapper/config/initializers/mime_types.rb +5 -0
  80. data/spec/rails3_mongo_mapper/config/initializers/mongo.rb +2 -0
  81. data/spec/rails3_mongo_mapper/config/initializers/secret_token.rb +7 -0
  82. data/spec/rails3_mongo_mapper/config/initializers/session_store.rb +8 -0
  83. data/spec/rails3_mongo_mapper/config/locales/en.yml +5 -0
  84. data/spec/rails3_mongo_mapper/config/routes.rb +59 -0
  85. data/spec/rails3_mongo_mapper/config.ru +4 -0
  86. data/spec/rails3_mongo_mapper/db/schema.rb +23 -0
  87. data/spec/rails3_mongo_mapper/db/seeds.rb +7 -0
  88. data/spec/rails3_mongo_mapper/lib/tasks/.gitkeep +0 -0
  89. data/spec/rails3_mongo_mapper/public/404.html +26 -0
  90. data/spec/rails3_mongo_mapper/public/422.html +26 -0
  91. data/spec/rails3_mongo_mapper/public/500.html +26 -0
  92. data/spec/rails3_mongo_mapper/public/favicon.ico +0 -0
  93. data/spec/rails3_mongo_mapper/public/images/rails.png +0 -0
  94. data/spec/rails3_mongo_mapper/public/javascripts/application.js +2 -0
  95. data/spec/rails3_mongo_mapper/public/javascripts/controls.js +965 -0
  96. data/spec/rails3_mongo_mapper/public/javascripts/dragdrop.js +974 -0
  97. data/spec/rails3_mongo_mapper/public/javascripts/effects.js +1123 -0
  98. data/spec/rails3_mongo_mapper/public/javascripts/prototype.js +6001 -0
  99. data/spec/rails3_mongo_mapper/public/javascripts/rails.js +175 -0
  100. data/spec/rails3_mongo_mapper/public/robots.txt +5 -0
  101. data/spec/rails3_mongo_mapper/public/stylesheets/.gitkeep +0 -0
  102. data/spec/rails3_mongo_mapper/script/rails +6 -0
  103. data/spec/{sinatra → rails3_mongo_mapper}/spec/controller_spec.rb +51 -41
  104. data/spec/rails3_mongo_mapper/spec/spec_helper.orig.rb +27 -0
  105. data/spec/rails3_mongo_mapper/spec/spec_helper.rb +55 -0
  106. data/spec/rails3_mongo_mapper/spec/user_activation_spec.rb +9 -0
  107. data/spec/rails3_mongo_mapper/spec/user_activity_logging_spec.rb +8 -0
  108. data/spec/rails3_mongo_mapper/spec/user_brute_force_protection_spec.rb +8 -0
  109. data/spec/rails3_mongo_mapper/spec/user_oauth_spec.rb +8 -0
  110. data/spec/rails3_mongo_mapper/spec/user_remember_me_spec.rb +8 -0
  111. data/spec/rails3_mongo_mapper/spec/user_reset_password_spec.rb +8 -0
  112. data/spec/rails3_mongo_mapper/spec/user_spec.rb +37 -0
  113. data/spec/rails3_mongo_mapper/vendor/plugins/.gitkeep +0 -0
  114. data/spec/rails3_mongoid/Gemfile +1 -1
  115. data/spec/rails3_mongoid/Gemfile.lock +41 -34
  116. data/spec/rails3_mongoid/spec/controller_activity_logging_spec.rb +98 -0
  117. data/spec/rails3_mongoid/spec/controller_spec.rb +130 -0
  118. data/spec/rails3_mongoid/spec/user_spec.rb +1 -0
  119. data/spec/shared_examples/user_remember_me_shared_examples.rb +1 -0
  120. data/spec/shared_examples/user_shared_examples.rb +36 -8
  121. metadata +128 -234
  122. data/lib/generators/sorcery_migration/sorcery_migration_generator.rb +0 -24
  123. data/lib/generators/sorcery_migration/templates/activity_logging.rb +0 -17
  124. data/lib/generators/sorcery_migration/templates/brute_force_protection.rb +0 -11
  125. data/lib/generators/sorcery_migration/templates/remember_me.rb +0 -15
  126. data/lib/generators/sorcery_migration/templates/reset_password.rb +0 -13
  127. data/lib/generators/sorcery_migration/templates/user_activation.rb +0 -17
  128. data/lib/sorcery/controller/adapters/sinatra.rb +0 -104
  129. data/lib/sorcery/sinatra.rb +0 -4
  130. data/lib/sorcery/test_helpers/internal/sinatra.rb +0 -74
  131. data/lib/sorcery/test_helpers/internal/sinatra_modular.rb +0 -74
  132. data/lib/sorcery/test_helpers/sinatra.rb +0 -88
  133. data/spec/rails3/Rakefile.unused +0 -7
  134. data/spec/rails3/public/index.html +0 -239
  135. data/spec/sinatra/Gemfile +0 -15
  136. data/spec/sinatra/Gemfile.lock +0 -117
  137. data/spec/sinatra/authentication.rb +0 -3
  138. data/spec/sinatra/db/migrate/activation/20101224223622_add_activation_to_users.rb +0 -17
  139. data/spec/sinatra/db/migrate/activity_logging/20101224223624_add_activity_logging_to_users.rb +0 -17
  140. data/spec/sinatra/db/migrate/brute_force_protection/20101224223626_add_brute_force_protection_to_users.rb +0 -11
  141. data/spec/sinatra/db/migrate/core/20101224223620_create_users.rb +0 -16
  142. data/spec/sinatra/db/migrate/external/20101224223628_create_authentications.rb +0 -14
  143. data/spec/sinatra/db/migrate/remember_me/20101224223623_add_remember_me_token_to_users.rb +0 -15
  144. data/spec/sinatra/db/migrate/reset_password/20101224223622_add_reset_password_to_users.rb +0 -13
  145. data/spec/sinatra/filters.rb +0 -27
  146. data/spec/sinatra/modular.rb +0 -157
  147. data/spec/sinatra/myapp.rb +0 -133
  148. data/spec/sinatra/spec/controller_activity_logging_spec.rb +0 -85
  149. data/spec/sinatra/spec/controller_brute_force_protection_spec.rb +0 -70
  150. data/spec/sinatra/spec/controller_http_basic_auth_spec.rb +0 -53
  151. data/spec/sinatra/spec/controller_oauth2_spec.rb +0 -99
  152. data/spec/sinatra/spec/controller_oauth_spec.rb +0 -100
  153. data/spec/sinatra/spec/controller_remember_me_spec.rb +0 -64
  154. data/spec/sinatra/spec/controller_session_timeout_spec.rb +0 -57
  155. data/spec/sinatra/spec/spec_helper.rb +0 -45
  156. data/spec/sinatra/user.rb +0 -6
  157. data/spec/sinatra/views/test_login.erb +0 -4
  158. data/spec/sinatra_modular/Gemfile.lock +0 -117
  159. data/spec/sinatra_modular/Rakefile +0 -11
  160. data/spec/sinatra_modular/authentication.rb +0 -3
  161. data/spec/sinatra_modular/db/migrate/activation/20101224223622_add_activation_to_users.rb +0 -17
  162. data/spec/sinatra_modular/db/migrate/activity_logging/20101224223624_add_activity_logging_to_users.rb +0 -17
  163. data/spec/sinatra_modular/db/migrate/brute_force_protection/20101224223626_add_brute_force_protection_to_users.rb +0 -11
  164. data/spec/sinatra_modular/db/migrate/core/20101224223620_create_users.rb +0 -16
  165. data/spec/sinatra_modular/db/migrate/external/20101224223628_create_authentications.rb +0 -14
  166. data/spec/sinatra_modular/db/migrate/remember_me/20101224223623_add_remember_me_token_to_users.rb +0 -15
  167. data/spec/sinatra_modular/db/migrate/reset_password/20101224223622_add_reset_password_to_users.rb +0 -13
  168. data/spec/sinatra_modular/filters.rb +0 -27
  169. data/spec/sinatra_modular/modular.rb +0 -157
  170. data/spec/sinatra_modular/myapp.rb +0 -133
  171. data/spec/sinatra_modular/sorcery_mailer.rb +0 -25
  172. data/spec/sinatra_modular/spec_modular/controller_activity_logging_spec.rb +0 -85
  173. data/spec/sinatra_modular/spec_modular/controller_brute_force_protection_spec.rb +0 -70
  174. data/spec/sinatra_modular/spec_modular/controller_http_basic_auth_spec.rb +0 -53
  175. data/spec/sinatra_modular/spec_modular/controller_oauth2_spec.rb +0 -99
  176. data/spec/sinatra_modular/spec_modular/controller_oauth_spec.rb +0 -100
  177. data/spec/sinatra_modular/spec_modular/controller_remember_me_spec.rb +0 -64
  178. data/spec/sinatra_modular/spec_modular/controller_session_timeout_spec.rb +0 -57
  179. data/spec/sinatra_modular/spec_modular/controller_spec.rb +0 -116
  180. data/spec/sinatra_modular/spec_modular/spec.opts +0 -2
  181. data/spec/sinatra_modular/spec_modular/spec_helper.rb +0 -51
  182. data/spec/sinatra_modular/user.rb +0 -6
  183. data/spec/sinatra_modular/views/test_login.erb +0 -4
  184. /data/spec/{sinatra → rails3_mongo_mapper/app/mailers}/sorcery_mailer.rb +0 -0
  185. /data/spec/{sinatra → rails3_mongo_mapper}/spec/spec.opts +0 -0
@@ -1,12 +1,13 @@
1
1
  PATH
2
- remote: ../../../
2
+ remote: ../../
3
3
  specs:
4
- sorcery (0.6.0)
4
+ sorcery (0.7.0)
5
5
  bcrypt-ruby (~> 3.0.0)
6
- oauth (>= 0.4.4)
7
- oauth (>= 0.4.4)
8
- oauth2 (>= 0.1.1)
9
- oauth2 (>= 0.1.1)
6
+ mongo_mapper
7
+ oauth (~> 0.4.4)
8
+ oauth (~> 0.4.4)
9
+ oauth2 (~> 0.4.1)
10
+ oauth2 (~> 0.4.1)
10
11
 
11
12
  GEM
12
13
  remote: http://rubygems.org/
@@ -40,46 +41,51 @@ GEM
40
41
  activesupport (3.0.3)
41
42
  addressable (2.2.6)
42
43
  archive-tar-minitar (0.5.2)
43
- arel (2.0.6)
44
- bcrypt-ruby (3.0.0)
45
- bson (1.3.0)
46
- bson_ext (1.3.0)
44
+ arel (2.0.10)
45
+ bcrypt-ruby (3.0.1)
46
+ bson (1.4.1)
47
+ bson_ext (1.4.1)
47
48
  builder (2.1.2)
48
- columnize (0.3.2)
49
- diff-lcs (1.1.2)
49
+ columnize (0.3.4)
50
+ diff-lcs (1.1.3)
50
51
  erubis (2.6.6)
51
52
  abstract (>= 1.0.0)
52
53
  faraday (0.6.1)
53
54
  addressable (~> 2.2.4)
54
55
  multipart-post (~> 1.1.0)
55
- rack (< 2, >= 1.1.0)
56
- i18n (0.5.0)
57
- linecache19 (0.5.11)
56
+ rack (>= 1.1.0, < 2)
57
+ i18n (0.6.0)
58
+ linecache19 (0.5.12)
58
59
  ruby_core_source (>= 0.1.4)
59
- mail (2.2.13)
60
+ mail (2.2.19)
60
61
  activesupport (>= 2.3.6)
61
62
  i18n (>= 0.4.0)
62
63
  mime-types (~> 1.16)
63
64
  treetop (~> 1.4.8)
64
65
  mime-types (1.16)
65
- mongo (1.3.0)
66
- bson (>= 1.3.0)
67
- mongoid (2.0.1)
66
+ mongo (1.4.1)
67
+ bson (= 1.4.1)
68
+ mongo_mapper (0.9.2)
69
+ activemodel (~> 3.0)
70
+ activesupport (~> 3.0)
71
+ plucky (~> 0.3.8)
72
+ mongoid (2.2.3)
68
73
  activemodel (~> 3.0)
69
74
  mongo (~> 1.3)
70
75
  tzinfo (~> 0.3.22)
71
- will_paginate (~> 3.0.pre)
72
76
  multi_json (1.0.3)
73
77
  multipart-post (1.1.3)
74
78
  oauth (0.4.5)
75
79
  oauth2 (0.4.1)
76
80
  faraday (~> 0.6.1)
77
81
  multi_json (>= 0.0.5)
78
- polyglot (0.3.1)
79
- rack (1.2.1)
80
- rack-mount (0.6.13)
82
+ plucky (0.3.8)
83
+ mongo (~> 1.3)
84
+ polyglot (0.3.2)
85
+ rack (1.2.4)
86
+ rack-mount (0.6.14)
81
87
  rack (>= 1.0.0)
82
- rack-test (0.5.6)
88
+ rack-test (0.5.7)
83
89
  rack (>= 1.0)
84
90
  rails (3.0.3)
85
91
  actionmailer (= 3.0.3)
@@ -94,12 +100,12 @@ GEM
94
100
  activesupport (= 3.0.3)
95
101
  rake (>= 0.8.7)
96
102
  thor (~> 0.14.4)
97
- rake (0.8.7)
103
+ rake (0.9.2)
98
104
  rspec (2.5.0)
99
105
  rspec-core (~> 2.5.0)
100
106
  rspec-expectations (~> 2.5.0)
101
107
  rspec-mocks (~> 2.5.0)
102
- rspec-core (2.5.1)
108
+ rspec-core (2.5.2)
103
109
  rspec-expectations (2.5.0)
104
110
  diff-lcs (~> 1.1.2)
105
111
  rspec-mocks (2.5.0)
@@ -108,7 +114,7 @@ GEM
108
114
  activesupport (~> 3.0)
109
115
  railties (~> 3.0)
110
116
  rspec (~> 2.5.0)
111
- ruby-debug-base19 (0.11.24)
117
+ ruby-debug-base19 (0.11.25)
112
118
  columnize (>= 0.3.1)
113
119
  linecache19 (>= 0.5.11)
114
120
  ruby_core_source (>= 0.1.4)
@@ -116,17 +122,18 @@ GEM
116
122
  columnize (>= 0.3.1)
117
123
  linecache19 (>= 0.5.11)
118
124
  ruby-debug-base19 (>= 0.11.19)
119
- ruby_core_source (0.1.4)
125
+ ruby_core_source (0.1.5)
120
126
  archive-tar-minitar (>= 0.5.2)
121
- simplecov (0.3.9)
122
- simplecov-html (>= 0.3.7)
123
- simplecov-html (0.3.9)
127
+ simplecov (0.5.4)
128
+ multi_json (~> 1.0.3)
129
+ simplecov-html (~> 0.5.3)
130
+ simplecov-html (0.5.3)
124
131
  thor (0.14.6)
125
132
  timecop (0.3.5)
126
- treetop (1.4.9)
133
+ treetop (1.4.10)
134
+ polyglot
127
135
  polyglot (>= 0.3.1)
128
- tzinfo (0.3.23)
129
- will_paginate (3.0.pre2)
136
+ tzinfo (0.3.30)
130
137
 
131
138
  PLATFORMS
132
139
  ruby
@@ -0,0 +1,98 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe ApplicationController do
4
+
5
+ # ----------------- ACTIVITY LOGGING -----------------------
6
+ describe ApplicationController, "with activity logging features" do
7
+ before(:all) do
8
+ sorcery_reload!([:activity_logging])
9
+ end
10
+
11
+ before(:each) do
12
+ create_new_user
13
+ end
14
+
15
+ after(:each) do
16
+ User.delete_all
17
+ end
18
+
19
+ specify { subject.should respond_to(:current_users) }
20
+
21
+ it "'current_users' should be empty when no users are logged in" do
22
+ subject.current_users.size.should == 0
23
+ end
24
+
25
+ it "should log login time on login" do
26
+ now = Time.now.utc
27
+ login_user
28
+ @user.last_login_at.should_not be_nil
29
+ @user.last_login_at.to_s(:db).should >= now.to_s(:db)
30
+ @user.last_login_at.to_s(:db).should <= (now+2).to_s(:db)
31
+ end
32
+
33
+ it "should log logout time on logout" do
34
+ login_user
35
+ now = Time.now.utc
36
+ logout_user
37
+ User.first.last_logout_at.should_not be_nil
38
+ User.first.last_logout_at.to_s(:db).should >= now.to_s(:db)
39
+ User.first.last_logout_at.to_s(:db).should <= (now+2).to_s(:db)
40
+ end
41
+
42
+ it "should log last activity time when logged in" do
43
+ login_user
44
+ now = Time.now.utc
45
+ get :some_action
46
+ User.first.last_activity_at.to_s(:db).should >= now.to_s(:db)
47
+ User.first.last_activity_at.to_s(:db).should <= (now+2).to_s(:db)
48
+ end
49
+
50
+ it "'current_users' should hold the user object when 1 user is logged in" do
51
+ login_user
52
+ get :some_action
53
+ subject.current_users.size.should == 1
54
+ subject.current_users[0].should == @user
55
+ end
56
+
57
+ it "'current_users' should show all current_users, whether they have logged out before or not." do
58
+ user1 = create_new_user({:username => 'gizmo1', :email => "bla1@bla.com", :password => 'secret1'})
59
+ login_user(user1)
60
+ get :some_action
61
+ clear_user_without_logout
62
+ user2 = create_new_user({:username => 'gizmo2', :email => "bla2@bla.com", :password => 'secret2'})
63
+ login_user(user2)
64
+ get :some_action
65
+ clear_user_without_logout
66
+ user3 = create_new_user({:username => 'gizmo3', :email => "bla3@bla.com", :password => 'secret3'})
67
+ login_user(user3)
68
+ get :some_action
69
+ subject.current_users.size.should == 3
70
+ subject.current_users[0].should == user1
71
+ subject.current_users[1].should == user2
72
+ subject.current_users[2].should == user3
73
+ end
74
+
75
+ it "should not register login time if configured so" do
76
+ sorcery_controller_property_set(:register_login_time, false)
77
+ now = Time.now.utc
78
+ login_user
79
+ @user.last_login_at.should be_nil
80
+ end
81
+
82
+ it "should not register logout time if configured so" do
83
+ sorcery_controller_property_set(:register_logout_time, false)
84
+ now = Time.now.utc
85
+ login_user
86
+ logout_user
87
+ @user.last_logout_at.should be_nil
88
+ end
89
+
90
+ it "should not register last activity time if configured so" do
91
+ sorcery_controller_property_set(:register_last_activity_time, false)
92
+ now = Time.now.utc
93
+ login_user
94
+ get :some_action
95
+ @user.last_activity_at.should be_nil
96
+ end
97
+ end
98
+ end
@@ -0,0 +1,130 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe ApplicationController do
4
+
5
+ # ----------------- PLUGIN CONFIGURATION -----------------------
6
+ describe ApplicationController, "plugin configuration" do
7
+ before(:all) do
8
+ sorcery_reload!
9
+ end
10
+
11
+ after(:each) do
12
+ Sorcery::Controller::Config.reset!
13
+ sorcery_reload!
14
+ end
15
+
16
+ it "should enable configuration option 'user_class'" do
17
+ sorcery_controller_property_set(:user_class, "TestUser")
18
+ Sorcery::Controller::Config.user_class.should == "TestUser"
19
+ end
20
+
21
+ it "should enable configuration option 'not_authenticated_action'" do
22
+ sorcery_controller_property_set(:not_authenticated_action, :my_action)
23
+ Sorcery::Controller::Config.not_authenticated_action.should equal(:my_action)
24
+ end
25
+
26
+ end
27
+
28
+ # ----------------- PLUGIN ACTIVATED -----------------------
29
+ describe ApplicationController, "when activated with sorcery" do
30
+ before(:all) do
31
+ sorcery_reload!
32
+ User.delete_all
33
+ create_new_user
34
+ end
35
+
36
+ after(:each) do
37
+ Sorcery::Controller::Config.reset!
38
+ sorcery_controller_property_set(:user_class, User)
39
+ sorcery_model_property_set(:username_attribute_names, [:username, :email])
40
+ end
41
+
42
+ specify { should respond_to(:login) }
43
+
44
+ specify { should respond_to(:logout) }
45
+
46
+ specify { should respond_to(:logged_in?) }
47
+
48
+ specify { should respond_to(:current_user) }
49
+
50
+ it "login(username,password) should return the user when success and set the session with user.id" do
51
+ get :test_login, :username => 'gizmo', :password => 'secret'
52
+ assigns[:user].should == @user
53
+ session[:user_id].should == @user.id
54
+ end
55
+
56
+ it "login(email,password) should return the user when success and set the session with user.id" do
57
+ get :test_login, :username => 'bla@bla.com', :password => 'secret'
58
+ assigns[:user].should == @user
59
+ session[:user_id].should == @user.id
60
+ end
61
+
62
+ it "login(username,password) should return nil and not set the session when failure" do
63
+ get :test_login, :username => 'gizmo', :password => 'opensesame!'
64
+ assigns[:user].should be_nil
65
+ session[:user_id].should be_nil
66
+ end
67
+
68
+ it "logout should clear the session" do
69
+ cookies[:remember_me_token] = nil
70
+ session[:user_id] = @user.id
71
+ get :test_logout
72
+ session[:user_id].should be_nil
73
+ end
74
+
75
+ it "logged_in? should return true if logged in" do
76
+ session[:user_id] = @user.id
77
+ subject.logged_in?.should be_true
78
+ end
79
+
80
+ it "logged_in? should return false if not logged in" do
81
+ session[:user_id] = nil
82
+ subject.logged_in?.should be_false
83
+ end
84
+
85
+ it "current_user should return the user instance if logged in" do
86
+ create_new_user
87
+ session[:user_id] = @user.id
88
+ subject.current_user.should == @user
89
+ end
90
+
91
+ it "current_user should return false if not logged in" do
92
+ session[:user_id] = nil
93
+ subject.current_user.should == false
94
+ end
95
+
96
+ specify { should respond_to(:require_login) }
97
+
98
+ it "should call the configured 'not_authenticated_action' when authenticate before_filter fails" do
99
+ session[:user_id] = nil
100
+ sorcery_controller_property_set(:not_authenticated_action, :test_not_authenticated_action)
101
+ get :test_logout
102
+ response.body.should == "test_not_authenticated_action"
103
+ end
104
+
105
+ it "require_login before_filter should save the url that the user originally wanted" do
106
+ get :some_action
107
+ session[:return_to_url].should == "http://test.host/application/some_action"
108
+ response.should redirect_to("http://test.host/")
109
+ end
110
+
111
+ it "on successful login the user should be redirected to the url he originally wanted" do
112
+ session[:return_to_url] = "http://test.host/some_action"
113
+ post :test_return_to, :username => 'gizmo', :password => 'secret'
114
+ response.should redirect_to("http://test.host/some_action")
115
+ flash[:notice].should == "haha!"
116
+ end
117
+
118
+
119
+ # --- login_user(user) ---
120
+ specify { should respond_to(:auto_login) }
121
+
122
+ it "auto_login(user) should login a user instance" do
123
+ create_new_user
124
+ session[:user_id] = nil
125
+ subject.auto_login(@user)
126
+ subject.logged_in?.should be_true
127
+ end
128
+ end
129
+
130
+ end
@@ -34,4 +34,5 @@ describe "User with no submodules (core)" do
34
34
  SubUser.fields.should include("blabla")
35
35
  end
36
36
  end
37
+
37
38
  end
@@ -30,6 +30,7 @@ shared_examples_for "rails_3_remember_me_model" do
30
30
  @user.remember_me_token.should_not be_nil
31
31
  end
32
32
 
33
+ # FIXME: assert on line 37 sometimes fails by a second
33
34
  it "should set an expiration based on 'remember_me_for' attribute" do
34
35
  sorcery_model_property_set(:remember_me_for, 2 * 60 * 60 * 24)
35
36
  @user.remember_me!
@@ -4,9 +4,9 @@ shared_examples_for "rails_3_core_model" do
4
4
  User.sorcery_config.reset!
5
5
  end
6
6
 
7
- it "should enable configuration option 'username_attribute_name'" do
8
- sorcery_model_property_set(:username_attribute_name, :email)
9
- User.sorcery_config.username_attribute_name.should equal(:email)
7
+ it "should enable configuration option 'username_attribute_names'" do
8
+ sorcery_model_property_set(:username_attribute_names, :email)
9
+ User.sorcery_config.username_attribute_names.should == [:email]
10
10
  end
11
11
 
12
12
  it "should enable configuration option 'password_attribute_name'" do
@@ -56,7 +56,6 @@ shared_examples_for "rails_3_core_model" do
56
56
  sorcery_model_property_set(:stretches, stretches)
57
57
  User.sorcery_config.stretches.should equal(stretches)
58
58
  end
59
-
60
59
  end
61
60
 
62
61
  # ----------------- PLUGIN ACTIVATED -----------------------
@@ -76,12 +75,12 @@ shared_examples_for "rails_3_core_model" do
76
75
 
77
76
  it "authenticate should return true if credentials are good" do
78
77
  create_new_user
79
- User.authenticate(@user.send(User.sorcery_config.username_attribute_name), 'secret').should be_true
78
+ User.authenticate(@user.send(User.sorcery_config.username_attribute_names.first), 'secret').should be_true
80
79
  end
81
80
 
82
81
  it "authenticate should return false if credentials are bad" do
83
82
  create_new_user
84
- User.authenticate(@user.send(User.sorcery_config.username_attribute_name), 'wrong!').should be_false
83
+ User.authenticate(@user.send(User.sorcery_config.username_attribute_names.first), 'wrong!').should be_false
85
84
  end
86
85
 
87
86
  specify { User.should respond_to(:encrypt) }
@@ -186,7 +185,7 @@ shared_examples_for "rails_3_core_model" do
186
185
  it "should work with no password encryption" do
187
186
  sorcery_model_property_set(:encryption_algorithm, :none)
188
187
  create_new_user
189
- User.authenticate(@user.send(User.sorcery_config.username_attribute_name), 'secret').should be_true
188
+ User.authenticate(@user.send(User.sorcery_config.username_attribute_names.first), 'secret').should be_true
190
189
  end
191
190
 
192
191
  it "should work with custom password encryption" do
@@ -202,7 +201,7 @@ shared_examples_for "rails_3_core_model" do
202
201
  sorcery_model_property_set(:encryption_algorithm, :custom)
203
202
  sorcery_model_property_set(:custom_encryption_provider, MyCrypto)
204
203
  create_new_user
205
- User.authenticate(@user.send(User.sorcery_config.username_attribute_name), 'secret').should be_true
204
+ User.authenticate(@user.send(User.sorcery_config.username_attribute_names.first), 'secret').should be_true
206
205
  end
207
206
 
208
207
  it "if encryption algo is aes256, it should set key to crypto provider" do
@@ -268,6 +267,35 @@ shared_examples_for "rails_3_core_model" do
268
267
  end
269
268
 
270
269
  end
270
+
271
+ describe User, "ORM adapter" do
272
+ before(:all) do
273
+ sorcery_reload!()
274
+ User.delete_all
275
+ end
276
+
277
+ before(:each) do
278
+ create_new_user
279
+ end
280
+
281
+ after(:each) do
282
+ User.delete_all
283
+ User.sorcery_config.reset!
284
+ end
285
+
286
+ it "find_by_username should work as expected" do
287
+ User.find_by_username("gizmo").should == @user
288
+ end
289
+
290
+ it "find_by_username should work as expected with multiple username attributes" do
291
+ sorcery_model_property_set(:username_attribute_names, [:username, :email])
292
+ User.find_by_username("gizmo").should == @user
293
+ end
294
+
295
+ it "find_by_email should work as expected" do
296
+ User.find_by_email("bla@bla.com").should == @user
297
+ end
298
+ end
271
299
  end
272
300
 
273
301
  shared_examples_for "external_user" do