google-authenticator-rails 0.0.7 → 0.0.8
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 +15 -0
- data/README.md +27 -3
- data/gemfiles/rails2.3.gemfile.lock +3 -3
- data/gemfiles/rails3.0.gemfile.lock +3 -3
- data/gemfiles/rails3.1.gemfile.lock +3 -3
- data/gemfiles/rails3.2..gemfile.lock +3 -3
- data/google-authenticator.gemspec +3 -3
- data/lib/google-authenticator-rails/active_record/acts_as_google_authenticated.rb +3 -1
- data/lib/google-authenticator-rails/active_record/helpers.rb +5 -1
- data/lib/google-authenticator-rails/version.rb +1 -1
- data/spec/google_authenticator_spec.rb +5 -5
- metadata +105 -133
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
Y2MxMDMxMGNmZjZiYzgwNDc5NjAwNTFlMTYzOWJkZWE4NWMxNTM1OA==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
NjRkNGQzMGJjMjgzNmU1ZjEyM2NhNmU1ZjRjYmNmZmU0NWQwZTUxZQ==
|
7
|
+
SHA512:
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
NDkyN2M5YmYwYmNkNmI0NjEwMWQ0ZTY5NzNlNGY4Yjk0ZmMyMjE2ODk1Yjgw
|
10
|
+
OGFmZDQzY2M2ODcxYTA3NTllYjQyYmY1YzkxMThhYTI4MDlkODliZDc2ZmE0
|
11
|
+
YWRiMjAxZWI5N2E0ODRlNzVmMDc5MDI3YTBhZTg2ZThlZmU1ZTY=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
OTlkYmY5YmViYjgzZmNlNzZjYjgyYjU3ZDk2ZjkwZTU1Y2MwNmI2ZWJiNDIy
|
14
|
+
NDAzOTUyYjU5NDMzYTUzMDc2YzZkMWU5MDIwYzBkZTg0YTYyZWE1MWFhNzQx
|
15
|
+
YTFiNjUxZTU1MzA4NzM3ODcyNDE0NTUyNTNhNjFhYzliNzc5M2M=
|
data/README.md
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
[](http://badge.fury.io/rb/google-authenticator-rails)
|
4
4
|
[](http://travis-ci.org/jaredonline/google-authenticator)
|
5
|
-
[](https://codeclimate.com/github/jaredonline/google-authenticator)
|
6
6
|
|
7
7
|
Rails (ActiveRecord) integration with the Google Authenticator apps for Android and the iPhone. Uses the Authlogic style for cookie management.
|
8
8
|
|
@@ -26,7 +26,7 @@ Example:
|
|
26
26
|
|
27
27
|
```ruby
|
28
28
|
class User
|
29
|
-
acts_as_google_authenticated
|
29
|
+
acts_as_google_authenticated
|
30
30
|
end
|
31
31
|
|
32
32
|
@user = User.new
|
@@ -49,7 +49,7 @@ Examples:
|
|
49
49
|
|
50
50
|
```ruby
|
51
51
|
class User
|
52
|
-
|
52
|
+
acts_as_google_authenticated :column => :user_name
|
53
53
|
end
|
54
54
|
|
55
55
|
@user = User.new(:user_name => "ted")
|
@@ -92,6 +92,30 @@ end
|
|
92
92
|
@user.mfa_secret # => "56ahi483"
|
93
93
|
```
|
94
94
|
|
95
|
+
You can also specify which column the appropriate `MfaSession` subclass should use to look up the record:
|
96
|
+
|
97
|
+
Example
|
98
|
+
|
99
|
+
```ruby
|
100
|
+
class User
|
101
|
+
acts_as_google_authenticated :lookup_token => :salt
|
102
|
+
end
|
103
|
+
```
|
104
|
+
|
105
|
+
The above will cause the `UserMfaSession` class to call `User.where(:salt => cookie_salt)` or `User.scoped(:conditions => { :salt => cookie_salt })` to find the appropriate record.
|
106
|
+
|
107
|
+
You can also specify a name for the 'issuer' (the name of the website) where the user is using this token:
|
108
|
+
|
109
|
+
Example
|
110
|
+
|
111
|
+
```ruby
|
112
|
+
class User
|
113
|
+
acts_as_google_authenticated :issuer => 'your_site.com'
|
114
|
+
end
|
115
|
+
```
|
116
|
+
|
117
|
+
By this way your user will have the name of your site at the authenticator card besides the current token.
|
118
|
+
|
95
119
|
## Sample Rails Setup
|
96
120
|
|
97
121
|
This is a very rough outline of how GoogleAuthenticatorRails is meant to manage the sessions and cookies for a Rails app.
|
@@ -1,11 +1,11 @@
|
|
1
1
|
PATH
|
2
2
|
remote: ../
|
3
3
|
specs:
|
4
|
-
google-authenticator-rails (0.0.
|
4
|
+
google-authenticator-rails (0.0.7)
|
5
5
|
actionpack
|
6
6
|
activerecord (< 4.0.0)
|
7
7
|
google-qr
|
8
|
-
rotp (= 1.
|
8
|
+
rotp (= 1.6.1)
|
9
9
|
|
10
10
|
GEM
|
11
11
|
remote: https://rubygems.org/
|
@@ -23,7 +23,7 @@ GEM
|
|
23
23
|
google-qr (0.2.2)
|
24
24
|
rack (1.1.6)
|
25
25
|
rake (10.1.1)
|
26
|
-
rotp (1.
|
26
|
+
rotp (1.6.1)
|
27
27
|
rspec (2.8.0)
|
28
28
|
rspec-core (~> 2.8.0)
|
29
29
|
rspec-expectations (~> 2.8.0)
|
@@ -1,11 +1,11 @@
|
|
1
1
|
PATH
|
2
2
|
remote: ../
|
3
3
|
specs:
|
4
|
-
google-authenticator-rails (0.0.
|
4
|
+
google-authenticator-rails (0.0.7)
|
5
5
|
actionpack
|
6
6
|
activerecord (< 4.0.0)
|
7
7
|
google-qr
|
8
|
-
rotp (= 1.
|
8
|
+
rotp (= 1.6.1)
|
9
9
|
|
10
10
|
GEM
|
11
11
|
remote: https://rubygems.org/
|
@@ -47,7 +47,7 @@ GEM
|
|
47
47
|
rack-test (0.5.7)
|
48
48
|
rack (>= 1.0)
|
49
49
|
rake (10.1.1)
|
50
|
-
rotp (1.
|
50
|
+
rotp (1.6.1)
|
51
51
|
rspec (2.8.0)
|
52
52
|
rspec-core (~> 2.8.0)
|
53
53
|
rspec-expectations (~> 2.8.0)
|
@@ -1,11 +1,11 @@
|
|
1
1
|
PATH
|
2
2
|
remote: ../
|
3
3
|
specs:
|
4
|
-
google-authenticator-rails (0.0.
|
4
|
+
google-authenticator-rails (0.0.7)
|
5
5
|
actionpack
|
6
6
|
activerecord (< 4.0.0)
|
7
7
|
google-qr
|
8
|
-
rotp (= 1.
|
8
|
+
rotp (= 1.6.1)
|
9
9
|
|
10
10
|
GEM
|
11
11
|
remote: https://rubygems.org/
|
@@ -51,7 +51,7 @@ GEM
|
|
51
51
|
rack-test (0.6.2)
|
52
52
|
rack (>= 1.0)
|
53
53
|
rake (10.1.1)
|
54
|
-
rotp (1.
|
54
|
+
rotp (1.6.1)
|
55
55
|
rspec (2.8.0)
|
56
56
|
rspec-core (~> 2.8.0)
|
57
57
|
rspec-expectations (~> 2.8.0)
|
@@ -1,11 +1,11 @@
|
|
1
1
|
PATH
|
2
2
|
remote: ../
|
3
3
|
specs:
|
4
|
-
google-authenticator-rails (0.0.
|
4
|
+
google-authenticator-rails (0.0.7)
|
5
5
|
actionpack
|
6
6
|
activerecord (< 4.0.0)
|
7
7
|
google-qr
|
8
|
-
rotp (= 1.
|
8
|
+
rotp (= 1.6.1)
|
9
9
|
|
10
10
|
GEM
|
11
11
|
remote: https://rubygems.org/
|
@@ -49,7 +49,7 @@ GEM
|
|
49
49
|
rack-test (0.6.2)
|
50
50
|
rack (>= 1.0)
|
51
51
|
rake (10.1.1)
|
52
|
-
rotp (1.
|
52
|
+
rotp (1.6.1)
|
53
53
|
rspec (2.8.0)
|
54
54
|
rspec-core (~> 2.8.0)
|
55
55
|
rspec-expectations (~> 2.8.0)
|
@@ -20,12 +20,12 @@ Gem::Specification.new do |gem|
|
|
20
20
|
gem.name = "google-authenticator-rails"
|
21
21
|
gem.require_paths = ["lib"]
|
22
22
|
gem.version = Google::Authenticator::Rails::VERSION
|
23
|
-
|
24
|
-
gem.add_dependency "rotp", "= 1.
|
23
|
+
|
24
|
+
gem.add_dependency "rotp", "= 1.6.1"
|
25
25
|
gem.add_dependency "activerecord", "< 4.0.0"
|
26
26
|
gem.add_dependency "google-qr"
|
27
27
|
gem.add_dependency "actionpack"
|
28
|
-
|
28
|
+
|
29
29
|
gem.add_development_dependency "rspec", "~> 2.8.0"
|
30
30
|
gem.add_development_dependency "appraisal", "~> 0.5.1"
|
31
31
|
gem.add_development_dependency "sqlite3"
|
@@ -77,15 +77,17 @@ module GoogleAuthenticatorRails # :nodoc:
|
|
77
77
|
# to "google_secret"
|
78
78
|
# [:lookup_token] the column to use to find the record from the DB, defaults
|
79
79
|
# to "persistence_token"
|
80
|
+
# [:issuer] the name of the issuer to appear at the app (is optional)
|
80
81
|
def acts_as_google_authenticated(options = {})
|
81
82
|
@google_label_column = options[:column_name] || :email
|
82
83
|
@google_label_method = options[:method] || :default_google_label_method
|
83
84
|
@google_secret_column = options[:google_secret_column] || :google_secret
|
84
85
|
@google_lookup_token = options[:lookup_token] || :persistence_token
|
86
|
+
@google_issuer = options[:issuer]
|
85
87
|
|
86
88
|
puts ":skip_attr_accessible is no longer required. Called from #{Kernel.caller[0]}}" if options.has_key?(:skip_attr_accessible)
|
87
89
|
|
88
|
-
[:google_label_column, :google_label_method, :google_secret_column, :google_lookup_token].each do |cattr|
|
90
|
+
[:google_label_column, :google_label_method, :google_secret_column, :google_lookup_token, :google_issuer].each do |cattr|
|
89
91
|
self.singleton_class.class_eval { attr_reader cattr }
|
90
92
|
end
|
91
93
|
|
@@ -23,7 +23,7 @@ module GoogleAuthenticatorRails # :nodoc:
|
|
23
23
|
end
|
24
24
|
|
25
25
|
def google_qr_uri
|
26
|
-
GoogleQR.new(:data => ROTP::TOTP.new(google_secret_value).provisioning_uri(google_label), :size => "200x200").to_s
|
26
|
+
GoogleQR.new(:data => ROTP::TOTP.new(google_secret_value, :issuer => google_issuer).provisioning_uri(google_label), :size => "200x200").to_s
|
27
27
|
end
|
28
28
|
|
29
29
|
def google_label
|
@@ -50,6 +50,10 @@ module GoogleAuthenticatorRails # :nodoc:
|
|
50
50
|
def google_secret_value
|
51
51
|
self.__send__(self.class.google_secret_column)
|
52
52
|
end
|
53
|
+
|
54
|
+
def google_issuer
|
55
|
+
self.class.google_issuer
|
56
|
+
end
|
53
57
|
end
|
54
58
|
end
|
55
59
|
end
|
@@ -11,19 +11,19 @@ describe GoogleAuthenticatorRails do
|
|
11
11
|
|
12
12
|
context 'counter = 1' do
|
13
13
|
let(:counter) { 1 }
|
14
|
-
it { should ==
|
14
|
+
it { should == 868864 }
|
15
15
|
end
|
16
16
|
|
17
17
|
context 'counter = 2' do
|
18
18
|
let(:counter) { 2 }
|
19
|
-
it { should ==
|
19
|
+
it { should == 304404 }
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
23
|
context 'time-based passwords' do
|
24
24
|
let(:time) { Time.parse("2012-08-07 11:11:11 AM +0700") }
|
25
25
|
let(:secret) { "test" }
|
26
|
-
let(:code) {
|
26
|
+
let(:code) { 922511 }
|
27
27
|
before { Time.stub!(:now).and_return(time) }
|
28
28
|
|
29
29
|
specify { GoogleAuthenticatorRails::time_based_password(secret).should == code }
|
@@ -47,7 +47,7 @@ describe GoogleAuthenticatorRails do
|
|
47
47
|
end
|
48
48
|
|
49
49
|
context 'code validation' do
|
50
|
-
subject { @user.google_authentic?(
|
50
|
+
subject { @user.google_authentic?(922511) }
|
51
51
|
|
52
52
|
it { should be true }
|
53
53
|
|
@@ -75,7 +75,7 @@ describe GoogleAuthenticatorRails do
|
|
75
75
|
end
|
76
76
|
|
77
77
|
it 'validates code' do
|
78
|
-
@user.google_authentic?(
|
78
|
+
@user.google_authentic?(922511).should be_true
|
79
79
|
end
|
80
80
|
|
81
81
|
it 'generates a url for a qr code' do
|
metadata
CHANGED
@@ -1,138 +1,120 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: google-authenticator-rails
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 0
|
9
|
-
- 7
|
10
|
-
version: 0.0.7
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.8
|
11
5
|
platform: ruby
|
12
|
-
authors:
|
6
|
+
authors:
|
13
7
|
- Jared McFarland
|
14
8
|
autorequire:
|
15
9
|
bindir: bin
|
16
10
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
- !ruby/object:Gem::Dependency
|
21
|
-
version_requirements: &id001 !ruby/object:Gem::Requirement
|
22
|
-
none: false
|
23
|
-
requirements:
|
24
|
-
- - "="
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
hash: 5
|
27
|
-
segments:
|
28
|
-
- 1
|
29
|
-
- 4
|
30
|
-
- 1
|
31
|
-
version: 1.4.1
|
32
|
-
prerelease: false
|
33
|
-
type: :runtime
|
11
|
+
date: 2014-02-10 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
34
14
|
name: rotp
|
35
|
-
requirement:
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 1.6.1
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 1.6.1
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: activerecord
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
40
31
|
- - <
|
41
|
-
- !ruby/object:Gem::Version
|
42
|
-
hash: 63
|
43
|
-
segments:
|
44
|
-
- 4
|
45
|
-
- 0
|
46
|
-
- 0
|
32
|
+
- !ruby/object:Gem::Version
|
47
33
|
version: 4.0.0
|
48
|
-
prerelease: false
|
49
34
|
type: :runtime
|
50
|
-
name: activerecord
|
51
|
-
requirement: *id002
|
52
|
-
- !ruby/object:Gem::Dependency
|
53
|
-
version_requirements: &id003 !ruby/object:Gem::Requirement
|
54
|
-
none: false
|
55
|
-
requirements:
|
56
|
-
- - ">="
|
57
|
-
- !ruby/object:Gem::Version
|
58
|
-
hash: 3
|
59
|
-
segments:
|
60
|
-
- 0
|
61
|
-
version: "0"
|
62
35
|
prerelease: false
|
63
|
-
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - <
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 4.0.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
64
42
|
name: google-qr
|
65
|
-
requirement:
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
- - ">="
|
71
|
-
- !ruby/object:Gem::Version
|
72
|
-
hash: 3
|
73
|
-
segments:
|
74
|
-
- 0
|
75
|
-
version: "0"
|
76
|
-
prerelease: false
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ! '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
77
48
|
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
78
56
|
name: actionpack
|
79
|
-
requirement:
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ! '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rspec
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
84
73
|
- - ~>
|
85
|
-
- !ruby/object:Gem::Version
|
86
|
-
hash: 47
|
87
|
-
segments:
|
88
|
-
- 2
|
89
|
-
- 8
|
90
|
-
- 0
|
74
|
+
- !ruby/object:Gem::Version
|
91
75
|
version: 2.8.0
|
92
|
-
prerelease: false
|
93
76
|
type: :development
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ~>
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 2.8.0
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: appraisal
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
100
87
|
- - ~>
|
101
|
-
- !ruby/object:Gem::Version
|
102
|
-
hash: 9
|
103
|
-
segments:
|
104
|
-
- 0
|
105
|
-
- 5
|
106
|
-
- 1
|
88
|
+
- !ruby/object:Gem::Version
|
107
89
|
version: 0.5.1
|
108
|
-
prerelease: false
|
109
90
|
type: :development
|
110
|
-
name: appraisal
|
111
|
-
requirement: *id006
|
112
|
-
- !ruby/object:Gem::Dependency
|
113
|
-
version_requirements: &id007 !ruby/object:Gem::Requirement
|
114
|
-
none: false
|
115
|
-
requirements:
|
116
|
-
- - ">="
|
117
|
-
- !ruby/object:Gem::Version
|
118
|
-
hash: 3
|
119
|
-
segments:
|
120
|
-
- 0
|
121
|
-
version: "0"
|
122
91
|
prerelease: false
|
123
|
-
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ~>
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 0.5.1
|
97
|
+
- !ruby/object:Gem::Dependency
|
124
98
|
name: sqlite3
|
125
|
-
requirement:
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ! '>='
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ! '>='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
126
111
|
description: Add the ability to use the Google Authenticator with ActiveRecord.
|
127
|
-
email:
|
112
|
+
email:
|
128
113
|
- jared.online@gmail.com
|
129
114
|
executables: []
|
130
|
-
|
131
115
|
extensions: []
|
132
|
-
|
133
116
|
extra_rdoc_files: []
|
134
|
-
|
135
|
-
files:
|
117
|
+
files:
|
136
118
|
- .gitignore
|
137
119
|
- .rspec
|
138
120
|
- .ruby-gemset
|
@@ -174,38 +156,28 @@ files:
|
|
174
156
|
- spec/spec_helper.rb
|
175
157
|
homepage: http://github.com/jaredonline/google-authenticator
|
176
158
|
licenses: []
|
177
|
-
|
159
|
+
metadata: {}
|
178
160
|
post_install_message:
|
179
161
|
rdoc_options: []
|
180
|
-
|
181
|
-
require_paths:
|
162
|
+
require_paths:
|
182
163
|
- lib
|
183
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
none: false
|
194
|
-
requirements:
|
195
|
-
- - ">="
|
196
|
-
- !ruby/object:Gem::Version
|
197
|
-
hash: 3
|
198
|
-
segments:
|
199
|
-
- 0
|
200
|
-
version: "0"
|
164
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
165
|
+
requirements:
|
166
|
+
- - ! '>='
|
167
|
+
- !ruby/object:Gem::Version
|
168
|
+
version: '0'
|
169
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - ! '>='
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
201
174
|
requirements: []
|
202
|
-
|
203
175
|
rubyforge_project:
|
204
|
-
rubygems_version:
|
176
|
+
rubygems_version: 2.2.1
|
205
177
|
signing_key:
|
206
|
-
specification_version:
|
178
|
+
specification_version: 4
|
207
179
|
summary: Add the ability to use the Google Authenticator with ActiveRecord.
|
208
|
-
test_files:
|
180
|
+
test_files:
|
209
181
|
- spec/action_controller/integration_spec.rb
|
210
182
|
- spec/action_controller/rails_adapter_spec.rb
|
211
183
|
- spec/google_authenticator_spec.rb
|