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.
- data/Gemfile +1 -0
- data/Gemfile.lock +52 -45
- data/README.rdoc +26 -54
- data/Rakefile +26 -0
- data/VERSION +1 -1
- data/lib/generators/sorcery/USAGE +22 -0
- data/lib/generators/sorcery/install_generator.rb +71 -0
- data/lib/{sorcery/initializers → generators/sorcery/templates}/initializer.rb +82 -61
- data/lib/generators/sorcery/templates/migration/activity_logging.rb +17 -0
- data/lib/generators/sorcery/templates/migration/brute_force_protection.rb +11 -0
- data/lib/generators/{sorcery_migration/templates → sorcery/templates/migration}/core.rb +3 -3
- data/lib/generators/{sorcery_migration/templates → sorcery/templates/migration}/external.rb +1 -1
- data/lib/generators/sorcery/templates/migration/remember_me.rb +15 -0
- data/lib/generators/sorcery/templates/migration/reset_password.rb +17 -0
- data/lib/generators/sorcery/templates/migration/user_activation.rb +17 -0
- data/lib/sorcery/controller/submodules/activity_logging.rb +23 -9
- data/lib/sorcery/controller/submodules/brute_force_protection.rb +2 -1
- data/lib/sorcery/controller/submodules/external/protocols/certs/ca-bundle.crt +5182 -0
- data/lib/sorcery/controller/submodules/external/protocols/oauth2.rb +27 -8
- data/lib/sorcery/controller/submodules/external/providers/github.rb +80 -0
- data/lib/sorcery/controller/submodules/external/providers/twitter.rb +5 -0
- data/lib/sorcery/controller/submodules/external.rb +10 -3
- data/lib/sorcery/controller/submodules/http_basic_auth.rb +1 -1
- data/lib/sorcery/controller/submodules/remember_me.rb +15 -5
- data/lib/sorcery/controller/submodules/session_timeout.rb +1 -1
- data/lib/sorcery/controller.rb +59 -38
- data/lib/sorcery/crypto_providers/aes256.rb +7 -3
- data/lib/sorcery/engine.rb +1 -0
- data/lib/sorcery/model/adapters/active_record.rb +2 -1
- data/lib/sorcery/model/adapters/mongo_mapper.rb +49 -0
- data/lib/sorcery/model/adapters/mongoid.rb +7 -2
- data/lib/sorcery/model/submodules/brute_force_protection.rb +13 -3
- data/lib/sorcery/model/submodules/remember_me.rb +9 -2
- data/lib/sorcery/model/submodules/reset_password.rb +11 -2
- data/lib/sorcery/model/submodules/user_activation.rb +13 -2
- data/lib/sorcery/model/temporary_token.rb +5 -0
- data/lib/sorcery/model.rb +34 -15
- data/lib/sorcery/test_helpers/internal/rails.rb +1 -1
- data/lib/sorcery/test_helpers/rails.rb +2 -2
- data/lib/sorcery.rb +6 -7
- data/sorcery.gemspec +86 -203
- data/spec/Gemfile.lock +23 -12
- data/spec/README.md +31 -0
- data/spec/rails3/Gemfile +3 -1
- data/spec/rails3/Gemfile.lock +45 -28
- data/spec/rails3/app/controllers/application_controller.rb +40 -22
- data/spec/rails3/app/views/application/index.html.erb +17 -0
- data/spec/rails3/spec/controller_activity_logging_spec.rb +23 -0
- data/spec/rails3/spec/controller_oauth2_spec.rb +59 -16
- data/spec/rails3/spec/controller_remember_me_spec.rb +37 -6
- data/spec/rails3/spec/controller_spec.rb +30 -0
- data/spec/rails3/spec/integration_spec.rb +23 -0
- data/spec/rails3/spec/spec_helper.rb +6 -5
- data/spec/rails3_mongo_mapper/.gitignore +4 -0
- data/spec/rails3_mongo_mapper/.rspec +1 -0
- data/spec/{sinatra_modular → rails3_mongo_mapper}/Gemfile +5 -5
- data/spec/rails3_mongo_mapper/Gemfile.lock +159 -0
- data/spec/{sinatra → rails3_mongo_mapper}/Rakefile +3 -3
- data/spec/rails3_mongo_mapper/app/controllers/application_controller.rb +108 -0
- data/spec/rails3_mongo_mapper/app/helpers/application_helper.rb +2 -0
- data/spec/rails3_mongo_mapper/app/models/authentication.rb +6 -0
- data/spec/rails3_mongo_mapper/app/models/user.rb +5 -0
- data/spec/rails3_mongo_mapper/app/views/layouts/application.html.erb +14 -0
- data/spec/rails3_mongo_mapper/app/views/sorcery_mailer/activation_email.html.erb +17 -0
- data/spec/rails3_mongo_mapper/app/views/sorcery_mailer/activation_email.text.erb +9 -0
- data/spec/rails3_mongo_mapper/app/views/sorcery_mailer/activation_success_email.html.erb +17 -0
- data/spec/rails3_mongo_mapper/app/views/sorcery_mailer/activation_success_email.text.erb +9 -0
- data/spec/rails3_mongo_mapper/app/views/sorcery_mailer/reset_password_email.html.erb +16 -0
- data/spec/rails3_mongo_mapper/app/views/sorcery_mailer/reset_password_email.text.erb +8 -0
- data/spec/rails3_mongo_mapper/config/application.rb +51 -0
- data/spec/rails3_mongo_mapper/config/boot.rb +13 -0
- data/spec/rails3_mongo_mapper/config/environment.rb +5 -0
- data/spec/rails3_mongo_mapper/config/environments/development.rb +30 -0
- data/spec/rails3_mongo_mapper/config/environments/in_memory.rb +0 -0
- data/spec/rails3_mongo_mapper/config/environments/production.rb +49 -0
- data/spec/rails3_mongo_mapper/config/environments/test.rb +35 -0
- data/spec/rails3_mongo_mapper/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/rails3_mongo_mapper/config/initializers/inflections.rb +10 -0
- data/spec/rails3_mongo_mapper/config/initializers/mime_types.rb +5 -0
- data/spec/rails3_mongo_mapper/config/initializers/mongo.rb +2 -0
- data/spec/rails3_mongo_mapper/config/initializers/secret_token.rb +7 -0
- data/spec/rails3_mongo_mapper/config/initializers/session_store.rb +8 -0
- data/spec/rails3_mongo_mapper/config/locales/en.yml +5 -0
- data/spec/rails3_mongo_mapper/config/routes.rb +59 -0
- data/spec/rails3_mongo_mapper/config.ru +4 -0
- data/spec/rails3_mongo_mapper/db/schema.rb +23 -0
- data/spec/rails3_mongo_mapper/db/seeds.rb +7 -0
- data/spec/rails3_mongo_mapper/lib/tasks/.gitkeep +0 -0
- data/spec/rails3_mongo_mapper/public/404.html +26 -0
- data/spec/rails3_mongo_mapper/public/422.html +26 -0
- data/spec/rails3_mongo_mapper/public/500.html +26 -0
- data/spec/rails3_mongo_mapper/public/favicon.ico +0 -0
- data/spec/rails3_mongo_mapper/public/images/rails.png +0 -0
- data/spec/rails3_mongo_mapper/public/javascripts/application.js +2 -0
- data/spec/rails3_mongo_mapper/public/javascripts/controls.js +965 -0
- data/spec/rails3_mongo_mapper/public/javascripts/dragdrop.js +974 -0
- data/spec/rails3_mongo_mapper/public/javascripts/effects.js +1123 -0
- data/spec/rails3_mongo_mapper/public/javascripts/prototype.js +6001 -0
- data/spec/rails3_mongo_mapper/public/javascripts/rails.js +175 -0
- data/spec/rails3_mongo_mapper/public/robots.txt +5 -0
- data/spec/rails3_mongo_mapper/public/stylesheets/.gitkeep +0 -0
- data/spec/rails3_mongo_mapper/script/rails +6 -0
- data/spec/{sinatra → rails3_mongo_mapper}/spec/controller_spec.rb +51 -41
- data/spec/rails3_mongo_mapper/spec/spec_helper.orig.rb +27 -0
- data/spec/rails3_mongo_mapper/spec/spec_helper.rb +55 -0
- data/spec/rails3_mongo_mapper/spec/user_activation_spec.rb +9 -0
- data/spec/rails3_mongo_mapper/spec/user_activity_logging_spec.rb +8 -0
- data/spec/rails3_mongo_mapper/spec/user_brute_force_protection_spec.rb +8 -0
- data/spec/rails3_mongo_mapper/spec/user_oauth_spec.rb +8 -0
- data/spec/rails3_mongo_mapper/spec/user_remember_me_spec.rb +8 -0
- data/spec/rails3_mongo_mapper/spec/user_reset_password_spec.rb +8 -0
- data/spec/rails3_mongo_mapper/spec/user_spec.rb +37 -0
- data/spec/rails3_mongo_mapper/vendor/plugins/.gitkeep +0 -0
- data/spec/rails3_mongoid/Gemfile +1 -1
- data/spec/rails3_mongoid/Gemfile.lock +41 -34
- data/spec/rails3_mongoid/spec/controller_activity_logging_spec.rb +98 -0
- data/spec/rails3_mongoid/spec/controller_spec.rb +130 -0
- data/spec/rails3_mongoid/spec/user_spec.rb +1 -0
- data/spec/shared_examples/user_remember_me_shared_examples.rb +1 -0
- data/spec/shared_examples/user_shared_examples.rb +36 -8
- metadata +128 -234
- data/lib/generators/sorcery_migration/sorcery_migration_generator.rb +0 -24
- data/lib/generators/sorcery_migration/templates/activity_logging.rb +0 -17
- data/lib/generators/sorcery_migration/templates/brute_force_protection.rb +0 -11
- data/lib/generators/sorcery_migration/templates/remember_me.rb +0 -15
- data/lib/generators/sorcery_migration/templates/reset_password.rb +0 -13
- data/lib/generators/sorcery_migration/templates/user_activation.rb +0 -17
- data/lib/sorcery/controller/adapters/sinatra.rb +0 -104
- data/lib/sorcery/sinatra.rb +0 -4
- data/lib/sorcery/test_helpers/internal/sinatra.rb +0 -74
- data/lib/sorcery/test_helpers/internal/sinatra_modular.rb +0 -74
- data/lib/sorcery/test_helpers/sinatra.rb +0 -88
- data/spec/rails3/Rakefile.unused +0 -7
- data/spec/rails3/public/index.html +0 -239
- data/spec/sinatra/Gemfile +0 -15
- data/spec/sinatra/Gemfile.lock +0 -117
- data/spec/sinatra/authentication.rb +0 -3
- data/spec/sinatra/db/migrate/activation/20101224223622_add_activation_to_users.rb +0 -17
- data/spec/sinatra/db/migrate/activity_logging/20101224223624_add_activity_logging_to_users.rb +0 -17
- data/spec/sinatra/db/migrate/brute_force_protection/20101224223626_add_brute_force_protection_to_users.rb +0 -11
- data/spec/sinatra/db/migrate/core/20101224223620_create_users.rb +0 -16
- data/spec/sinatra/db/migrate/external/20101224223628_create_authentications.rb +0 -14
- data/spec/sinatra/db/migrate/remember_me/20101224223623_add_remember_me_token_to_users.rb +0 -15
- data/spec/sinatra/db/migrate/reset_password/20101224223622_add_reset_password_to_users.rb +0 -13
- data/spec/sinatra/filters.rb +0 -27
- data/spec/sinatra/modular.rb +0 -157
- data/spec/sinatra/myapp.rb +0 -133
- data/spec/sinatra/spec/controller_activity_logging_spec.rb +0 -85
- data/spec/sinatra/spec/controller_brute_force_protection_spec.rb +0 -70
- data/spec/sinatra/spec/controller_http_basic_auth_spec.rb +0 -53
- data/spec/sinatra/spec/controller_oauth2_spec.rb +0 -99
- data/spec/sinatra/spec/controller_oauth_spec.rb +0 -100
- data/spec/sinatra/spec/controller_remember_me_spec.rb +0 -64
- data/spec/sinatra/spec/controller_session_timeout_spec.rb +0 -57
- data/spec/sinatra/spec/spec_helper.rb +0 -45
- data/spec/sinatra/user.rb +0 -6
- data/spec/sinatra/views/test_login.erb +0 -4
- data/spec/sinatra_modular/Gemfile.lock +0 -117
- data/spec/sinatra_modular/Rakefile +0 -11
- data/spec/sinatra_modular/authentication.rb +0 -3
- data/spec/sinatra_modular/db/migrate/activation/20101224223622_add_activation_to_users.rb +0 -17
- data/spec/sinatra_modular/db/migrate/activity_logging/20101224223624_add_activity_logging_to_users.rb +0 -17
- data/spec/sinatra_modular/db/migrate/brute_force_protection/20101224223626_add_brute_force_protection_to_users.rb +0 -11
- data/spec/sinatra_modular/db/migrate/core/20101224223620_create_users.rb +0 -16
- data/spec/sinatra_modular/db/migrate/external/20101224223628_create_authentications.rb +0 -14
- data/spec/sinatra_modular/db/migrate/remember_me/20101224223623_add_remember_me_token_to_users.rb +0 -15
- data/spec/sinatra_modular/db/migrate/reset_password/20101224223622_add_reset_password_to_users.rb +0 -13
- data/spec/sinatra_modular/filters.rb +0 -27
- data/spec/sinatra_modular/modular.rb +0 -157
- data/spec/sinatra_modular/myapp.rb +0 -133
- data/spec/sinatra_modular/sorcery_mailer.rb +0 -25
- data/spec/sinatra_modular/spec_modular/controller_activity_logging_spec.rb +0 -85
- data/spec/sinatra_modular/spec_modular/controller_brute_force_protection_spec.rb +0 -70
- data/spec/sinatra_modular/spec_modular/controller_http_basic_auth_spec.rb +0 -53
- data/spec/sinatra_modular/spec_modular/controller_oauth2_spec.rb +0 -99
- data/spec/sinatra_modular/spec_modular/controller_oauth_spec.rb +0 -100
- data/spec/sinatra_modular/spec_modular/controller_remember_me_spec.rb +0 -64
- data/spec/sinatra_modular/spec_modular/controller_session_timeout_spec.rb +0 -57
- data/spec/sinatra_modular/spec_modular/controller_spec.rb +0 -116
- data/spec/sinatra_modular/spec_modular/spec.opts +0 -2
- data/spec/sinatra_modular/spec_modular/spec_helper.rb +0 -51
- data/spec/sinatra_modular/user.rb +0 -6
- data/spec/sinatra_modular/views/test_login.erb +0 -4
- /data/spec/{sinatra → rails3_mongo_mapper/app/mailers}/sorcery_mailer.rb +0 -0
- /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.
|
|
4
|
+
sorcery (0.7.0)
|
|
5
5
|
bcrypt-ruby (~> 3.0.0)
|
|
6
|
-
|
|
7
|
-
oauth (
|
|
8
|
-
|
|
9
|
-
oauth2 (
|
|
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.
|
|
44
|
-
bcrypt-ruby (3.0.
|
|
45
|
-
bson (1.
|
|
46
|
-
bson_ext (1.
|
|
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.
|
|
49
|
-
diff-lcs (1.1.
|
|
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 (
|
|
56
|
-
i18n (0.
|
|
57
|
-
linecache19 (0.5.
|
|
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.
|
|
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.
|
|
66
|
-
bson (
|
|
67
|
-
|
|
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
|
-
|
|
79
|
-
|
|
80
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
125
|
+
ruby_core_source (0.1.5)
|
|
120
126
|
archive-tar-minitar (>= 0.5.2)
|
|
121
|
-
simplecov (0.
|
|
122
|
-
|
|
123
|
-
|
|
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.
|
|
133
|
+
treetop (1.4.10)
|
|
134
|
+
polyglot
|
|
127
135
|
polyglot (>= 0.3.1)
|
|
128
|
-
tzinfo (0.3.
|
|
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
|
|
@@ -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 '
|
|
8
|
-
sorcery_model_property_set(:
|
|
9
|
-
User.sorcery_config.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|