two_factor_authentication 1.1.5 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.codeclimate.yml +21 -0
- data/.rubocop.yml +295 -0
- data/.travis.yml +4 -5
- data/CHANGELOG.md +24 -14
- data/README.md +57 -65
- data/app/controllers/devise/two_factor_authentication_controller.rb +28 -12
- data/app/views/devise/two_factor_authentication/show.html.erb +10 -1
- data/config/locales/en.yml +1 -0
- data/config/locales/es.yml +8 -0
- data/config/locales/fr.yml +1 -0
- data/config/locales/ru.yml +1 -0
- data/lib/generators/active_record/templates/migration.rb +3 -0
- data/lib/two_factor_authentication.rb +9 -0
- data/lib/two_factor_authentication/controllers/helpers.rb +1 -1
- data/lib/two_factor_authentication/hooks/two_factor_authenticatable.rb +4 -23
- data/lib/two_factor_authentication/models/two_factor_authenticatable.rb +68 -19
- data/lib/two_factor_authentication/routes.rb +3 -1
- data/lib/two_factor_authentication/schema.rb +12 -0
- data/lib/two_factor_authentication/version.rb +1 -1
- data/spec/controllers/two_factor_authentication_controller_spec.rb +2 -2
- data/spec/features/two_factor_authenticatable_spec.rb +36 -73
- data/spec/lib/two_factor_authentication/models/two_factor_authenticatable_spec.rb +137 -80
- data/spec/rails_app/app/controllers/home_controller.rb +1 -1
- data/spec/rails_app/app/models/admin.rb +6 -0
- data/spec/rails_app/app/models/encrypted_user.rb +2 -1
- data/spec/rails_app/app/models/guest_user.rb +8 -1
- data/spec/rails_app/app/models/user.rb +2 -2
- data/spec/rails_app/config/initializers/devise.rb +2 -2
- data/spec/rails_app/config/routes.rb +1 -0
- data/spec/rails_app/db/migrate/20140403184646_devise_create_users.rb +1 -1
- data/spec/rails_app/db/migrate/20160209032439_devise_create_admins.rb +42 -0
- data/spec/rails_app/db/schema.rb +19 -1
- data/spec/support/authenticated_model_helper.rb +22 -15
- data/spec/support/controller_helper.rb +1 -1
- data/spec/support/totp_helper.rb +11 -0
- data/two_factor_authentication.gemspec +1 -1
- metadata +74 -7
@@ -9,6 +9,10 @@ module AuthenticatedModelHelper
|
|
9
9
|
User.create!(valid_attributes(attributes))
|
10
10
|
end
|
11
11
|
|
12
|
+
def create_admin
|
13
|
+
Admin.create!(valid_attributes.except(:nickname))
|
14
|
+
end
|
15
|
+
|
12
16
|
def valid_attributes(attributes={})
|
13
17
|
{
|
14
18
|
nickname: 'Marissa',
|
@@ -28,21 +32,24 @@ module AuthenticatedModelHelper
|
|
28
32
|
silence_stream(STDOUT) do
|
29
33
|
ActiveRecord::Schema.define(version: 1) do
|
30
34
|
create_table 'users', force: :cascade do |t|
|
31
|
-
t.string
|
32
|
-
t.string
|
33
|
-
t.string
|
34
|
-
t.datetime
|
35
|
-
t.datetime
|
36
|
-
t.integer
|
37
|
-
t.datetime
|
38
|
-
t.datetime
|
39
|
-
t.string
|
40
|
-
t.string
|
41
|
-
t.datetime
|
42
|
-
t.datetime
|
43
|
-
t.integer
|
44
|
-
t.string
|
45
|
-
t.string
|
35
|
+
t.string 'email', default: '', null: false
|
36
|
+
t.string 'encrypted_password', default: '', null: false
|
37
|
+
t.string 'reset_password_token'
|
38
|
+
t.datetime 'reset_password_sent_at'
|
39
|
+
t.datetime 'remember_created_at'
|
40
|
+
t.integer 'sign_in_count', default: 0, null: false
|
41
|
+
t.datetime 'current_sign_in_at'
|
42
|
+
t.datetime 'last_sign_in_at'
|
43
|
+
t.string 'current_sign_in_ip'
|
44
|
+
t.string 'last_sign_in_ip'
|
45
|
+
t.datetime 'created_at', null: false
|
46
|
+
t.datetime 'updated_at', null: false
|
47
|
+
t.integer 'second_factor_attempts_count', default: 0
|
48
|
+
t.string 'nickname', limit: 64
|
49
|
+
t.string 'otp_secret_key'
|
50
|
+
t.string 'direct_otp'
|
51
|
+
t.datetime 'direct_otp_sent_at'
|
52
|
+
t.timestamp 'totp_timestamp'
|
46
53
|
end
|
47
54
|
end
|
48
55
|
end
|
@@ -7,7 +7,7 @@ module ControllerHelper
|
|
7
7
|
end
|
8
8
|
|
9
9
|
RSpec.configure do |config|
|
10
|
-
config.include Devise::
|
10
|
+
config.include Devise::Test::ControllerHelpers, type: :controller
|
11
11
|
config.include ControllerHelper, type: :controller
|
12
12
|
|
13
13
|
config.before(:example, type: :controller) do
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# Helper class to simulate a user generating TOTP codes from a secret key
|
2
|
+
class TotpHelper
|
3
|
+
def initialize(secret_key, otp_length)
|
4
|
+
@secret_key = secret_key
|
5
|
+
@otp_length = otp_length
|
6
|
+
end
|
7
|
+
|
8
|
+
def totp_code(time = Time.now)
|
9
|
+
ROTP::TOTP.new(@secret_key, digits: @otp_length).at(time, true)
|
10
|
+
end
|
11
|
+
end
|
@@ -27,7 +27,7 @@ Gem::Specification.new do |s|
|
|
27
27
|
s.add_runtime_dependency 'rails', '>= 3.1.1'
|
28
28
|
s.add_runtime_dependency 'devise'
|
29
29
|
s.add_runtime_dependency 'randexp'
|
30
|
-
s.add_runtime_dependency 'rotp'
|
30
|
+
s.add_runtime_dependency 'rotp', '>= 3.2.0'
|
31
31
|
s.add_runtime_dependency 'encryptor'
|
32
32
|
|
33
33
|
s.add_development_dependency 'bundler'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: two_factor_authentication
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dmitrii Golub
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-05-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -58,14 +58,14 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
61
|
+
version: 3.2.0
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
68
|
+
version: 3.2.0
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: encryptor
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -176,7 +176,9 @@ executables: []
|
|
176
176
|
extensions: []
|
177
177
|
extra_rdoc_files: []
|
178
178
|
files:
|
179
|
+
- ".codeclimate.yml"
|
179
180
|
- ".gitignore"
|
181
|
+
- ".rubocop.yml"
|
180
182
|
- ".travis.yml"
|
181
183
|
- CHANGELOG.md
|
182
184
|
- Gemfile
|
@@ -187,6 +189,7 @@ files:
|
|
187
189
|
- app/views/devise/two_factor_authentication/max_login_attempts_reached.html.erb
|
188
190
|
- app/views/devise/two_factor_authentication/show.html.erb
|
189
191
|
- config/locales/en.yml
|
192
|
+
- config/locales/es.yml
|
190
193
|
- config/locales/fr.yml
|
191
194
|
- config/locales/ru.yml
|
192
195
|
- lib/generators/active_record/templates/migration.rb
|
@@ -215,6 +218,7 @@ files:
|
|
215
218
|
- spec/rails_app/app/helpers/application_helper.rb
|
216
219
|
- spec/rails_app/app/mailers/.gitkeep
|
217
220
|
- spec/rails_app/app/models/.gitkeep
|
221
|
+
- spec/rails_app/app/models/admin.rb
|
218
222
|
- spec/rails_app/app/models/encrypted_user.rb
|
219
223
|
- spec/rails_app/app/models/guest_user.rb
|
220
224
|
- spec/rails_app/app/models/user.rb
|
@@ -246,6 +250,7 @@ files:
|
|
246
250
|
- spec/rails_app/db/migrate/20151224171231_add_encrypted_columns_to_user.rb
|
247
251
|
- spec/rails_app/db/migrate/20151224180310_populate_otp_column.rb
|
248
252
|
- spec/rails_app/db/migrate/20151228230340_remove_otp_secret_key_from_user.rb
|
253
|
+
- spec/rails_app/db/migrate/20160209032439_devise_create_admins.rb
|
249
254
|
- spec/rails_app/db/schema.rb
|
250
255
|
- spec/rails_app/lib/assets/.gitkeep
|
251
256
|
- spec/rails_app/lib/sms_provider.rb
|
@@ -260,6 +265,7 @@ files:
|
|
260
265
|
- spec/support/controller_helper.rb
|
261
266
|
- spec/support/features_spec_helper.rb
|
262
267
|
- spec/support/sms_provider.rb
|
268
|
+
- spec/support/totp_helper.rb
|
263
269
|
- two_factor_authentication.gemspec
|
264
270
|
homepage: https://github.com/Houdini/two_factor_authentication
|
265
271
|
licenses: []
|
@@ -280,9 +286,70 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
280
286
|
version: '0'
|
281
287
|
requirements: []
|
282
288
|
rubyforge_project: two_factor_authentication
|
283
|
-
rubygems_version: 2.
|
289
|
+
rubygems_version: 2.6.12
|
284
290
|
signing_key:
|
285
291
|
specification_version: 4
|
286
292
|
summary: Two factor authentication plugin for devise
|
287
|
-
test_files:
|
288
|
-
|
293
|
+
test_files:
|
294
|
+
- spec/controllers/two_factor_authentication_controller_spec.rb
|
295
|
+
- spec/features/two_factor_authenticatable_spec.rb
|
296
|
+
- spec/generators/active_record/two_factor_authentication_generator_spec.rb
|
297
|
+
- spec/lib/two_factor_authentication/models/two_factor_authenticatable_spec.rb
|
298
|
+
- spec/rails_app/.gitignore
|
299
|
+
- spec/rails_app/README.md
|
300
|
+
- spec/rails_app/Rakefile
|
301
|
+
- spec/rails_app/app/assets/javascripts/application.js
|
302
|
+
- spec/rails_app/app/assets/stylesheets/application.css
|
303
|
+
- spec/rails_app/app/controllers/application_controller.rb
|
304
|
+
- spec/rails_app/app/controllers/home_controller.rb
|
305
|
+
- spec/rails_app/app/helpers/application_helper.rb
|
306
|
+
- spec/rails_app/app/mailers/.gitkeep
|
307
|
+
- spec/rails_app/app/models/.gitkeep
|
308
|
+
- spec/rails_app/app/models/admin.rb
|
309
|
+
- spec/rails_app/app/models/encrypted_user.rb
|
310
|
+
- spec/rails_app/app/models/guest_user.rb
|
311
|
+
- spec/rails_app/app/models/user.rb
|
312
|
+
- spec/rails_app/app/views/home/dashboard.html.erb
|
313
|
+
- spec/rails_app/app/views/home/index.html.erb
|
314
|
+
- spec/rails_app/app/views/layouts/application.html.erb
|
315
|
+
- spec/rails_app/config.ru
|
316
|
+
- spec/rails_app/config/application.rb
|
317
|
+
- spec/rails_app/config/boot.rb
|
318
|
+
- spec/rails_app/config/database.yml
|
319
|
+
- spec/rails_app/config/environment.rb
|
320
|
+
- spec/rails_app/config/environments/development.rb
|
321
|
+
- spec/rails_app/config/environments/production.rb
|
322
|
+
- spec/rails_app/config/environments/test.rb
|
323
|
+
- spec/rails_app/config/initializers/backtrace_silencers.rb
|
324
|
+
- spec/rails_app/config/initializers/cookies_serializer.rb
|
325
|
+
- spec/rails_app/config/initializers/devise.rb
|
326
|
+
- spec/rails_app/config/initializers/inflections.rb
|
327
|
+
- spec/rails_app/config/initializers/mime_types.rb
|
328
|
+
- spec/rails_app/config/initializers/secret_token.rb
|
329
|
+
- spec/rails_app/config/initializers/session_store.rb
|
330
|
+
- spec/rails_app/config/initializers/wrap_parameters.rb
|
331
|
+
- spec/rails_app/config/locales/devise.en.yml
|
332
|
+
- spec/rails_app/config/locales/en.yml
|
333
|
+
- spec/rails_app/config/routes.rb
|
334
|
+
- spec/rails_app/db/migrate/20140403184646_devise_create_users.rb
|
335
|
+
- spec/rails_app/db/migrate/20140407172619_two_factor_authentication_add_to_users.rb
|
336
|
+
- spec/rails_app/db/migrate/20140407215513_add_nickanme_to_users.rb
|
337
|
+
- spec/rails_app/db/migrate/20151224171231_add_encrypted_columns_to_user.rb
|
338
|
+
- spec/rails_app/db/migrate/20151224180310_populate_otp_column.rb
|
339
|
+
- spec/rails_app/db/migrate/20151228230340_remove_otp_secret_key_from_user.rb
|
340
|
+
- spec/rails_app/db/migrate/20160209032439_devise_create_admins.rb
|
341
|
+
- spec/rails_app/db/schema.rb
|
342
|
+
- spec/rails_app/lib/assets/.gitkeep
|
343
|
+
- spec/rails_app/lib/sms_provider.rb
|
344
|
+
- spec/rails_app/public/404.html
|
345
|
+
- spec/rails_app/public/422.html
|
346
|
+
- spec/rails_app/public/500.html
|
347
|
+
- spec/rails_app/public/favicon.ico
|
348
|
+
- spec/rails_app/script/rails
|
349
|
+
- spec/spec_helper.rb
|
350
|
+
- spec/support/authenticated_model_helper.rb
|
351
|
+
- spec/support/capybara.rb
|
352
|
+
- spec/support/controller_helper.rb
|
353
|
+
- spec/support/features_spec_helper.rb
|
354
|
+
- spec/support/sms_provider.rb
|
355
|
+
- spec/support/totp_helper.rb
|