sorcery 0.17.0 → 0.18.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -1
- data/README.md +8 -5
- data/lib/generators/sorcery/helpers.rb +1 -1
- data/lib/generators/sorcery/install_generator.rb +9 -18
- data/lib/generators/sorcery/templates/initializer.rb +24 -10
- data/lib/sorcery/adapters/active_record_adapter.rb +12 -14
- data/lib/sorcery/adapters/mongoid_adapter.rb +6 -8
- data/lib/sorcery/controller/config.rb +27 -29
- data/lib/sorcery/controller/submodules/activity_logging.rb +4 -7
- data/lib/sorcery/controller/submodules/brute_force_protection.rb +4 -1
- data/lib/sorcery/controller/submodules/external.rb +11 -11
- data/lib/sorcery/controller/submodules/http_basic_auth.rb +7 -2
- data/lib/sorcery/controller/submodules/remember_me.rb +2 -1
- data/lib/sorcery/controller/submodules/session_timeout.rb +2 -2
- data/lib/sorcery/controller.rb +36 -18
- data/lib/sorcery/crypto_providers/aes256.rb +4 -2
- data/lib/sorcery/crypto_providers/bcrypt.rb +2 -1
- data/lib/sorcery/crypto_providers/md5.rb +1 -0
- data/lib/sorcery/crypto_providers/sha1.rb +1 -0
- data/lib/sorcery/crypto_providers/sha256.rb +1 -0
- data/lib/sorcery/crypto_providers/sha512.rb +1 -0
- data/lib/sorcery/engine.rb +6 -4
- data/lib/sorcery/errors.rb +10 -0
- data/lib/sorcery/model/config.rb +20 -31
- data/lib/sorcery/model/submodules/activity_logging.rb +8 -6
- data/lib/sorcery/model/submodules/brute_force_protection.rb +16 -14
- data/lib/sorcery/model/submodules/external.rb +8 -10
- data/lib/sorcery/model/submodules/magic_login.rb +8 -4
- data/lib/sorcery/model/submodules/remember_me.rb +3 -3
- data/lib/sorcery/model/submodules/reset_password.rb +21 -13
- data/lib/sorcery/model/submodules/user_activation.rb +19 -17
- data/lib/sorcery/model/temporary_token.rb +5 -5
- data/lib/sorcery/model.rb +21 -25
- data/lib/sorcery/providers/base.rb +1 -1
- data/lib/sorcery/providers/facebook.rb +2 -2
- data/lib/sorcery/providers/github.rb +3 -3
- data/lib/sorcery/providers/heroku.rb +1 -2
- data/lib/sorcery/providers/jira.rb +3 -2
- data/lib/sorcery/providers/line.rb +2 -4
- data/lib/sorcery/providers/microsoft.rb +1 -1
- data/lib/sorcery/providers/twitter.rb +2 -2
- data/lib/sorcery/providers/vk.rb +4 -4
- data/lib/sorcery/providers/xing.rb +3 -2
- data/lib/sorcery/test_helpers/internal/rails.rb +5 -22
- data/lib/sorcery/test_helpers/internal.rb +4 -6
- data/lib/sorcery/test_helpers/rails/integration.rb +1 -1
- data/lib/sorcery/test_helpers/rails/request.rb +1 -1
- data/lib/sorcery/version.rb +1 -1
- data/lib/sorcery.rb +6 -1
- metadata +21 -150
- data/.devcontainer/Dockerfile +0 -10
- data/.devcontainer/devcontainer.json +0 -29
- data/.devcontainer/postcreate.sh +0 -4
- data/.document +0 -5
- data/.github/FUNDING.yml +0 -1
- data/.github/ISSUE_TEMPLATE.md +0 -24
- data/.github/PULL_REQUEST_TEMPLATE.md +0 -7
- data/.github/workflows/ruby.yml +0 -54
- data/.gitignore +0 -60
- data/.rspec +0 -1
- data/.rubocop.yml +0 -55
- data/.rubocop_todo.yml +0 -163
- data/CODE_OF_CONDUCT.md +0 -14
- data/Gemfile +0 -8
- data/MAINTAINING.md +0 -64
- data/Rakefile +0 -8
- data/SECURITY.md +0 -19
- data/gemfiles/rails_61.gemfile +0 -7
- data/gemfiles/rails_70.gemfile +0 -7
- data/gemfiles/rails_71.gemfile +0 -7
- data/sorcery.gemspec +0 -49
- data/spec/active_record/user_activation_spec.rb +0 -17
- data/spec/active_record/user_activity_logging_spec.rb +0 -15
- data/spec/active_record/user_brute_force_protection_spec.rb +0 -15
- data/spec/active_record/user_magic_login_spec.rb +0 -15
- data/spec/active_record/user_oauth_spec.rb +0 -15
- data/spec/active_record/user_remember_me_spec.rb +0 -15
- data/spec/active_record/user_reset_password_spec.rb +0 -15
- data/spec/active_record/user_spec.rb +0 -27
- data/spec/controllers/controller_activity_logging_spec.rb +0 -113
- data/spec/controllers/controller_brute_force_protection_spec.rb +0 -41
- data/spec/controllers/controller_http_basic_auth_spec.rb +0 -67
- data/spec/controllers/controller_oauth2_spec.rb +0 -568
- data/spec/controllers/controller_oauth_spec.rb +0 -266
- data/spec/controllers/controller_remember_me_spec.rb +0 -130
- data/spec/controllers/controller_session_timeout_spec.rb +0 -168
- data/spec/controllers/controller_spec.rb +0 -200
- data/spec/orm/active_record.rb +0 -21
- data/spec/providers/example_provider_spec.rb +0 -17
- data/spec/providers/example_spec.rb +0 -17
- data/spec/providers/examples_spec.rb +0 -17
- data/spec/providers/vk_spec.rb +0 -42
- data/spec/rails_app/app/active_record/authentication.rb +0 -3
- data/spec/rails_app/app/active_record/user.rb +0 -5
- data/spec/rails_app/app/active_record/user_provider.rb +0 -3
- data/spec/rails_app/app/assets/config/manifest.js +0 -1
- data/spec/rails_app/app/controllers/application_controller.rb +0 -2
- data/spec/rails_app/app/controllers/sorcery_controller.rb +0 -489
- data/spec/rails_app/app/helpers/application_helper.rb +0 -2
- data/spec/rails_app/app/mailers/sorcery_mailer.rb +0 -38
- data/spec/rails_app/app/views/application/index.html.erb +0 -17
- data/spec/rails_app/app/views/layouts/application.html.erb +0 -14
- data/spec/rails_app/app/views/sorcery_mailer/activation_email.html.erb +0 -17
- data/spec/rails_app/app/views/sorcery_mailer/activation_email.text.erb +0 -9
- data/spec/rails_app/app/views/sorcery_mailer/activation_needed_email.html.erb +0 -17
- data/spec/rails_app/app/views/sorcery_mailer/activation_success_email.html.erb +0 -17
- data/spec/rails_app/app/views/sorcery_mailer/activation_success_email.text.erb +0 -9
- data/spec/rails_app/app/views/sorcery_mailer/magic_login_email.html.erb +0 -13
- data/spec/rails_app/app/views/sorcery_mailer/magic_login_email.text.erb +0 -6
- data/spec/rails_app/app/views/sorcery_mailer/reset_password_email.html.erb +0 -16
- data/spec/rails_app/app/views/sorcery_mailer/reset_password_email.text.erb +0 -8
- data/spec/rails_app/app/views/sorcery_mailer/send_unlock_token_email.text.erb +0 -1
- data/spec/rails_app/config/application.rb +0 -61
- data/spec/rails_app/config/boot.rb +0 -4
- data/spec/rails_app/config/database.yml +0 -22
- data/spec/rails_app/config/environment.rb +0 -5
- data/spec/rails_app/config/environments/test.rb +0 -37
- data/spec/rails_app/config/initializers/backtrace_silencers.rb +0 -7
- data/spec/rails_app/config/initializers/compatible_legacy_migration.rb +0 -11
- data/spec/rails_app/config/initializers/inflections.rb +0 -10
- data/spec/rails_app/config/initializers/mime_types.rb +0 -5
- data/spec/rails_app/config/initializers/session_store.rb +0 -12
- data/spec/rails_app/config/locales/en.yml +0 -5
- data/spec/rails_app/config/routes.rb +0 -81
- data/spec/rails_app/config/secrets.yml +0 -4
- data/spec/rails_app/config.ru +0 -4
- data/spec/rails_app/db/migrate/activation/20101224223622_add_activation_to_users.rb +0 -17
- data/spec/rails_app/db/migrate/activity_logging/20101224223624_add_activity_logging_to_users.rb +0 -19
- data/spec/rails_app/db/migrate/brute_force_protection/20101224223626_add_brute_force_protection_to_users.rb +0 -13
- data/spec/rails_app/db/migrate/core/20101224223620_create_users.rb +0 -16
- data/spec/rails_app/db/migrate/external/20101224223628_create_authentications_and_user_providers.rb +0 -22
- data/spec/rails_app/db/migrate/invalidate_active_sessions/20180221093235_add_invalidate_active_sessions_before_to_users.rb +0 -9
- data/spec/rails_app/db/migrate/magic_login/20170924151831_add_magic_login_to_users.rb +0 -17
- data/spec/rails_app/db/migrate/remember_me/20101224223623_add_remember_me_token_to_users.rb +0 -15
- data/spec/rails_app/db/migrate/reset_password/20101224223622_add_reset_password_to_users.rb +0 -15
- data/spec/rails_app/db/schema.rb +0 -21
- data/spec/rails_app/db/seeds.rb +0 -7
- data/spec/shared_examples/user_activation_shared_examples.rb +0 -361
- data/spec/shared_examples/user_activity_logging_shared_examples.rb +0 -106
- data/spec/shared_examples/user_brute_force_protection_shared_examples.rb +0 -151
- data/spec/shared_examples/user_magic_login_shared_examples.rb +0 -150
- data/spec/shared_examples/user_oauth_shared_examples.rb +0 -33
- data/spec/shared_examples/user_remember_me_shared_examples.rb +0 -129
- data/spec/shared_examples/user_reset_password_shared_examples.rb +0 -370
- data/spec/shared_examples/user_shared_examples.rb +0 -678
- data/spec/sorcery_crypto_providers_spec.rb +0 -245
- data/spec/sorcery_temporary_token_spec.rb +0 -27
- data/spec/spec.opts +0 -2
- data/spec/spec_helper.rb +0 -50
- data/spec/support/migration_helper.rb +0 -29
- data/spec/support/providers/example.rb +0 -11
- data/spec/support/providers/example_provider.rb +0 -11
- data/spec/support/providers/examples.rb +0 -11
|
@@ -1,245 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
|
|
3
|
-
describe 'Crypto Providers wrappers' do
|
|
4
|
-
describe Sorcery::CryptoProviders::MD5 do
|
|
5
|
-
after(:each) do
|
|
6
|
-
Sorcery::CryptoProviders::MD5.reset!
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
it 'encrypt works via wrapper like normal lib' do
|
|
10
|
-
expect(Sorcery::CryptoProviders::MD5.encrypt('Noam Ben-Ari')).to eq Digest::MD5.hexdigest('Noam Ben-Ari')
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
it 'works with multiple stretches' do
|
|
14
|
-
Sorcery::CryptoProviders::MD5.stretches = 3
|
|
15
|
-
expect(Sorcery::CryptoProviders::MD5.encrypt('Noam Ben-Ari')).to eq Digest::MD5.hexdigest(Digest::MD5.hexdigest(Digest::MD5.hexdigest('Noam Ben-Ari')))
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
it 'matches? returns true when matches' do
|
|
19
|
-
expect(Sorcery::CryptoProviders::MD5.matches?(Digest::MD5.hexdigest('Noam Ben-Ari'), 'Noam Ben-Ari')).to be true
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
it 'matches? returns false when no match' do
|
|
23
|
-
expect(Sorcery::CryptoProviders::MD5.matches?(Digest::MD5.hexdigest('Noam Ben-Ari'), 'Some Dude')).to be false
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
describe Sorcery::CryptoProviders::SHA1 do
|
|
28
|
-
before(:all) do
|
|
29
|
-
@digest = 'Noam Ben-Ari'
|
|
30
|
-
Sorcery::CryptoProviders::SHA1.stretches.times { @digest = Digest::SHA1.hexdigest(@digest) }
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
after(:each) do
|
|
34
|
-
Sorcery::CryptoProviders::SHA1.reset!
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
it 'encrypt works via wrapper like normal lib' do
|
|
38
|
-
expect(Sorcery::CryptoProviders::SHA1.encrypt('Noam Ben-Ari')).to eq @digest
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
it 'works with multiple stretches' do
|
|
42
|
-
Sorcery::CryptoProviders::SHA1.stretches = 3
|
|
43
|
-
expect(Sorcery::CryptoProviders::SHA1.encrypt('Noam Ben-Ari')).to eq Digest::SHA1.hexdigest(Digest::SHA1.hexdigest(Digest::SHA1.hexdigest('Noam Ben-Ari')))
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
it 'matches? returns true when matches' do
|
|
47
|
-
expect(Sorcery::CryptoProviders::SHA1.matches?(@digest, 'Noam Ben-Ari')).to be true
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
it 'matches? returns false when no match' do
|
|
51
|
-
expect(Sorcery::CryptoProviders::SHA1.matches?(@digest, 'Some Dude')).to be false
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
it 'matches password encrypted using salt and join token from upstream' do
|
|
55
|
-
Sorcery::CryptoProviders::SHA1.join_token = 'test'
|
|
56
|
-
expect(Sorcery::CryptoProviders::SHA1.encrypt(%w[password gq18WBnJYNh2arkC1kgH])).to eq '894b5bf1643b8d0e1b2eaddb22426be7036dab70'
|
|
57
|
-
end
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
describe Sorcery::CryptoProviders::SHA256 do
|
|
61
|
-
before(:all) do
|
|
62
|
-
@digest = 'Noam Ben-Ari'
|
|
63
|
-
Sorcery::CryptoProviders::SHA256.stretches.times { @digest = Digest::SHA256.hexdigest(@digest) }
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
after(:each) do
|
|
67
|
-
Sorcery::CryptoProviders::SHA256.reset!
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
it 'encrypt works via wrapper like normal lib' do
|
|
71
|
-
expect(Sorcery::CryptoProviders::SHA256.encrypt('Noam Ben-Ari')).to eq @digest
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
it 'works with multiple stretches' do
|
|
75
|
-
Sorcery::CryptoProviders::SHA256.stretches = 3
|
|
76
|
-
expect(Sorcery::CryptoProviders::SHA256.encrypt('Noam Ben-Ari')).to eq Digest::SHA256.hexdigest(Digest::SHA256.hexdigest(Digest::SHA256.hexdigest('Noam Ben-Ari')))
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
it 'matches? returns true when matches' do
|
|
80
|
-
expect(Sorcery::CryptoProviders::SHA256.matches?(@digest, 'Noam Ben-Ari')).to be true
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
it 'matches? returns false when no match' do
|
|
84
|
-
expect(Sorcery::CryptoProviders::SHA256.matches?(@digest, 'Some Dude')).to be false
|
|
85
|
-
end
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
describe Sorcery::CryptoProviders::SHA512 do
|
|
89
|
-
before(:all) do
|
|
90
|
-
@digest = 'Noam Ben-Ari'
|
|
91
|
-
Sorcery::CryptoProviders::SHA512.stretches.times { @digest = Digest::SHA512.hexdigest(@digest) }
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
after(:each) do
|
|
95
|
-
Sorcery::CryptoProviders::SHA512.reset!
|
|
96
|
-
end
|
|
97
|
-
|
|
98
|
-
it 'encrypt works via wrapper like normal lib' do
|
|
99
|
-
expect(Sorcery::CryptoProviders::SHA512.encrypt('Noam Ben-Ari')).to eq @digest
|
|
100
|
-
end
|
|
101
|
-
|
|
102
|
-
it 'works with multiple stretches' do
|
|
103
|
-
Sorcery::CryptoProviders::SHA512.stretches = 3
|
|
104
|
-
expect(Sorcery::CryptoProviders::SHA512.encrypt('Noam Ben-Ari')).to eq Digest::SHA512.hexdigest(Digest::SHA512.hexdigest(Digest::SHA512.hexdigest('Noam Ben-Ari')))
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
it 'matches? returns true when matches' do
|
|
108
|
-
expect(Sorcery::CryptoProviders::SHA512.matches?(@digest, 'Noam Ben-Ari')).to be true
|
|
109
|
-
end
|
|
110
|
-
|
|
111
|
-
it 'matches? returns false when no match' do
|
|
112
|
-
expect(Sorcery::CryptoProviders::SHA512.matches?(@digest, 'Some Dude')).to be false
|
|
113
|
-
end
|
|
114
|
-
end
|
|
115
|
-
|
|
116
|
-
describe Sorcery::CryptoProviders::AES256 do
|
|
117
|
-
before(:all) do
|
|
118
|
-
aes = OpenSSL::Cipher.new('AES-256-ECB')
|
|
119
|
-
aes.encrypt
|
|
120
|
-
@key = 'asd234dfs423fddsmndsflktsdf32343'
|
|
121
|
-
aes.key = @key
|
|
122
|
-
@digest = 'Noam Ben-Ari'
|
|
123
|
-
@digest = [aes.update(@digest) + aes.final].pack('m').chomp
|
|
124
|
-
Sorcery::CryptoProviders::AES256.key = @key
|
|
125
|
-
end
|
|
126
|
-
|
|
127
|
-
it 'encrypt works via wrapper like normal lib' do
|
|
128
|
-
expect(Sorcery::CryptoProviders::AES256.encrypt('Noam Ben-Ari')).to eq @digest
|
|
129
|
-
end
|
|
130
|
-
|
|
131
|
-
it 'matches? returns true when matches' do
|
|
132
|
-
expect(Sorcery::CryptoProviders::AES256.matches?(@digest, 'Noam Ben-Ari')).to be true
|
|
133
|
-
end
|
|
134
|
-
|
|
135
|
-
it 'matches? returns false when no match' do
|
|
136
|
-
expect(Sorcery::CryptoProviders::AES256.matches?(@digest, 'Some Dude')).to be false
|
|
137
|
-
end
|
|
138
|
-
|
|
139
|
-
it 'can be decrypted' do
|
|
140
|
-
aes = OpenSSL::Cipher.new('AES-256-ECB')
|
|
141
|
-
aes.decrypt
|
|
142
|
-
aes.key = @key
|
|
143
|
-
expect(aes.update(@digest.unpack('m').first) + aes.final).to eq 'Noam Ben-Ari'
|
|
144
|
-
end
|
|
145
|
-
end
|
|
146
|
-
|
|
147
|
-
describe Sorcery::CryptoProviders::BCrypt do
|
|
148
|
-
before(:all) do
|
|
149
|
-
Sorcery::CryptoProviders::BCrypt.cost = 1
|
|
150
|
-
@digest = BCrypt::Password.create('Noam Ben-Ari', cost: Sorcery::CryptoProviders::BCrypt.cost)
|
|
151
|
-
@tokens = %w[password gq18WBnJYNh2arkC1kgH]
|
|
152
|
-
end
|
|
153
|
-
|
|
154
|
-
after(:each) do
|
|
155
|
-
Sorcery::CryptoProviders::BCrypt.reset!
|
|
156
|
-
end
|
|
157
|
-
|
|
158
|
-
it 'is comparable with original secret' do
|
|
159
|
-
expect(BCrypt::Password.new(Sorcery::CryptoProviders::BCrypt.encrypt('Noam Ben-Ari'))).to eq 'Noam Ben-Ari'
|
|
160
|
-
end
|
|
161
|
-
|
|
162
|
-
it 'works with multiple costs' do
|
|
163
|
-
Sorcery::CryptoProviders::BCrypt.cost = 3
|
|
164
|
-
expect(BCrypt::Password.new(Sorcery::CryptoProviders::BCrypt.encrypt('Noam Ben-Ari'))).to eq 'Noam Ben-Ari'
|
|
165
|
-
end
|
|
166
|
-
|
|
167
|
-
it 'matches? returns true when matches' do
|
|
168
|
-
expect(Sorcery::CryptoProviders::BCrypt.matches?(@digest, 'Noam Ben-Ari')).to be true
|
|
169
|
-
end
|
|
170
|
-
|
|
171
|
-
it 'matches? returns false when no match' do
|
|
172
|
-
expect(Sorcery::CryptoProviders::BCrypt.matches?(@digest, 'Some Dude')).to be false
|
|
173
|
-
end
|
|
174
|
-
|
|
175
|
-
it 'respond_to?(:stretches) returns true' do
|
|
176
|
-
expect(Sorcery::CryptoProviders::BCrypt.respond_to?(:stretches)).to be true
|
|
177
|
-
end
|
|
178
|
-
|
|
179
|
-
it 'sets cost when stretches is set' do
|
|
180
|
-
Sorcery::CryptoProviders::BCrypt.stretches = 4
|
|
181
|
-
|
|
182
|
-
# stubbed in Sorcery::TestHelpers::Internal
|
|
183
|
-
expect(Sorcery::CryptoProviders::BCrypt.cost).to eq 1
|
|
184
|
-
end
|
|
185
|
-
|
|
186
|
-
it 'matches token encrypted with salt from upstream' do
|
|
187
|
-
# note: actual comparison is done by BCrypt::Password#==(raw_token)
|
|
188
|
-
expect(Sorcery::CryptoProviders::BCrypt.encrypt(@tokens)).to eq @tokens.flatten.join
|
|
189
|
-
end
|
|
190
|
-
|
|
191
|
-
it 'respond_to?(:pepper) returns true' do
|
|
192
|
-
expect(Sorcery::CryptoProviders::BCrypt.respond_to?(:pepper)).to be true
|
|
193
|
-
end
|
|
194
|
-
|
|
195
|
-
context 'when pepper is provided' do
|
|
196
|
-
before(:each) do
|
|
197
|
-
Sorcery::CryptoProviders::BCrypt.pepper = 'pepper'
|
|
198
|
-
@digest = Sorcery::CryptoProviders::BCrypt.encrypt(@tokens) # a BCrypt::Password object
|
|
199
|
-
end
|
|
200
|
-
|
|
201
|
-
it 'matches token encrypted with salt and pepper from upstream' do
|
|
202
|
-
# note: actual comparison is done by BCrypt::Password#==(raw_token)
|
|
203
|
-
expect(@digest).to eq @tokens.flatten.join.concat('pepper')
|
|
204
|
-
end
|
|
205
|
-
|
|
206
|
-
it 'matches? returns true when matches' do
|
|
207
|
-
expect(Sorcery::CryptoProviders::BCrypt.matches?(@digest, *@tokens)).to be true
|
|
208
|
-
end
|
|
209
|
-
|
|
210
|
-
it 'matches? returns false when pepper is replaced with empty string' do
|
|
211
|
-
Sorcery::CryptoProviders::BCrypt.pepper = ''
|
|
212
|
-
expect(Sorcery::CryptoProviders::BCrypt.matches?(@digest, *@tokens)).to be false
|
|
213
|
-
end
|
|
214
|
-
|
|
215
|
-
it 'matches? returns false when no match' do
|
|
216
|
-
expect(Sorcery::CryptoProviders::BCrypt.matches?(@digest, 'a_random_incorrect_password')).to be false
|
|
217
|
-
end
|
|
218
|
-
end
|
|
219
|
-
|
|
220
|
-
context "when pepper is an empty string (default)" do
|
|
221
|
-
before(:each) do
|
|
222
|
-
Sorcery::CryptoProviders::BCrypt.pepper = ''
|
|
223
|
-
@digest = Sorcery::CryptoProviders::BCrypt.encrypt(@tokens) # a BCrypt::Password object
|
|
224
|
-
end
|
|
225
|
-
|
|
226
|
-
# make sure the default pepper '' does nothing
|
|
227
|
-
it 'matches token encrypted with salt only (without pepper)' do
|
|
228
|
-
expect(@digest).to eq @tokens.flatten.join # keep consistency with the older versions of #join_token
|
|
229
|
-
end
|
|
230
|
-
|
|
231
|
-
it 'matches? returns true when matches' do
|
|
232
|
-
expect(Sorcery::CryptoProviders::BCrypt.matches?(@digest, *@tokens)).to be true
|
|
233
|
-
end
|
|
234
|
-
|
|
235
|
-
it 'matches? returns false when pepper has changed' do
|
|
236
|
-
Sorcery::CryptoProviders::BCrypt.pepper = 'a new pepper'
|
|
237
|
-
expect(Sorcery::CryptoProviders::BCrypt.matches?(@digest, *@tokens)).to be false
|
|
238
|
-
end
|
|
239
|
-
|
|
240
|
-
it 'matches? returns false when no match' do
|
|
241
|
-
expect(Sorcery::CryptoProviders::BCrypt.matches?(@digest, 'a_random_incorrect_password')).to be false
|
|
242
|
-
end
|
|
243
|
-
end
|
|
244
|
-
end
|
|
245
|
-
end
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
|
|
3
|
-
describe Sorcery::Model::TemporaryToken do
|
|
4
|
-
describe '.generate_random_token' do
|
|
5
|
-
before do
|
|
6
|
-
sorcery_reload!
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
subject { Sorcery::Model::TemporaryToken.generate_random_token.length }
|
|
10
|
-
|
|
11
|
-
context 'token_randomness is 3' do
|
|
12
|
-
before do
|
|
13
|
-
sorcery_model_property_set(:token_randomness, 3)
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
it { is_expected.to eq 4 }
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
context 'token_randomness is 15' do
|
|
20
|
-
before do
|
|
21
|
-
sorcery_model_property_set(:token_randomness, 15)
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
it { is_expected.to eq 20 }
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
end
|
data/spec/spec.opts
DELETED
data/spec/spec_helper.rb
DELETED
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
|
2
|
-
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
|
3
|
-
|
|
4
|
-
ENV['RAILS_ENV'] ||= 'test'
|
|
5
|
-
|
|
6
|
-
SORCERY_ORM = :active_record
|
|
7
|
-
|
|
8
|
-
# require 'simplecov'
|
|
9
|
-
# SimpleCov.root File.join(File.dirname(__FILE__), '..', 'lib')
|
|
10
|
-
# SimpleCov.start
|
|
11
|
-
require 'rails/all'
|
|
12
|
-
require 'rspec/rails'
|
|
13
|
-
require 'timecop'
|
|
14
|
-
require 'byebug'
|
|
15
|
-
|
|
16
|
-
def setup_orm; end
|
|
17
|
-
|
|
18
|
-
def teardown_orm; end
|
|
19
|
-
|
|
20
|
-
require "orm/#{SORCERY_ORM}"
|
|
21
|
-
|
|
22
|
-
require 'rails_app/config/environment'
|
|
23
|
-
|
|
24
|
-
class TestMailer < ActionMailer::Base; end
|
|
25
|
-
|
|
26
|
-
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
|
|
27
|
-
|
|
28
|
-
RSpec.configure do |config|
|
|
29
|
-
config.include RSpec::Rails::ControllerExampleGroup, file_path: /controller(.)*_spec.rb$/
|
|
30
|
-
config.mock_with :rspec
|
|
31
|
-
|
|
32
|
-
config.use_transactional_fixtures = false
|
|
33
|
-
|
|
34
|
-
config.before(:suite) { setup_orm }
|
|
35
|
-
config.after(:suite) { teardown_orm }
|
|
36
|
-
config.before(:each) { ActionMailer::Base.deliveries.clear }
|
|
37
|
-
|
|
38
|
-
config.include ::Sorcery::TestHelpers::Internal
|
|
39
|
-
config.include ::Sorcery::TestHelpers::Internal::Rails
|
|
40
|
-
|
|
41
|
-
if begin
|
|
42
|
-
Module.const_defined?('::Rails::Controller::Testing')
|
|
43
|
-
rescue StandardError
|
|
44
|
-
false
|
|
45
|
-
end
|
|
46
|
-
config.include ::Rails::Controller::Testing::TestProcess, type: :controller
|
|
47
|
-
config.include ::Rails::Controller::Testing::TemplateAssertions, type: :controller
|
|
48
|
-
config.include ::Rails::Controller::Testing::Integration, type: :controller
|
|
49
|
-
end
|
|
50
|
-
end
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
class MigrationHelper
|
|
2
|
-
class << self
|
|
3
|
-
def migrate(path)
|
|
4
|
-
if ActiveRecord.version >= Gem::Version.new('6.0.0')
|
|
5
|
-
ActiveRecord::MigrationContext.new(path, schema_migration).migrate
|
|
6
|
-
elsif ActiveRecord.version >= Gem::Version.new('5.2.0')
|
|
7
|
-
ActiveRecord::MigrationContext.new(path).migrate
|
|
8
|
-
else
|
|
9
|
-
ActiveRecord::Migrator.migrate(path)
|
|
10
|
-
end
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def rollback(path)
|
|
14
|
-
if ActiveRecord.version >= Gem::Version.new('6.0.0')
|
|
15
|
-
ActiveRecord::MigrationContext.new(path, schema_migration).rollback
|
|
16
|
-
elsif ActiveRecord.version >= Gem::Version.new('5.2.0')
|
|
17
|
-
ActiveRecord::MigrationContext.new(path).rollback
|
|
18
|
-
else
|
|
19
|
-
ActiveRecord::Migrator.rollback(path)
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
private
|
|
24
|
-
|
|
25
|
-
def schema_migration
|
|
26
|
-
ActiveRecord::Base.connection.schema_migration
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
end
|