active_model_otp 2.0.1 → 2.1.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/.travis.yml +3 -3
- data/Appraisals +3 -3
- data/CHANGELOG.md +1 -17
- data/README.md +2 -1
- data/active_model_otp.gemspec +2 -0
- data/gemfiles/{rails_6.0.0.rc1.gemfile → rails_6.0.gemfile} +2 -2
- data/lib/active_model/one_time_password.rb +3 -3
- data/lib/active_model/otp/version.rb +1 -1
- data/test/models/opt_in_two_factor.rb +16 -0
- data/test/one_time_password_test.rb +12 -0
- metadata +10 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 973b2897bf7c434844a9ec652c599705fbfe6def2da99b20302059047ba960d1
|
4
|
+
data.tar.gz: 4ac0735f61e0d74109ec39d4a6b7504028a76d2ab74f31bde8e90dbd9625a61a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 53612a20dc401b03c051c48450e7161388fed1ab5d2c7d43ebcf12dbec82ca8f12e05d033237f505257d79c4e3ba9861fe5bdae943280e0b625ebb9a0bb95e2d
|
7
|
+
data.tar.gz: 2cbb80548cccb92ff3ed398671c65aa600adc32de84a95b91287de67a4a7fbac45cf97d2d1d311bc1fc141cdb630a1a4e803a3785e79449ec00fea8ce3db5f2c
|
data/.travis.yml
CHANGED
@@ -9,13 +9,13 @@ gemfile:
|
|
9
9
|
- gemfiles/rails_5.0.gemfile
|
10
10
|
- gemfiles/rails_5.1.gemfile
|
11
11
|
- gemfiles/rails_5.2.gemfile
|
12
|
-
- gemfiles/rails_6.0.
|
12
|
+
- gemfiles/rails_6.0.gemfile
|
13
13
|
matrix:
|
14
14
|
exclude:
|
15
15
|
- rvm: 2.3
|
16
|
-
gemfile: gemfiles/rails_6.0.
|
16
|
+
gemfile: gemfiles/rails_6.0.gemfile
|
17
17
|
- rvm: 2.4
|
18
|
-
gemfile: gemfiles/rails_6.0.
|
18
|
+
gemfile: gemfiles/rails_6.0.gemfile
|
19
19
|
fast_finish: true
|
20
20
|
allow_failures:
|
21
21
|
- rvm: ruby-head
|
data/Appraisals
CHANGED
@@ -17,9 +17,9 @@ appraise "rails-5.2" do
|
|
17
17
|
gem "activemodel-serializers-xml"
|
18
18
|
end
|
19
19
|
|
20
|
-
appraise "rails-6.0
|
21
|
-
gem "activerecord", "6.0
|
22
|
-
gem "activemodel", "6.0
|
20
|
+
appraise "rails-6.0" do
|
21
|
+
gem "activerecord", "~> 6.0"
|
22
|
+
gem "activemodel", "~> 6.0"
|
23
23
|
gem "activemodel-serializers-xml"
|
24
24
|
gem "sqlite3", "~> 1.4"
|
25
25
|
end
|
data/CHANGELOG.md
CHANGED
@@ -1,17 +1 @@
|
|
1
|
-
|
2
|
-
- Added Counter based OTP (HOTP) (@ResultsMayVary ) https://github.com/heapsource/active_model_otp/pull/19
|
3
|
-
- Adding options to provisioning uri, so we can include issuer (@doon) https://github.com/heapsource/active_model_otp/pull/15
|
4
|
-
|
5
|
-
# v1.1.0
|
6
|
-
- Add function to re-geterante the OTP secret (@TikiTDO) https://github.com/heapsource/active_model_otp/pull/14
|
7
|
-
- Added option to pass OTP length (@shivanibhanwal) https://github.com/heapsource/active_model_otp/pull/13
|
8
|
-
|
9
|
-
# v1.0.0
|
10
|
-
- Avoid overriding predefined otp_column value when initializing resource (Ilan Stern) https://github.com/heapsource/active_model_otp/pull/10
|
11
|
-
- Pad OTP codes with less than 6 digits (Johan Brissmyr) https://github.com/heapsource/active_model_otp/pull/7
|
12
|
-
- Get rid of deprecation warnings in Rails 4.1 (Nick DeMonner)
|
13
|
-
|
14
|
-
# v0.1.0
|
15
|
-
- OTP codes can be in 5 or 6 digits (André Luis Leal Cardoso Junior)
|
16
|
-
- Require 'cgi', rotp needs it for encoding parameters (André Luis Leal Cardoso Junior)
|
17
|
-
- Change column name for otp secret key (robertomiranda)
|
1
|
+
CHANGELOG it's been deprecated in favor of https://github.com/heapsource/active_model_otp/releases
|
data/README.md
CHANGED
@@ -5,11 +5,12 @@
|
|
5
5
|
|
6
6
|
# ActiveModel::Otp
|
7
7
|
|
8
|
-
**ActiveModel::Otp** makes adding **Two Factor Authentication** (TFA) to a model simple. Let's see what's required to get AMo::Otp working in our Application, using Rails 5.0 (AMo::Otp is also compatible with Rails 4.x versions). We're going to use a User model and try to add options provided by **
|
8
|
+
**ActiveModel::Otp** makes adding **Two Factor Authentication** (TFA) to a model simple. Let's see what's required to get AMo::Otp working in our Application, using Rails 5.0 (AMo::Otp is also compatible with Rails 4.x versions). We're going to use a User model and try to add options provided by **ActiveModel::Otp**. Inspired by AM::SecurePassword
|
9
9
|
|
10
10
|
## Dependencies
|
11
11
|
|
12
12
|
* [ROTP](https://github.com/mdp/rotp) 5.0 or higher
|
13
|
+
* Ruby 2.3 or greater
|
13
14
|
|
14
15
|
## Installation
|
15
16
|
|
data/active_model_otp.gemspec
CHANGED
@@ -17,6 +17,8 @@ Gem::Specification.new do |spec|
|
|
17
17
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.required_ruby_version = ">= 2.3"
|
20
22
|
|
21
23
|
spec.add_dependency "activemodel"
|
22
24
|
spec.add_dependency "rotp", "~> 5.0.0"
|
@@ -15,7 +15,7 @@ module ActiveModel
|
|
15
15
|
|
16
16
|
include InstanceMethodsOnActivation
|
17
17
|
|
18
|
-
before_create do
|
18
|
+
before_create(options.slice(:if, :unless)) do
|
19
19
|
self.otp_regenerate_secret if !otp_column
|
20
20
|
self.otp_regenerate_counter if otp_counter_based && !otp_counter
|
21
21
|
end
|
@@ -49,7 +49,7 @@ module ActiveModel
|
|
49
49
|
result = hotp.verify(code, otp_counter)
|
50
50
|
if result && options[:auto_increment]
|
51
51
|
self.otp_counter += 1
|
52
|
-
save if respond_to?(:
|
52
|
+
save if respond_to?(:changed?) && !new_record?
|
53
53
|
end
|
54
54
|
result
|
55
55
|
else
|
@@ -66,7 +66,7 @@ module ActiveModel
|
|
66
66
|
if otp_counter_based
|
67
67
|
if options[:auto_increment]
|
68
68
|
self.otp_counter += 1
|
69
|
-
save if respond_to?(:
|
69
|
+
save if respond_to?(:changed?) && !new_record?
|
70
70
|
end
|
71
71
|
ROTP::HOTP.new(otp_column, digits: otp_digits).at(self.otp_counter)
|
72
72
|
else
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class OptInTwoFactor
|
4
|
+
extend ActiveModel::Callbacks
|
5
|
+
include ActiveModel::Validations
|
6
|
+
include ActiveModel::OneTimePassword
|
7
|
+
|
8
|
+
define_model_callbacks :create
|
9
|
+
attr_accessor :otp_secret_key, :email
|
10
|
+
|
11
|
+
has_one_time_password unless: :otp_opt_in?
|
12
|
+
|
13
|
+
def otp_opt_in?
|
14
|
+
true
|
15
|
+
end
|
16
|
+
end
|
@@ -17,6 +17,10 @@ class OtpTest < MiniTest::Unit::TestCase
|
|
17
17
|
@ar_user = ActiverecordUser.new
|
18
18
|
@ar_user.email = 'roberto@heapsource.com'
|
19
19
|
@ar_user.run_callbacks :create
|
20
|
+
|
21
|
+
@opt_in = OptInTwoFactor.new
|
22
|
+
@opt_in.email = 'roberto@heapsource.com'
|
23
|
+
@opt_in.run_callbacks :create
|
20
24
|
end
|
21
25
|
|
22
26
|
def test_authenticate_with_otp
|
@@ -49,6 +53,14 @@ class OtpTest < MiniTest::Unit::TestCase
|
|
49
53
|
assert code != @ar_user.otp_code(auto_increment: true)
|
50
54
|
end
|
51
55
|
|
56
|
+
def test_opt_in_two_factor
|
57
|
+
assert @opt_in.otp_column.nil?
|
58
|
+
|
59
|
+
@opt_in.otp_regenerate_secret
|
60
|
+
code = @opt_in.otp_code
|
61
|
+
assert @opt_in.authenticate_otp(code)
|
62
|
+
end
|
63
|
+
|
52
64
|
def test_authenticate_with_otp_when_drift_is_allowed
|
53
65
|
code = @user.otp_code(Time.now - 30)
|
54
66
|
assert @user.authenticate_otp(code, drift: 60)
|
metadata
CHANGED
@@ -1,16 +1,16 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active_model_otp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0
|
4
|
+
version: 2.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Guillermo Iguaran
|
8
8
|
- Roberto Miranda
|
9
9
|
- Heapsource
|
10
|
-
autorequire:
|
10
|
+
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2020-12-15 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: activemodel
|
@@ -133,12 +133,13 @@ files:
|
|
133
133
|
- gemfiles/rails_5.0.gemfile
|
134
134
|
- gemfiles/rails_5.1.gemfile
|
135
135
|
- gemfiles/rails_5.2.gemfile
|
136
|
-
- gemfiles/rails_6.0.
|
136
|
+
- gemfiles/rails_6.0.gemfile
|
137
137
|
- lib/active_model/one_time_password.rb
|
138
138
|
- lib/active_model/otp/version.rb
|
139
139
|
- lib/active_model_otp.rb
|
140
140
|
- test/models/activerecord_user.rb
|
141
141
|
- test/models/member.rb
|
142
|
+
- test/models/opt_in_two_factor.rb
|
142
143
|
- test/models/user.rb
|
143
144
|
- test/models/visitor.rb
|
144
145
|
- test/one_time_password_test.rb
|
@@ -148,7 +149,7 @@ homepage: ''
|
|
148
149
|
licenses:
|
149
150
|
- MIT
|
150
151
|
metadata: {}
|
151
|
-
post_install_message:
|
152
|
+
post_install_message:
|
152
153
|
rdoc_options: []
|
153
154
|
require_paths:
|
154
155
|
- lib
|
@@ -156,20 +157,21 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
156
157
|
requirements:
|
157
158
|
- - ">="
|
158
159
|
- !ruby/object:Gem::Version
|
159
|
-
version: '
|
160
|
+
version: '2.3'
|
160
161
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
161
162
|
requirements:
|
162
163
|
- - ">="
|
163
164
|
- !ruby/object:Gem::Version
|
164
165
|
version: '0'
|
165
166
|
requirements: []
|
166
|
-
rubygems_version: 3.0.
|
167
|
-
signing_key:
|
167
|
+
rubygems_version: 3.0.3
|
168
|
+
signing_key:
|
168
169
|
specification_version: 4
|
169
170
|
summary: Adds methods to set and authenticate against one time passwords.
|
170
171
|
test_files:
|
171
172
|
- test/models/activerecord_user.rb
|
172
173
|
- test/models/member.rb
|
174
|
+
- test/models/opt_in_two_factor.rb
|
173
175
|
- test/models/user.rb
|
174
176
|
- test/models/visitor.rb
|
175
177
|
- test/one_time_password_test.rb
|