devise-two-factor 3.0.0 → 3.0.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.

Potentially problematic release.


This version of devise-two-factor might be problematic. Click here for more details.

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4b3b5de2fc272e8a4cb6efed6a5767d5ebf98b7a
4
- data.tar.gz: b9f07dd6665d994fc78c3fca5baf074a2a7ecdbd
3
+ metadata.gz: a182bb8b0619079432256f1a392434b21fe8f583
4
+ data.tar.gz: 31762712f97291602a2ba2f0af5337c3c9caa359
5
5
  SHA512:
6
- metadata.gz: fdd8ddf024c2d4d336026262ea27c9660df54d6363c3aff582c500e76ae7b8bc136d1cf3f048527b5e95c899af04dc1ae4fb4c91e4323c5b47aeb6fe922df98d
7
- data.tar.gz: 11b3e866530264a4c3779fc49150df1de42658e7ead17496844d7f667d6d033c5c5fb7808d50df62a0a7afdc265e6d442f31d55ac2188d9f330662545d5c37f7
6
+ metadata.gz: 4ee2c920d0aa96f7feb1f53375c03e02681887d40108e674f033a4010d673a80a2b4c9942ce8f2d7e892bbfdcc22e28242753aaebd7213c768c59e156158d679
7
+ data.tar.gz: 6b00bf92e9253dca1cc9ba04006f40de004e36812ea48d9bf943d453355b37edea0e73b7938890e6915fc5e654c2f9fefdbc6e9eeaaee51e19fca373f97736d7
Binary file
data.tar.gz.sig CHANGED
Binary file
data/.gitignore CHANGED
@@ -9,6 +9,8 @@
9
9
  /test/tmp/
10
10
  /test/version_tmp/
11
11
  /tmp/
