devise-authy 1.8.1 → 1.8.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 43cdeb8cb4ad691e2fd862700f74149d3a044c5b
4
- data.tar.gz: 1cfaaf8fada76bc386c70098e16d1fb387ee7bfe
2
+ SHA256:
3
+ metadata.gz: b4a21e73c3efd8c4368a9685a1034a6dd43028949d6427309ee0ebd646d5c147
4
+ data.tar.gz: a3eaac986e7eb6620333bd9a6ea21d5aaa4ec58983a92cd1bc3650f2e02c3fe5
5
5
  SHA512:
6
- metadata.gz: 94d1bde99b96301430f0f9d11c4153231dd5b1ac7b93c83cf76137801be6d691f0721213c5f652a8911dbad27d0c41f770fc7cdd064e516323469b18d2b6dc56
7
- data.tar.gz: 9e2c66955cbca3e78b4c66d8e500f3b79e1780d85262447e08d148fb563a94a49b5426bd4f2ef2c21a1212179b6fa0938ca674b2652cf673bf3481307dd4add0
6
+ metadata.gz: 100a286438cc5befc4c02249aff14c68fde76ad20a05f8ec740241e54b92c797abce24d3aacb449fca1c2de31c5320d4d5914b47be8de39b5a23cab5520b836b
7
+ data.tar.gz: 8c958b9a2d7b852917df7a130f25b62325783f5e31e2a800a7755428dddf2a3ec573d82d89e164011ac3f99e3a1b1fa76a701e66e8d9f94a1dd5bf4ee77bfb31
data/Gemfile CHANGED
@@ -1,11 +1,11 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
3
  gem 'devise', '>= 3.0.0'
4
- gem 'authy'
4
+ gem 'authy', ">= 2.7.2"
5
5
 
6
6
  group :development do
7
7
  gem 'rspec', '> 3.0.0'
8
- gem 'yard'
8
+ gem 'yard', "~> 0.9.11"
9
9
  gem 'rdoc'
10
10
  gem 'bundler'
11
11
  gem 'jeweler', '>= 2.0.1'
data/README.md CHANGED
@@ -53,7 +53,8 @@ Change the default routes to point to something sane like:
53
53
  devise_for :users, :path_names => {
54
54
  :verify_authy => "/verify-token",
55
55
  :enable_authy => "/enable-two-factor",
56
- :verify_authy_installation => "/verify-installation"
56
+ :verify_authy_installation => "/verify-installation",
57
+ :authy_onetouch_status => "/onetouch-status"
57
58
  }
58
59
  ```
59
60
 
@@ -136,6 +137,14 @@ session["#{resource_name}_authy_token_checked"]
136
137
  session["user_authy_token_checked"]
137
138
  ```
138
139
 
140
+ ## OneTouch support
141
+
142
+ To enable the OneTouch feature, you need to modify the Devise config file `config/initializers/devise.rb` and add configuration:
143
+
144
+ ```
145
+ config.authy_enable_onetouch = true
146
+ ```
147
+
139
148
 
140
149
  ## Running Tests
141
150
 
@@ -151,6 +160,12 @@ Now on the project root run the following commands:
151
160
  $ bundle exec rspec spec/