12
+ /gemfiles/.bundle/
13
+ /gemfiles/*.gemfile.lock
12
14
 
13
15
  ## Specific to RubyMotion:
14
16
  .dat*
@@ -42,6 +44,7 @@ build-iPhoneSimulator/
42
44
  Gemfile.lock
43
45
  .ruby-version
44
46
  .ruby-gemset
47
+ .tool-versions
45
48
 
46
49
  # unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
47
50
  .rvmrc
@@ -4,7 +4,20 @@ cache: bundler
4
4
  before_install:
5
5
  - gem update --system
6
6
  - gem update bundler
7
+ gemfile:
8
+ - Gemfile
9
+ - gemfiles/rails_4_1.gemfile
10
+ - gemfiles/rails_4_2.gemfile
11
+ - gemfiles/rails_5_0.gemfile
7
12
  rvm:
8
13
  - "2.1"
9
14
  - "2.2"
10
- - "2.3.0"
15
+ - "2.3.4"
16
+ - "2.4.0"
17
+ - "2.4.1"
18
+ matrix:
19
+ exclude:
20
+ - rvm: "2.1"
21
+ gemfile: gemfiles/rails_5_0.gemfile
22
+ - rvm: "2.2"
23
+ gemfile: gemfiles/rails_5_0.gemfile
@@ -0,0 +1,14 @@
1
+ appraise "rails-4-1" do
2
+ gem 'railties', '~> 4.1'
3
+ gem 'activesupport', '~> 4.1'
4
+ end
5
+
6
+ appraise "rails-4-2" do
7
+ gem 'railties', '~> 4.2'
8
+ gem 'activesupport', '~> 4.2'
9
+ end
10
+
11
+ appraise "rails-5-0" do
12
+ gem 'railties', '~> 5.0'
13
+ gem 'activesupport', '~> 5.0'
14
+ end
data/README.md CHANGED
@@ -7,7 +7,7 @@ Devise-Two-Factor is a minimalist extension to Devise which offers support for t
7
7
 
8
8
  * Allows you to incorporate two-factor authentication into your existing models
9
9
  * Is opinionated about security, so you don't have to be
10
- * Integrates easily with two-factor applications like Google Authenticator and Authy
10
+ * Integrates easily with two-factor applications like [Google Authenticator](https://support.google.com/accounts/answer/1066447?hl=en) and [Authy](https://authy.com/)
11
11
  * Is extensible, and includes two-factor backup codes as an example of how plugins can be structured
12
12
 
13
13
  ## Example App
@@ -122,6 +122,17 @@ Before you can do this however, you need to decide how you're going to transmit
122
122
 
123
123
  At Tinfoil Security, we opted to use the excellent [rqrcode-rails3](https://github.com/samvincent/rqrcode-rails3) gem to generate a QR-code representing the user's secret key, which can then be scanned by any mobile two-factor authentication client.
124
124
 
125
+ If you decide to do this you'll need to generate a URI to act as the source for the QR code. This can be done using the `User#otp_provisioning_uri` method.
126
+
127
+ ```ruby
128
+ issuer = 'Your App'
129
+ label = "#{issuer}:#{current_user.email}"
130
+
131
+ current_user.otp_provisioning_uri(label, issuer: issuer)
132
+
133
+ # > "otpauth://totp/Your%20App:user@example.com?secret=[otp_secret]&issuer=Your+App"
134
+ ```
135
+
125
136
  If you instead to decide to send the one-time password to the user directly, such as via SMS, you'll need a mechanism for generating the one-time password on the server:
126
137
 
127
138
  ```ruby
@@ -1,33 +1,35 @@
1
1
  -----BEGIN CERTIFICATE-----
2
- MIIFyjCCA7KgAwIBAgIJAK2u0LojMCNtMA0GCSqGSIb3DQEBDQUAMIGcMQswCQYD
2
+ MIIGATCCA+mgAwIBAgIJAK2u0LojMCOOMA0GCSqGSIb3DQEBDQUAMIGcMQswCQYD
3
3
  VQQGEwJVUzELMAkGA1UECBMCQ0ExEjAQBgNVBAcTCVBhbG8gQWx0bzEfMB0GA1UE
4
4
  ChMWVGluZm9pbCBTZWN1cml0eSwgSW5jLjEfMB0GA1UEAxMWVGluZm9pbCBTZWN1
5
5
  cml0eSwgSW5jLjEqMCgGCSqGSIb3DQEJARYbc3VwcG9ydEB0aW5mb2lsc2VjdXJp
6
- dHkuY29tMB4XDTE0MDUyMDIxMTAwMFoXDTE2MDUyMDIxMTAwMFowgZwxCzAJBgNV
7
- BAYTAlVTMQswCQYDVQQIEwJDQTESMBAGA1UEBxMJUGFsbyBBbHRvMR8wHQYDVQQK
8
- ExZUaW5mb2lsIFNlY3VyaXR5LCBJbmMuMR0wGwYDVQQDExR0aW5mb2lsc2VjdXJp
9
- dHktZ2VtczEsMCoGCSqGSIb3DQEJARYdZW5naW5lZXJzQHRpbmZvaWxzZWN1cml0
10
- eS5jb20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDNJYNH8D+8lACL
11
- t3KzjEIPs3XVBCPaMm2eD/Xk9OOTuDV/NqgMK0icD9MRxMUtS3SCrC9QcPocXT76
12
- f2LQ3yVJuK+rBUasymEES47PIx2czC4n4Hga0xPPuBpioO26oaRFsobyzh9RPOIb
13
- nYfpjyqtdrbm+YyM3sPR4XzFirv9xomT4E9T4RCLgOQHTcLKL9K9m+EN7PeVdVUX
14
- V0Pa7cVs2vJUKedsd7vnr6Lzbn8ToPk/7J/4W931PbaeI5yg9ZuaRa9K2IaY1TkP
15
- I67NW4qKitBVepRlXw6Sb7TYcUncWEQ/eC5CpnOmqUrG5tfGD8cc5aGZOkitW/VX
16
- ZgVj81xgCv1hk4HjErrqq4FBNAaCSNyBfwR0TUYqg1lN1nbNjOKwfb6YRn06R2ov
17
- cFJG0tmGhsQULCr6fW8u2TfSM+U9WFSIJx2griureY7EZPwg/MgsUiWUWMFemz3G
18
- VYXWJR3dN2pW9Uqr3rkjKZbA0bstGWahJO9HuFdDakQxoaTPYPtTQDC+kskkO6lK
19
- G1KLIoZ1iLZzB1Ks1vEeyE7lp1imWgpUq+q23PFkt1gIBi/4tGvzsLZye25QU2Y+
20
- XLzldCNm+DyRFXZ+Q+bK33IveUeUWEOv4T1qTXHAOypyzmgodVRG/PrlsSMOBfE5
21
- 15kG1mDMGjRcCpEtlskgxUbf7qM7hQIDAQABow0wCzAJBgNVHRMEAjAAMA0GCSqG
22
- SIb3DQEBDQUAA4ICAQCLXzGJOr0isGHscTvm73ReEAOv4g0IOSXjfHfHAOWKhzdM
23
- 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
- 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
- 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
- a78vwAq429N2gVnfSdeU9v9QqdHOF1215lC6qaDI4bk8hVE4RyMxSBZmWKhnPLAm
27
- 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
- J/VmzQd9D9RaB+pOclDYR3Uiji5EBq1La2FPg48hA0uCd4KJ9dBGwNrxvjDNSBW0
29
- FiM1vjR6AVxIAhOwICeWG6QTvH5Jrnq/UDBnnK/KALCbFw3YbbhOyy+295jta7xf
30
- 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
- 5C31v4YyRBnNCp0pN66nxYX2avEiQ8riTBP5mlkPPOhsIoYQHHe2Uj75aVpu0LZ3
32
- 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
34
+ ztlV910=
33
35
  -----END CERTIFICATE-----
@@ -24,13 +24,14 @@ Gem::Specification.new do |s|
24
24
  s.test_files = `git ls-files -- spec/*`.split("\n")
25
25
  s.require_paths = ['lib']
26
26
 
27
- s.add_runtime_dependency 'railties'
28
- s.add_runtime_dependency 'activesupport'
27
+ s.add_runtime_dependency 'railties', '< 5.1'
28
+ s.add_runtime_dependency 'activesupport', '< 5.1'
29
29
  s.add_runtime_dependency 'attr_encrypted', '>= 1.3', '< 4', '!= 2'
30
30
  s.add_runtime_dependency 'devise', '~> 4.0'
31
31
  s.add_runtime_dependency 'rotp', '~> 2.0'
32
32
 
33
33
  s.add_development_dependency 'activemodel'
34
+ s.add_development_dependency 'appraisal'
34
35
  s.add_development_dependency 'bundler', '> 1.0'
35
36
  s.add_development_dependency 'rspec', '> 3'
36
37
  s.add_development_dependency 'simplecov'
@@ -0,0 +1,8 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "railties", "~> 4.1"
6
+ gem "activesupport", "~> 4.1"
7
+
8
+ gemspec path: "../"
@@ -0,0 +1,8 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "railties", "~> 4.2"
6
+ gem "activesupport", "~> 4.2"
7
+
8
+ gemspec path: "../"
@@ -0,0 +1,8 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "railties", "~> 5.0"
6
+ gem "activesupport", "~> 5.0"
7
+
8
+ gemspec path: "../"
@@ -1,4 +1,4 @@
1
- shared_examples 'two_factor_authenticatable' do
1
+ RSpec.shared_examples 'two_factor_authenticatable' do
2
2
  before :each do
3
3
  subject.otp_secret = subject.class.generate_otp_secret
4
4
  subject.consumed_timestep = nil
@@ -1,4 +1,4 @@
1
- shared_examples 'two_factor_backupable' do
1
+ RSpec.shared_examples 'two_factor_backupable' do
2
2
  describe 'required_fields' do
3
3
  it 'has the attr_encrypted fields for otp_backup_codes' do
4
4
  expect(Devise::Models::TwoFactorBackupable.required_fields(subject.class)).to contain_exactly(:otp_backup_codes)
@@ -1,3 +1,3 @@
1
1
  module DeviseTwoFactor
2
- VERSION = '3.0.0'.freeze
2
+ VERSION = '3.0.1'.freeze
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: devise-two-factor
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0
4
+ version: 3.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shane Wilton
@@ -52,68 +52,70 @@ cert_chain:
52
52
  -----END CERTIFICATE-----
53
53
  - |
54
54
  -----BEGIN CERTIFICATE-----
55
- MIIFyjCCA7KgAwIBAgIJAK2u0LojMCNtMA0GCSqGSIb3DQEBDQUAMIGcMQswCQYD
55
+ MIIGATCCA+mgAwIBAgIJAK2u0LojMCOOMA0GCSqGSIb3DQEBDQUAMIGcMQswCQYD
56
56
  VQQGEwJVUzELMAkGA1UECBMCQ0ExEjAQBgNVBAcTCVBhbG8gQWx0bzEfMB0GA1UE
57
57
  ChMWVGluZm9pbCBTZWN1cml0eSwgSW5jLjEfMB0GA1UEAxMWVGluZm9pbCBTZWN1
58
58
  cml0eSwgSW5jLjEqMCgGCSqGSIb3DQEJARYbc3VwcG9ydEB0aW5mb2lsc2VjdXJp
59
- dHkuY29tMB4XDTE0MDUyMDIxMTAwMFoXDTE2MDUyMDIxMTAwMFowgZwxCzAJBgNV
60
- BAYTAlVTMQswCQYDVQQIEwJDQTESMBAGA1UEBxMJUGFsbyBBbHRvMR8wHQYDVQQK
61
- ExZUaW5mb2lsIFNlY3VyaXR5LCBJbmMuMR0wGwYDVQQDExR0aW5mb2lsc2VjdXJp
62
- dHktZ2VtczEsMCoGCSqGSIb3DQEJARYdZW5naW5lZXJzQHRpbmZvaWxzZWN1cml0
63
- eS5jb20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDNJYNH8D+8lACL
64
- t3KzjEIPs3XVBCPaMm2eD/Xk9OOTuDV/NqgMK0icD9MRxMUtS3SCrC9QcPocXT76
65
- f2LQ3yVJuK+rBUasymEES47PIx2czC4n4Hga0xPPuBpioO26oaRFsobyzh9RPOIb
66
- nYfpjyqtdrbm+YyM3sPR4XzFirv9xomT4E9T4RCLgOQHTcLKL9K9m+EN7PeVdVUX
67
- V0Pa7cVs2vJUKedsd7vnr6Lzbn8ToPk/7J/4W931PbaeI5yg9ZuaRa9K2IaY1TkP
68
- I67NW4qKitBVepRlXw6Sb7TYcUncWEQ/eC5CpnOmqUrG5tfGD8cc5aGZOkitW/VX
69
- ZgVj81xgCv1hk4HjErrqq4FBNAaCSNyBfwR0TUYqg1lN1nbNjOKwfb6YRn06R2ov
70
- cFJG0tmGhsQULCr6fW8u2TfSM+U9WFSIJx2griureY7EZPwg/MgsUiWUWMFemz3G
71
- VYXWJR3dN2pW9Uqr3rkjKZbA0bstGWahJO9HuFdDakQxoaTPYPtTQDC+kskkO6lK
72
- G1KLIoZ1iLZzB1Ks1vEeyE7lp1imWgpUq+q23PFkt1gIBi/4tGvzsLZye25QU2Y+
73
- XLzldCNm+DyRFXZ+Q+bK33IveUeUWEOv4T1qTXHAOypyzmgodVRG/PrlsSMOBfE5
74
- 15kG1mDMGjRcCpEtlskgxUbf7qM7hQIDAQABow0wCzAJBgNVHRMEAjAAMA0GCSqG
75
- SIb3DQEBDQUAA4ICAQCLXzGJOr0isGHscTvm73ReEAOv4g0IOSXjfHfHAOWKhzdM
76
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- r32d4cJAvbDF1C6t2JRjNwi0ANgPw0cytl+8yvCyXpXMZpT0YpDk76XICo97SOHI
84
- 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
- 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
87
+ ztlV910=
86
88
  -----END CERTIFICATE-----
87
- date: 2016-05-19 00:00:00.000000000 Z
89
+ date: 2017-10-05 00:00:00.000000000 Z
88
90
  dependencies:
89
91
  - !ruby/object:Gem::Dependency
90
92
  name: railties
91
93
  requirement: !ruby/object:Gem::Requirement
92
94
  requirements:
93
- - - ">="
95
+ - - "<"
94
96
  - !ruby/object:Gem::Version
95
- version: '0'
97
+ version: '5.1'
96
98
  type: :runtime
97
99
  prerelease: false
98
100
  version_requirements: !ruby/object:Gem::Requirement
99
101
  requirements:
100
- - - ">="
102
+ - - "<"
101
103
  - !ruby/object:Gem::Version
102
- version: '0'
104
+ version: '5.1'
103
105
  - !ruby/object:Gem::Dependency
104
106
  name: activesupport
105
107
  requirement: !ruby/object:Gem::Requirement
106
108
  requirements:
107
- - - ">="
109
+ - - "<"
108
110
  - !ruby/object:Gem::Version
109
- version: '0'
111
+ version: '5.1'
110
112
  type: :runtime
111
113
  prerelease: false
112
114
  version_requirements: !ruby/object:Gem::Requirement
113
115
  requirements:
114
- - - ">="
116
+ - - "<"
115
117
  - !ruby/object:Gem::Version
116
- version: '0'
118
+ version: '5.1'
117
119
  - !ruby/object:Gem::Dependency
118
120
  name: attr_encrypted
119
121
  requirement: !ruby/object:Gem::Requirement
@@ -182,6 +184,20 @@ dependencies:
182
184
  - - ">="
183
185
  - !ruby/object:Gem::Version
184
186
  version: '0'
187
+ - !ruby/object:Gem::Dependency
188
+ name: appraisal
189
+ requirement: !ruby/object:Gem::Requirement
190
+ requirements:
191
+ - - ">="
192
+ - !ruby/object:Gem::Version
193
+ version: '0'
194
+ type: :development
195
+ prerelease: false
196
+ version_requirements: !ruby/object:Gem::Requirement
197
+ requirements:
198
+ - - ">="
199
+ - !ruby/object:Gem::Version
200
+ version: '0'
185
201
  - !ruby/object:Gem::Dependency
186
202
  name: bundler
187
203
  requirement: !ruby/object:Gem::Requirement
@@ -261,6 +277,7 @@ files:
261
277
  - ".gitignore"
262
278
  - ".rspec"
263
279
  - ".travis.yml"
280
+ - Appraisals
264
281
  - CHANGELOG.md
265
282
  - CONTRIBUTING.md
266
283
  - Gemfile
@@ -271,6 +288,9 @@ files:
271
288
  - certs/tinfoil-cacert.pem
272
289
  - certs/tinfoilsecurity-gems-cert.pem
273
290
  - devise-two-factor.gemspec
291
+ - gemfiles/rails_4_1.gemfile
292
+ - gemfiles/rails_4_2.gemfile
293
+ - gemfiles/rails_5_0.gemfile
274
294
  - lib/devise-two-factor.rb
275
295
  - lib/devise_two_factor/models.rb
276
296
  - lib/devise_two_factor/models/two_factor_authenticatable.rb
@@ -306,7 +326,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
306
326
  version: '0'
307
327
  requirements: []
308
328
  rubyforge_project: devise-two-factor
309
- rubygems_version: 2.6.3
329
+ rubygems_version: 2.6.10
310
330
  signing_key:
311
331
  specification_version: 4
312
332
  summary: Barebones two-factor authentication with Devise
metadata.gz.sig CHANGED
Binary file