152
161
  ```
153
162
 
163
+ ## Backporting to Rails 3
164
+
165
+ While we are not currently supporting Rails 3, there's an active fork that maintains the backwards compatibility.
166
+
167
+ https://github.com/gcosta/authy-devise
168
+
154
169
  ## Copyright
155
170
 
156
171
  Copyright (c) 2012-2020 Authy Inc. See LICENSE.txt for
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.8.1
1
+ 1.8.2
@@ -3,7 +3,7 @@ class Devise::DeviseAuthyController < DeviseController
3
3
  :request_phone_call, :request_sms
4
4
  ]
5
5
  prepend_before_action :find_resource_and_require_password_checked, :only => [
6
- :GET_verify_authy, :POST_verify_authy
6
+ :GET_verify_authy, :POST_verify_authy, :GET_authy_onetouch_status
7
7
  ]
8
8
  prepend_before_action :authenticate_scope!, :only => [
9
9
  :GET_enable_authy, :POST_enable_authy,
@@ -14,6 +14,10 @@ class Devise::DeviseAuthyController < DeviseController
14
14
 
15
15
  def GET_verify_authy
16
16
  @authy_id = @resource.authy_id
17
+ if resource_class.authy_enable_onetouch
18
+ approval_request = send_one_touch_request['approval_request']
19
+ @onetouch_uuid = approval_request['uuid'] if approval_request.present?
20
+ end
17
21
  render :verify_authy
18
22
  end
19
23
 
@@ -26,17 +30,11 @@ class Devise::DeviseAuthyController < DeviseController
26
30
  })
27
31
 
28
32
  if token.ok?
29
- @resource.update_attribute(:last_sign_in_with_authy, DateTime.now)
30
-
31
- session["#{resource_name}_authy_token_checked"] = true
32
-
33
33
  remember_device if params[:remember_device].to_i == 1
34
34
  if session.delete("#{resource_name}_remember_me") == true && @resource.respond_to?(:remember_me=)
35
35
  @resource.remember_me = true
36
36
  end
37
- sign_in(resource_name, @resource)
38
-
39
- set_flash_message(:notice, :signed_in) if is_navigational_format?
37
+ record_authy_authentication
40
38
  respond_with resource, :location => after_sign_in_path_for(@resource)
41
39
  else
42
40
  handle_invalid_token :verify_authy, :invalid_token
@@ -112,6 +110,21 @@ class Devise::DeviseAuthyController < DeviseController
112
110
  handle_invalid_token :verify_authy_installation, :not_enabled
113
111
  end
114
112
  end
113
+
114
+ def GET_authy_onetouch_status
115
+ status = Authy::API.get_request("onetouch/json/approval_requests/#{params[:onetouch_uuid]}")['approval_request']['status']
116
+ case status
117
+ when 'pending'
118
+ head 202
119
+ when 'approved'
120
+ record_authy_authentication
121
+ render json: { redirect: after_sign_in_path_for(@resource) }
122
+ when 'denied'
123
+ head :unauthorized
124
+ else
125
+ head :error
126
+ end
127
+ end
115
128
 
116
129
  def request_phone_call
117
130
  unless @resource
@@ -19,3 +19,19 @@
19
19
  <%= authy_request_sms_link %>
20
20
  <%= submit_tag I18n.t('submit_token', {:scope => 'devise'}), :class => 'btn' %>
21
21
  <% end %>
22
+
23
+ <% if @onetouch_uuid %>
24
+ <script>
25
+ (function(){
26
+ var onetouchInterval = setInterval(function(){
27
+ var onetouchRequest = new XMLHttpRequest();
28
+ onetouchRequest.addEventListener("load", function(){
29
+ if(this.status != 202) clearInterval(onetouchInterval);
30
+ if(this.status == 200) window.location = JSON.parse(this.responseText).redirect;
31
+ });
32
+ onetouchRequest.open("GET", "<%= polymorphic_path [resource_name, :authy_onetouch_status] %>?onetouch_uuid=<%= @onetouch_uuid %>");
33
+ onetouchRequest.send();
34
+ }, 3000);
35
+ })();
36
+ </script>
37
+ <% end %>
@@ -16,3 +16,17 @@
16
16
 
17
17
  = authy_request_sms_link
18
18
  = submit_tag I18n.t('submit_token', {:scope => 'devise'}), :class => 'btn'
19
+
20
+ - if @onetouch_uuid
21
+ :javascript
22
+ (function(){
23
+ var onetouchInterval = setInterval(function(){
24
+ var onetouchRequest = new XMLHttpRequest();
25
+ onetouchRequest.addEventListener("load", function(){
26
+ if(this.status != 202) clearInterval(onetouchInterval);
27
+ if(this.status == 200) window.location = JSON.parse(this.responseText).redirect;
28
+ });
29
+ onetouchRequest.open("GET", "<%= polymorphic_path [resource_name, :authy_onetouch_status] %>?onetouch_uuid=<%= @onetouch_uuid %>");
30
+ onetouchRequest.send();
31
+ }, 3000);
32
+ })();
@@ -1,8 +1,8 @@
1
1
  PATH
2
2
  remote: ..
3
3
  specs:
4
- devise-authy (1.8.0)
5
- authy
4
+ devise-authy (1.8.1)
5
+ authy (>= 2.4.2)
6
6
  devise (>= 3.0.0)
7
7
 
8
8
  GEM
@@ -76,7 +76,7 @@ GEM
76
76
  execjs (2.7.0)
77
77
  globalid (0.3.7)
78
78
  activesupport (>= 4.1.0)
79
- httpclient (2.8.2.4)
79
+ httpclient (2.8.3)
80
80
  i18n (0.7.0)
81
81
  jbuilder (2.6.0)
82
82
  activesupport (>= 3.0.0, < 5.1)
@@ -191,4 +191,4 @@ DEPENDENCIES
191
191
  web-console (~> 2.0)
192
192
 
193
193
  BUNDLED WITH
194
- 1.12.5
194
+ 1.16.0
@@ -20,3 +20,19 @@
20
20
  <%= authy_request_phone_call_link %>
21
21
  <%= submit_tag I18n.t('submit_token', {:scope => 'devise'}), :class => 'btn' %>
22
22
  <% end %>
23
+
24
+ <% if @onetouch_uuid %>
25
+ <script>
26
+ (function(){
27
+ var onetouchInterval = setInterval(function(){
28
+ var onetouchRequest = new XMLHttpRequest();
29
+ onetouchRequest.addEventListener("load", function(){
30
+ if(this.status != 202) clearInterval(onetouchInterval);
31
+ if(this.status == 200) window.location = JSON.parse(this.responseText).redirect;
32
+ });
33
+ onetouchRequest.open("GET", "<%= polymorphic_path [resource_name, :authy_onetouch_status] %>?onetouch_uuid=<%= @onetouch_uuid %>");
34
+ onetouchRequest.send();
35
+ }, 3000);
36
+ })();
37
+ </script>
38
+ <% end %>
@@ -5,6 +5,9 @@ Devise.setup do |config|
5
5
  # ==> Devise Authy Authentication Extension
6
6
  # How long should the user's device be remembered for.
7
7
  # config.authy_remember_device = 1.month
8
+ #
9
+ # Should Authy OneTouch be enabled?
10
+ config.authy_enable_onetouch = true
8
11
 
9
12
  # ==> Mailer Configuration
10
13
  # Configure the e-mail address which will be shown in Devise::Mailer,
@@ -2,16 +2,16 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: devise-authy 1.8.1 ruby lib
5
+ # stub: devise-authy 1.8.2 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "devise-authy".freeze
9
- s.version = "1.8.1"
9
+ s.version = "1.8.2"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib".freeze]
13
13
  s.authors = ["Authy Inc.".freeze]
14
- s.date = "2016-12-06"
14
+ s.date = "2017-12-22"
15
15
  s.description = "Authy plugin for Devise".freeze
16
16
  s.email = "support@authy.com".freeze
17
17
  s.extra_rdoc_files = [
@@ -200,7 +200,7 @@ Gem::Specification.new do |s|
200
200
  ]
201
201
  s.homepage = "https://github.com/authy/authy-devise".freeze
202
202
  s.licenses = ["MIT".freeze]
203
- s.rubygems_version = "2.6.7".freeze
203
+ s.rubygems_version = "2.7.3".freeze
204
204
  s.summary = "Authy plugin for Devise".freeze
205
205
 
206
206
  if s.respond_to? :specification_version then
@@ -208,9 +208,9 @@ Gem::Specification.new do |s|
208
208
 
209
209
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
210
210
  s.add_runtime_dependency(%q<devise>.freeze, [">= 3.0.0"])
211
- s.add_runtime_dependency(%q<authy>.freeze, [">= 0"])
211
+ s.add_runtime_dependency(%q<authy>.freeze, [">= 2.7.2"])
212
212
  s.add_development_dependency(%q<rspec>.freeze, ["> 3.0.0"])
213
- s.add_development_dependency(%q<yard>.freeze, [">= 0"])
213
+ s.add_development_dependency(%q<yard>.freeze, ["~> 0.9.11"])
214
214
  s.add_development_dependency(%q<rdoc>.freeze, [">= 0"])
215
215
  s.add_development_dependency(%q<bundler>.freeze, [">= 0"])
216
216
  s.add_development_dependency(%q<jeweler>.freeze, [">= 2.0.1"])
@@ -218,9 +218,9 @@ Gem::Specification.new do |s|
218
218
  s.add_development_dependency(%q<byebug>.freeze, [">= 0"])
219
219
  else
220
220
  s.add_dependency(%q<devise>.freeze, [">= 3.0.0"])
221
- s.add_dependency(%q<authy>.freeze, [">= 0"])
221
+ s.add_dependency(%q<authy>.freeze, [">= 2.7.2"])
222
222
  s.add_dependency(%q<rspec>.freeze, ["> 3.0.0"])
223
- s.add_dependency(%q<yard>.freeze, [">= 0"])
223
+ s.add_dependency(%q<yard>.freeze, ["~> 0.9.11"])
224
224
  s.add_dependency(%q<rdoc>.freeze, [">= 0"])
225
225
  s.add_dependency(%q<bundler>.freeze, [">= 0"])
226
226
  s.add_dependency(%q<jeweler>.freeze, [">= 2.0.1"])
@@ -229,9 +229,9 @@ Gem::Specification.new do |s|
229
229
  end
230
230
  else
231
231
  s.add_dependency(%q<devise>.freeze, [">= 3.0.0"])
232
- s.add_dependency(%q<authy>.freeze, [">= 0"])
232
+ s.add_dependency(%q<authy>.freeze, [">= 2.7.2"])
233
233
  s.add_dependency(%q<rspec>.freeze, ["> 3.0.0"])
234
- s.add_dependency(%q<yard>.freeze, [">= 0"])
234
+ s.add_dependency(%q<yard>.freeze, ["~> 0.9.11"])
235
235
  s.add_dependency(%q<rdoc>.freeze, [">= 0"])
236
236
  s.add_dependency(%q<bundler>.freeze, [">= 0"])
237
237
  s.add_dependency(%q<jeweler>.freeze, [">= 2.0.1"])
@@ -4,8 +4,9 @@ require 'devise'
4
4
  require 'authy'
5
5
 
6
6
  module Devise
7
- mattr_accessor :authy_remember_device
7
+ mattr_accessor :authy_remember_device, :authy_enable_onetouch
8
8
  @@authy_remember_device = 1.month
9
+ @@authy_enable_onetouch = false
9
10
  end
10
11
 
11
12
  module DeviseAuthy
@@ -70,6 +70,17 @@ module DeviseAuthy
70
70
  scope = Devise::Mapping.find_scope!(resource_or_scope)
71
71
  send(:"#{scope}_verify_authy_path")
72
72
  end
73
+
74
+ def send_one_touch_request
75
+ Authy::OneTouch.send_approval_request(id: @authy_id, message: 'Request to Login')
76
+ end
77
+
78
+ def record_authy_authentication
79
+ @resource.update_attribute(:last_sign_in_with_authy, DateTime.now)
80
+ session["#{resource_name}_authy_token_checked"] = true
81
+ sign_in(resource_name, @resource)
82
+ set_flash_message(:notice, :signed_in) if is_navigational_format?
83
+ end
73
84
  end
74
85
  end
75
86
  end
@@ -17,7 +17,7 @@ module Devise
17
17
  where(authy_id: authy_id).first
18
18
  end
19
19
 
20
- Devise::Models.config(self, :authy_remember_device)
20
+ Devise::Models.config(self, :authy_remember_device, :authy_enable_onetouch)
21
21
  end
22
22
  end
23
23
  end
@@ -14,6 +14,7 @@ module ActionDispatch::Routing
14
14
  match "/#{mapping.path_names[:verify_authy_installation]}", :controller => controllers[:devise_authy], :action => :GET_verify_authy_installation, :as => :verify_authy_installation, :via => :get
15
15
  match "/#{mapping.path_names[:verify_authy_installation]}", :controller => controllers[:devise_authy], :action => :POST_verify_authy_installation, :as => nil, :via => :post
16
16
 
17
+ match "/#{mapping.path_names[:authy_onetouch_status]}", :controller => controllers[:devise_authy], :action => :GET_authy_onetouch_status, as: :authy_onetouch_status, via: :get
17
18
 
18
19
  match "/request-sms", :controller => controllers[:devise_authy], :action => :request_sms, :as => :request_sms, :via => :post
19
20
  match "/request-phone-call", :controller => controllers[:devise_authy], :action => :request_phone_call, :as => :request_phone_call, :via => :post
@@ -13,7 +13,10 @@ module DeviseAuthy
13
13
  inject_into_file "config/initializers/devise.rb", "\n" +
14
14
  " # ==> Devise Authy Authentication Extension\n" +
15
15
  " # How long should the user's device be remembered for.\n" +
16
- " # config.authy_remember_device = 1.month\n\n", :after => "Devise.setup do |config|\n"
16
+ " # config.authy_remember_device = 1.month\n\n" +
17
+ " # Should Authy OneTouch be enabled?\n" +
18
+ " # config.authy_enable_onetouch = false\n\n", :after => "Devise.setup do |config|\n"
19
+
17
20
  end
18
21
 
19
22
  def add_initializer
@@ -9,11 +9,34 @@ describe Devise::DeviseAuthyController, type: :controller do
9
9
  end
10
10
 
11
11
  describe "GET #verify_authy" do
12
- it "Should render the second step of authentication" do
13
- request.session["user_id"] = @user.id
14
- request.session["user_password_checked"] = true
15
- get :GET_verify_authy
16
- expect(response).to render_template('verify_authy')
12
+ describe "when the first step of authentication is complete" do
13
+ before do
14
+ request.session["user_id"] = @user.id
15
+ request.session["user_password_checked"] = true
16
+ end
17
+
18
+ it "Should render the second step of authentication" do
19
+ get :GET_verify_authy
20
+ expect(response).to render_template('verify_authy')
21
+ end
22
+
23
+ it "should not make a OneTouch request" do
24
+ expect(Authy::OneTouch).not_to receive(:send_approval_request)
25
+ get :GET_verify_authy
26
+ end
27
+
28
+ describe "when OneTouch is enabled" do
29
+ before do
30
+ allow(User).to receive(:authy_enable_onetouch).and_return(true)
31
+ end
32
+
33
+ it "should make a OneTouch request" do
34
+ expect(Authy::OneTouch).to receive(:send_approval_request)
35
+ .with(id: @user.authy_id, message: 'Request to Login')
36
+ .and_return('approval_request' => { 'uuid' => 'uuid' }).once
37
+ get :GET_verify_authy
38
+ end
39
+ end
17
40
  end
18
41
 
19
42
  it "Should no render the second step of authentication if first step is incomplete" do
@@ -26,6 +49,11 @@ describe Devise::DeviseAuthyController, type: :controller do
26
49
  get :GET_verify_authy
27
50
  expect(response).to redirect_to(root_url)
28
51
  end
52
+
53
+ it "should not make a OneTouch request" do
54
+ expect(Authy::OneTouch).not_to receive(:send_approval_request)
55
+ get :GET_verify_authy
56
+ end
29
57
  end
30
58
 
31
59
  describe "POST #verify_authy" do
@@ -269,4 +297,55 @@ describe Devise::DeviseAuthyController, type: :controller do
269
297
  expect(body['message']).to eq("User couldn't be found.")
270
298
  end
271
299
  end
300
+
301
+ describe "GET #authy_onetouch_status" do
302
+ # OneTouch stubbed due to test API key not having OneTouch enabled
303
+ before do
304
+ allow(Authy::OneTouch).to receive(:send_approval_request).with(id: @user.authy_id) { { 'approval_request' => { 'uuid' => SecureRandom.uuid } } }
305
+ @uuid = Authy::OneTouch.send_approval_request(id: @user.authy_id)['approval_request']['uuid']
306
+ end
307
+
308
+ it "Should return a 202 status code when pending" do
309
+ allow(Authy::API).to receive(:get_request).with(/onetouch\/json\/approval_requests\/.+/) { { 'approval_request' => { 'status' => 'pending' } } }
310
+ request.session["user_id"] = @user.id
311
+ request.session["user_password_checked"] = true
312
+ get :GET_authy_onetouch_status, onetouch_uuid: @uuid
313
+ expect(response.code).to eq("202")
314
+ end
315
+
316
+ it "Should return a 401 status code when denied" do
317
+ allow(Authy::API).to receive(:get_request).with(/onetouch\/json\/approval_requests\/.+/) { { 'approval_request' => { 'status' => 'denied' } } }
318
+ request.session["user_id"] = @user.id
319
+ request.session["user_password_checked"] = true
320
+ get :GET_authy_onetouch_status, onetouch_uuid: @uuid
321
+ expect(response.code).to eq("401")
322
+ end
323
+
324
+ it "Should return a 200 status code when approved" do
325
+ allow(Authy::API).to receive(:get_request).with(/onetouch\/json\/approval_requests\/.+/) { { 'approval_request' => { 'status' => 'approved' } } }
326
+ request.session["user_id"] = @user.id
327
+ request.session["user_password_checked"] = true
328
+ get :GET_authy_onetouch_status, onetouch_uuid: @uuid
329
+ expect(response.code).to eq("200")
330
+ end
331
+
332
+ it "Should render a JSON object with the redirect path when approved" do
333
+ allow(Authy::API).to receive(:get_request).with(/onetouch\/json\/approval_requests\/.+/) { { 'approval_request' => { 'status' => 'approved' } } }
334
+ request.session["user_id"] = @user.id
335
+ request.session["user_password_checked"] = true
336
+ get :GET_authy_onetouch_status, onetouch_uuid: @uuid
337
+ expect(response.body).to eq({ redirect: root_path }.to_json)
338
+ end
339
+
340
+ it "Should not render the second step of authentication if first step is incomplete" do
341
+ request.session["user_id"] = @user.id
342
+ get :GET_authy_onetouch_status
343
+ expect(response).to redirect_to(root_url)
344
+ end
345
+
346
+ it "should redirect to root_url" do
347
+ get :GET_authy_onetouch_status
348
+ expect(response).to redirect_to(root_url)
349
+ end
350
+ end
272
351
  end
@@ -1,126 +1,127 @@
1
1
  PATH
2
2
  remote: ../..
3
3
  specs:
4
- devise-authy (1.8.1)
5
- authy
4
+ devise-authy (1.8.2)
5
+ authy (>= 2.7.2)
6
6
  devise (>= 3.0.0)
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
10
10
  specs:
11
- actionmailer (4.2.7.1)
12
- actionpack (= 4.2.7.1)
13
- actionview (= 4.2.7.1)
14
- activejob (= 4.2.7.1)
11
+ actionmailer (4.2.10)
12
+ actionpack (= 4.2.10)
13
+ actionview (= 4.2.10)
14
+ activejob (= 4.2.10)
15
15
  mail (~> 2.5, >= 2.5.4)
16
16
  rails-dom-testing (~> 1.0, >= 1.0.5)
17
- actionpack (4.2.7.1)
18
- actionview (= 4.2.7.1)
19
- activesupport (= 4.2.7.1)
17
+ actionpack (4.2.10)
18
+ actionview (= 4.2.10)
19
+ activesupport (= 4.2.10)
20
20
  rack (~> 1.6)
21
21
  rack-test (~> 0.6.2)
22
22
  rails-dom-testing (~> 1.0, >= 1.0.5)
23
23
  rails-html-sanitizer (~> 1.0, >= 1.0.2)
24
- actionview (4.2.7.1)
25
- activesupport (= 4.2.7.1)
24
+ actionview (4.2.10)
25
+ activesupport (= 4.2.10)
26
26
  builder (~> 3.1)
27
27
  erubis (~> 2.7.0)
28
28
  rails-dom-testing (~> 1.0, >= 1.0.5)
29
- rails-html-sanitizer (~> 1.0, >= 1.0.2)
30
- activejob (4.2.7.1)
31
- activesupport (= 4.2.7.1)
29
+ rails-html-sanitizer (~> 1.0, >= 1.0.3)
30
+ activejob (4.2.10)
31
+ activesupport (= 4.2.10)
32
32
  globalid (>= 0.3.0)
33
- activemodel (4.2.7.1)
34
- activesupport (= 4.2.7.1)
33
+ activemodel (4.2.10)
34
+ activesupport (= 4.2.10)
35
35
  builder (~> 3.1)
36
- activerecord (4.2.7.1)
37
- activemodel (= 4.2.7.1)
38
- activesupport (= 4.2.7.1)
36
+ activerecord (4.2.10)
37
+ activemodel (= 4.2.10)
38
+ activesupport (= 4.2.10)
39
39
  arel (~> 6.0)
40
- activesupport (4.2.7.1)
40
+ activesupport (4.2.10)
41
41
  i18n (~> 0.7)
42
- json (~> 1.7, >= 1.7.7)
43
42
  minitest (~> 5.1)
44
43
  thread_safe (~> 0.3, >= 0.3.4)
45
44
  tzinfo (~> 1.1)
46
- addressable (2.4.0)
47
- arel (6.0.3)
48
- authy (2.7.1)
45
+ addressable (2.5.2)
46
+ public_suffix (>= 2.0.2, < 4.0)
47
+ arel (6.0.4)
48
+ authy (2.7.2)
49
49
  httpclient (>= 2.5.3.3)
50
50
  bcrypt (3.1.11)
51
- builder (3.2.2)
52
- concurrent-ruby (1.0.2)
53
- devise (4.2.0)
51
+ builder (3.2.3)
52
+ concurrent-ruby (1.0.5)
53
+ crass (1.0.3)
54
+ devise (4.3.0)
54
55
  bcrypt (~> 3.0)
55
56
  orm_adapter (~> 0.1)
56
- railties (>= 4.1.0, < 5.1)
57
+ railties (>= 4.1.0, < 5.2)
57
58
  responders
58
59
  warden (~> 1.2.3)
59
60
  erubis (2.7.0)
60
- globalid (0.3.7)
61
- activesupport (>= 4.1.0)
62
- httpclient (2.8.2.3)
63
- i18n (0.7.0)
64
- json (1.8.3)
61
+ globalid (0.4.1)
62
+ activesupport (>= 4.2.0)
63
+ httpclient (2.8.3)
64
+ i18n (0.9.1)
65
+ concurrent-ruby (~> 1.0)
66
+ json (2.1.0)
65
67
  launchy (2.4.3)
66
68
  addressable (~> 2.3)
67
- loofah (2.0.3)
69
+ loofah (2.1.1)
70
+ crass (~> 1.0.2)
68
71
  nokogiri (>= 1.5.9)
69
- mail (2.6.4)
70
- mime-types (>= 1.16, < 4)
71
- mime-types (3.1)
72
- mime-types-data (~> 3.2015)
73
- mime-types-data (3.2016.0521)
74
- mini_portile2 (2.1.0)
75
- minitest (5.9.0)
76
- nokogiri (1.6.8)
77
- mini_portile2 (~> 2.1.0)
78
- pkg-config (~> 1.1.7)
72
+ mail (2.7.0)
73
+ mini_mime (>= 0.1.1)
74
+ mini_mime (1.0.0)
75
+ mini_portile2 (2.3.0)
76
+ minitest (5.10.3)
77
+ nokogiri (1.8.1)
78
+ mini_portile2 (~> 2.3.0)
79
79
  orm_adapter (0.5.0)
80
- pkg-config (1.1.7)
81
- rack (1.6.4)
80
+ public_suffix (3.0.1)
81
+ rack (1.6.8)
82
82
  rack-test (0.6.3)
83
83
  rack (>= 1.0)
84
- rails (4.2.7.1)
85
- actionmailer (= 4.2.7.1)
86
- actionpack (= 4.2.7.1)
87
- actionview (= 4.2.7.1)
88
- activejob (= 4.2.7.1)
89
- activemodel (= 4.2.7.1)
90
- activerecord (= 4.2.7.1)
91
- activesupport (= 4.2.7.1)
84
+ rails (4.2.10)
85
+ actionmailer (= 4.2.10)
86
+ actionpack (= 4.2.10)
87
+ actionview (= 4.2.10)
88
+ activejob (= 4.2.10)
89
+ activemodel (= 4.2.10)
90
+ activerecord (= 4.2.10)
91
+ activesupport (= 4.2.10)
92
92
  bundler (>= 1.3.0, < 2.0)
93
- railties (= 4.2.7.1)
93
+ railties (= 4.2.10)
94
94
  sprockets-rails
95
95
  rails-deprecated_sanitizer (1.0.3)
96
96
  activesupport (>= 4.2.0.alpha)
97
- rails-dom-testing (1.0.7)
97
+ rails-dom-testing (1.0.8)
98
98
  activesupport (>= 4.2.0.beta, < 5.0)
99
- nokogiri (~> 1.6.0)
99
+ nokogiri (~> 1.6)
100
100
  rails-deprecated_sanitizer (>= 1.0.1)
101
101
  rails-html-sanitizer (1.0.3)
102
102
  loofah (~> 2.0)
103
- railties (4.2.7.1)
104
- actionpack (= 4.2.7.1)
105
- activesupport (= 4.2.7.1)
103
+ railties (4.2.10)
104
+ actionpack (= 4.2.10)
105
+ activesupport (= 4.2.10)
106
106
  rake (>= 0.8.7)
107
107
  thor (>= 0.18.1, < 2.0)
108
- rake (11.2.2)
109
- responders (2.3.0)
110
- railties (>= 4.2.0, < 5.1)
111
- sprockets (3.7.0)
108
+ rake (12.3.0)
109
+ responders (2.4.0)
110
+ actionpack (>= 4.2.0, < 5.3)
111
+ railties (>= 4.2.0, < 5.3)
112
+ sprockets (3.7.1)
112
113
  concurrent-ruby (~> 1.0)
113
114
  rack (> 1, < 3)
114
- sprockets-rails (3.2.0)
115
+ sprockets-rails (3.2.1)
115
116
  actionpack (>= 4.0)
116
117
  activesupport (>= 4.0)
117
118
  sprockets (>= 3.0.0)
118
- sqlite3 (1.3.11)
119
- thor (0.19.1)
120
- thread_safe (0.3.5)
121
- tzinfo (1.2.2)
119
+ sqlite3 (1.3.13)
120
+ thor (0.20.0)
121
+ thread_safe (0.3.6)
122
+ tzinfo (1.2.4)
122
123
  thread_safe (~> 0.1)
123
- warden (1.2.6)
124
+ warden (1.2.7)
124
125
  rack (>= 1.0)
125
126
 
126
127
  PLATFORMS
@@ -137,4 +138,4 @@ DEPENDENCIES
137
138
  sqlite3
138
139
 
139
140
  BUNDLED WITH
140
- 1.12.5
141
+ 1.16.0
@@ -19,3 +19,19 @@
19
19
  <%= authy_request_sms_link %>
20
20
  <%= submit_tag I18n.t('submit_token', {:scope => 'devise'}), :class => 'btn' %>
21
21
  <% end %>
22
+
23
+ <% if @onetouch_uuid %>
24
+ <script>
25
+ (function(){
26
+ setInterval(function(){
27
+ var onetouchRequest = new XMLHttpRequest();
28
+ onetouchRequest.addEventListener("load", function(){
29
+ if(this.status != 202) clearInterval(onetouch_status);
30
+ if(this.status == 200) window.location = JSON.parse(this.responseText).redirect;
31
+ });
32
+ onetouchRequest.open("GET", "#{polymorphic_path [resource_name, :authy_onetouch_status]}?onetouch_uuid=#{@onetouch_uuid}");
33
+ onetouchRequest.send();
34
+ }, 3000);
35
+ })();
36
+ </script>
37
+ <% end %>
@@ -1,6 +1,14 @@
1
1
  # Use this hook to configure devise mailer, warden hooks and so forth.
2
2
  # Many of these configuration options can be set straight in your model.
3
3
  Devise.setup do |config|
4
+
5
+ # ==> Devise Authy Authentication Extension
6
+ # How long should the user's device be remembered for.
7
+ # config.authy_remember_device = 1.month
8
+
9
+ # Should Authy OneTouch be enabled?
10
+ # config.authy_enable_onetouch = false
11
+
4
12
  # ==> Mailer Configuration
5
13
  # Configure the e-mail address which will be shown in Devise::Mailer,
6
14
  # note that it will be overwritten if you use your own mailer class with default "from" parameter.
@@ -241,5 +249,8 @@ Devise.setup do |config|
241
249
  # ==> Devise Authy Authentication Extension
242
250
  # How long should the user's device be remembered for.
243
251
  # config.authy_remember_device = 1.month
252
+ #
253
+ # Should Authy OneTouch be enabled?
254
+ # config.authy_enable_onetouch = false
244
255
 
245
256
  end
@@ -28,4 +28,8 @@ describe "routes for devise_authy" do
28
28
  it "routes to devise_authy#request_sms" do
29
29
  expect(post('/users/request-sms')).to route_to("devise/devise_authy#request_sms")
30
30
  end
31
+
32
+ it "routes to devise_authy#GET_authy_onetouch_status" do
33
+ expect(get('/users/authy_onetouch_status')).to route_to("devise/devise_authy#GET_authy_onetouch_status")
34
+ end
31
35
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: devise-authy
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.8.1
4
+ version: 1.8.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Authy Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-12-06 00:00:00.000000000 Z
11
+ date: 2017-12-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: devise
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '0'
33
+ version: 2.7.2
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '0'
40
+ version: 2.7.2
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -56,16 +56,16 @@ dependencies:
56
56
  name: yard
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ">="
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0'
61
+ version: 0.9.11
62
62
  type: :development
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: '0'
68
+ version: 0.9.11
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rdoc
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -342,7 +342,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
342
342
  version: '0'
343
343
  requirements: []
344
344
  rubyforge_project:
345
- rubygems_version: 2.6.7
345
+ rubygems_version: 2.7.3
346
346
  signing_key:
347
347
  specification_version: 4
348
348
  summary: Authy plugin for Devise