devise-authy 1.10.0 → 2.2.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/.gitignore +5 -4
- data/.rspec +1 -0
- data/.travis.yml +8 -3
- data/Appraisals +21 -0
- data/CHANGELOG.md +80 -2
- data/Gemfile +0 -23
- data/README.md +90 -20
- data/app/controllers/devise/devise_authy_controller.rb +63 -22
- data/app/controllers/devise_authy/passwords_controller.rb +18 -0
- data/app/views/devise/verify_authy.html.erb +5 -4
- data/app/views/devise/verify_authy.html.haml +4 -3
- data/app/views/devise/verify_authy_installation.html.erb +11 -3
- data/app/views/devise/verify_authy_installation.html.haml +9 -1
- data/config.ru +9 -0
- data/config/locales/en.yml +3 -0
- data/devise-authy.gemspec +22 -12
- data/gemfiles/.bundle/config +2 -0
- data/gemfiles/rails_5_2.gemfile +15 -0
- data/gemfiles/rails_6.gemfile +15 -0
- data/lib/devise-authy.rb +4 -1
- data/lib/devise-authy/controllers/helpers.rb +5 -5
- data/lib/devise-authy/mapping.rb +7 -0
- data/lib/devise-authy/models/authy_authenticatable.rb +1 -1
- data/lib/devise-authy/routes.rb +2 -2
- data/lib/devise-authy/version.rb +1 -1
- data/lib/generators/active_record/devise_authy_generator.rb +3 -3
- data/lib/generators/devise_authy/devise_authy_generator.rb +4 -2
- data/lib/generators/devise_authy/install_generator.rb +9 -5
- metadata +164 -20
@@ -1,4 +1,22 @@
|
|
1
1
|
class DeviseAuthy::PasswordsController < Devise::PasswordsController
|
2
|
+
##
|
3
|
+
# In the passwords controller a user can update their password using a
|
4
|
+
# recovery token. If `Devise.sign_in_after_reset_password` is `true` then the
|
5
|
+
# user is signed in immediately with the
|
6
|
+
# `Devise::Controllers::SignInOut#sign_in` method. However, if the user has
|
7
|
+
# 2FA enabled they should enter their second factor before they are signed in.
|
8
|
+
#
|
9
|
+
# This method overrides `Devise::Controllers::SignInOut#sign_in` but only
|
10
|
+
# within the `Devise::PasswordsController`. If the user needs to verify 2FA
|
11
|
+
# then `sign_in` returns `true`. This short circuits the method before it can
|
12
|
+
# call `warden.set_user` and log the user in.
|
13
|
+
#
|
14
|
+
# The user is redirected to `after_resetting_password_path_for(user)` at which
|
15
|
+
# point, since the user is not logged in, redirects again to sign in.
|
16
|
+
#
|
17
|
+
# This doesn't retain the expected behaviour of
|
18
|
+
# `Devise.sign_in_after_reset_password`, but is forgivable because this
|
19
|
+
# shouldn't be an avenue to bypass 2FA.
|
2
20
|
def sign_in(resource_or_scope, *args)
|
3
21
|
resource = args.last || resource_or_scope
|
4
22
|
|
@@ -1,11 +1,11 @@
|
|
1
1
|
<h2>
|
2
|
-
<%= I18n.t('
|
2
|
+
<%= I18n.t('submit_token_title', {:scope => 'devise'}) %>
|
3
3
|
</h2>
|
4
4
|
|
5
5
|
<%= verify_authy_form do %>
|
6
6
|
<legend><%= I18n.t('submit_token_title', {:scope => 'devise'}) %></legend>
|
7
|
-
<%= label_tag
|
8
|
-
<%= text_field_tag :token, "", :autocomplete => :
|
7
|
+
<%= label_tag 'authy-token' %>
|
8
|
+
<%= text_field_tag :token, "", :autocomplete => "one-time-code", :inputmode => "numeric", :pattern => "[0-9]*", :id => 'authy-token' %>
|
9
9
|
<label>
|
10
10
|
<%= check_box_tag :remember_device %>
|
11
11
|
<span><%= I18n.t('remember_device', {:scope => 'devise'}) %></span>
|
@@ -25,11 +25,12 @@
|
|
25
25
|
(function(){
|
26
26
|
var onetouchInterval = setInterval(function(){
|
27
27
|
var onetouchRequest = new XMLHttpRequest();
|
28
|
+
var rememberDevice = document.getElementById("remember_device").checked ? '1' : '0';
|
28
29
|
onetouchRequest.addEventListener("load", function(){
|
29
30
|
if(this.status != 202) clearInterval(onetouchInterval);
|
30
31
|
if(this.status == 200) window.location = JSON.parse(this.responseText).redirect;
|
31
32
|
});
|
32
|
-
onetouchRequest.open("GET", "<%= polymorphic_path [resource_name, :authy_onetouch_status] %>?onetouch_uuid=<%= @onetouch_uuid %>");
|
33
|
+
onetouchRequest.open("GET", "<%= polymorphic_path [resource_name, :authy_onetouch_status] %>?remember_device="+rememberDevice+"&onetouch_uuid=<%= @onetouch_uuid %>");
|
33
34
|
onetouchRequest.send();
|
34
35
|
}, 3000);
|
35
36
|
})();
|
@@ -3,8 +3,8 @@
|
|
3
3
|
= verify_authy_form do
|
4
4
|
%legend= I18n.t('submit_token_title', {:scope => 'devise'})
|
5
5
|
= hidden_field_tag :"#{resource_name}_id", @resource.id
|
6
|
-
= label_tag
|
7
|
-
= text_field_tag :token, "", :autocomplete => :
|
6
|
+
= label_tag 'authy-token'
|
7
|
+
= text_field_tag :token, "", :autocomplete => "one-time-code", :inputmode => "numeric", :pattern => "[0-9]*", :id => 'authy-token'
|
8
8
|
%label
|
9
9
|
= check_box_tag :remember_device
|
10
10
|
%span= I18n.t('remember_device', {:scope => 'devise'})
|
@@ -22,11 +22,12 @@
|
|
22
22
|
(function(){
|
23
23
|
var onetouchInterval = setInterval(function(){
|
24
24
|
var onetouchRequest = new XMLHttpRequest();
|
25
|
+
var rememberDevice = document.getElementById("remember_device").checked ? '1' : '0';
|
25
26
|
onetouchRequest.addEventListener("load", function(){
|
26
27
|
if(this.status != 202) clearInterval(onetouchInterval);
|
27
28
|
if(this.status == 200) window.location = JSON.parse(this.responseText).redirect;
|
28
29
|
});
|
29
|
-
onetouchRequest.open("GET", "#{polymorphic_path [resource_name, :authy_onetouch_status]}?onetouch_uuid=#{@onetouch_uuid}");
|
30
|
+
onetouchRequest.open("GET", "#{polymorphic_path [resource_name, :authy_onetouch_status]}?remember_device="+rememberDevice+"&onetouch_uuid=#{@onetouch_uuid}");
|
30
31
|
onetouchRequest.send();
|
31
32
|
}, 3000);
|
32
33
|
})();
|
@@ -1,10 +1,18 @@
|
|
1
1
|
<h2><%= I18n.t('authy_verify_installation_title', {:scope => 'devise'}) %></h2>
|
2
2
|
|
3
|
+
<% if @authy_qr_code %>
|
4
|
+
<%= image_tag @authy_qr_code, :size => '256x256', :alt => I18n.t('authy_qr_code_alt', {:scope => 'devise'}) %>
|
5
|
+
<p><%= I18n.t('authy_qr_code_instructions', {:scope => 'devise'}) %></p>
|
6
|
+
<% end %>
|
7
|
+
|
3
8
|
<%= verify_authy_installation_form do %>
|
4
9
|
<legend><%= I18n.t('submit_token_title', {:scope => 'devise'}) %></legend>
|
5
10
|
<%= label_tag :token %>
|
6
|
-
<%= text_field_tag :token, "", :autocomplete => :
|
11
|
+
<%= text_field_tag :token, "", :autocomplete => "one-time-code", :inputmode => "numeric", :pattern => "[0-9]*", :id => 'authy-token' %>
|
12
|
+
<label>
|
13
|
+
<%= check_box_tag :remember_device %>
|
14
|
+
<span><%= I18n.t('remember_device', {:scope => 'devise'}) %></span>
|
15
|
+
</label>
|
7
16
|
<%= authy_request_sms_link %>
|
8
17
|
<%= submit_tag I18n.t('enable_my_account', {:scope => 'devise'}), :class => 'btn' %>
|
9
|
-
<% end %>
|
10
|
-
|
18
|
+
<% end %>
|
@@ -1,8 +1,16 @@
|
|
1
1
|
%h2= I18n.t('authy_verify_installation_title', {:scope => 'devise'})
|
2
|
+
|
3
|
+
- if @authy_qr_code
|
4
|
+
= image_tag @authy_qr_code, :size => '256x256', :alt => I18n.t('authy_qr_code_alt', {:scope => 'devise'})
|
5
|
+
%p= I18n.t('authy_qr_code_instructions', {:scope => 'devise'})
|
6
|
+
|
2
7
|
= verify_authy_installation_form do
|
3
8
|
%legend= I18n.t('submit_token_title', {:scope => 'devise'})
|
4
9
|
= label_tag :token
|
5
|
-
= text_field_tag :token, "", :autocomplete => :
|
10
|
+
= text_field_tag :token, "", :autocomplete => "one-time-code", :inputmode => "numeric", :pattern => "[0-9]*", :id => 'authy-token'
|
11
|
+
%label
|
12
|
+
= check_box_tag :remember_device
|
13
|
+
%span= I18n.t('remember_device', {:scope => 'devise'})
|
6
14
|
= authy_request_sms_link
|
7
15
|
= submit_tag I18n.t('enable_my_account', {:scope => 'devise'}), :class => 'btn'
|
8
16
|
|
data/config.ru
ADDED
data/config/locales/en.yml
CHANGED
@@ -14,6 +14,9 @@ en:
|
|
14
14
|
authy_verify_installation_title: 'Verify your account'
|
15
15
|
enable_my_account: 'Enable my account'
|
16
16
|
|
17
|
+
authy_qr_code_alt: 'QR code for scanning with your authenticator app.'
|
18
|
+
authy_qr_code_instructions: 'Scan this QR code with your authenticator application and enter the code below.'
|
19
|
+
|
17
20
|
devise_authy:
|
18
21
|
user:
|
19
22
|
enabled: 'Two factor authentication was enabled'
|
data/devise-authy.gemspec
CHANGED
@@ -12,29 +12,39 @@ Gem::Specification.new do |spec|
|
|
12
12
|
|
13
13
|
spec.summary = %q{Authy plugin for Devise.}
|
14
14
|
spec.description = %q{Authy plugin to add two factor authentication to Devise.}
|
15
|
-
spec.homepage = "https://github.com/
|
15
|
+
spec.homepage = "https://github.com/twilio/authy-devise"
|
16
16
|
spec.license = "MIT"
|
17
17
|
|
18
18
|
spec.metadata = {
|
19
|
-
"bug_tracker_uri" => "https://github.com/
|
20
|
-
"change_log_uri" => "https://github.com/
|
21
|
-
"documentation_uri" => "https://github.com/
|
22
|
-
"homepage_uri" => "https://github.com/
|
23
|
-
"source_code_uri" => "https://github.com/
|
19
|
+
"bug_tracker_uri" => "https://github.com/twilio/authy-devise/issues",
|
20
|
+
"change_log_uri" => "https://github.com/twilio/authy-devise/blob/master/CHANGELOG.md",
|
21
|
+
"documentation_uri" => "https://github.com/twilio/authy-devise",
|
22
|
+
"homepage_uri" => "https://github.com/twilio/authy-devise",
|
23
|
+
"source_code_uri" => "https://github.com/twilio/authy-devise"
|
24
24
|
}
|
25
25
|
|
26
26
|
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
27
|
-
f.match(%r{^(test|spec|features
|
27
|
+
f.match(%r{^(test|spec|features)/})
|
28
28
|
end
|
29
29
|
spec.require_paths = ["lib"]
|
30
30
|
|
31
|
-
spec.add_dependency "devise", ">=
|
32
|
-
spec.add_dependency "authy", ">= 2.7.
|
31
|
+
spec.add_dependency "devise", ">= 4.0.0"
|
32
|
+
spec.add_dependency "authy", ">= 2.7.5"
|
33
33
|
|
34
|
-
spec.add_development_dependency "
|
35
|
-
spec.add_development_dependency "
|
34
|
+
spec.add_development_dependency "appraisal", "~> 2.2"
|
35
|
+
spec.add_development_dependency "bundler", ">= 1.16"
|
36
|
+
spec.add_development_dependency "rake"
|
37
|
+
spec.add_development_dependency "combustion", "~> 1.1"
|
36
38
|
spec.add_development_dependency "rspec", "~> 3.0"
|
39
|
+
spec.add_development_dependency "rspec-rails"
|
40
|
+
spec.add_development_dependency "rails-controller-testing", "~> 1.0"
|
37
41
|
spec.add_development_dependency "yard", "~> 0.9.11"
|
38
42
|
spec.add_development_dependency "rdoc", "~> 4.3.0"
|
39
|
-
spec.add_development_dependency "simplecov", "~> 0.
|
43
|
+
spec.add_development_dependency "simplecov", "~> 0.17.1"
|
44
|
+
spec.add_development_dependency "webmock", "~> 3.7.6"
|
45
|
+
spec.add_development_dependency "rails", ">= 5"
|
46
|
+
spec.add_development_dependency "sqlite3"
|
47
|
+
spec.add_development_dependency "generator_spec"
|
48
|
+
spec.add_development_dependency "database_cleaner", "~> 1.7"
|
49
|
+
spec.add_development_dependency "factory_bot_rails", "~> 5.1.1"
|
40
50
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# This file was generated by Appraisal
|
2
|
+
|
3
|
+
source "https://rubygems.org"
|
4
|
+
|
5
|
+
gem "sdoc", "~> 0.4.0", group: :doc
|
6
|
+
gem "rails", "~> 5.2.0"
|
7
|
+
gem "sqlite3", "~> 1.3.13"
|
8
|
+
|
9
|
+
group :development, :test do
|
10
|
+
gem "factory_girl_rails", require: false
|
11
|
+
gem "rspec-rails", "~>4.0.0.beta3", require: false
|
12
|
+
gem "database_cleaner", require: false
|
13
|
+
end
|
14
|
+
|
15
|
+
gemspec path: "../"
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# This file was generated by Appraisal
|
2
|
+
|
3
|
+
source "https://rubygems.org"
|
4
|
+
|
5
|
+
gem "sdoc", "~> 0.4.0", group: :doc
|
6
|
+
gem "rails", "~> 6.0.0"
|
7
|
+
gem "sqlite3", "~> 1.4"
|
8
|
+
|
9
|
+
group :development, :test do
|
10
|
+
gem "factory_girl_rails", require: false
|
11
|
+
gem "rspec-rails", "~>4.0.0.beta3", require: false
|
12
|
+
gem "database_cleaner", require: false
|
13
|
+
end
|
14
|
+
|
15
|
+
gemspec path: "../"
|
data/lib/devise-authy.rb
CHANGED
@@ -4,9 +4,10 @@ require 'devise'
|
|
4
4
|
require 'authy'
|
5
5
|
|
6
6
|
module Devise
|
7
|
-
mattr_accessor :authy_remember_device, :authy_enable_onetouch
|
7
|
+
mattr_accessor :authy_remember_device, :authy_enable_onetouch, :authy_enable_qr_code
|
8
8
|
@@authy_remember_device = 1.month
|
9
9
|
@@authy_enable_onetouch = false
|
10
|
+
@@authy_enable_qr_code = false
|
10
11
|
end
|
11
12
|
|
12
13
|
module DeviseAuthy
|
@@ -28,5 +29,7 @@ require 'devise-authy/models/authy_authenticatable'
|
|
28
29
|
require 'devise-authy/models/authy_lockable'
|
29
30
|
require 'devise-authy/version'
|
30
31
|
|
32
|
+
Authy.user_agent = "DeviseAuthy/#{DeviseAuthy::VERSION} - #{Authy.user_agent}"
|
33
|
+
|
31
34
|
Devise.add_module :authy_authenticatable, :model => 'devise-authy/models/authy_authenticatable', :controller => :devise_authy, :route => :authy
|
32
35
|
Devise.add_module :authy_lockable, :model => 'devise-authy/models/authy_lockable'
|
@@ -9,11 +9,11 @@ module DeviseAuthy
|
|
9
9
|
|
10
10
|
private
|
11
11
|
|
12
|
-
def remember_device
|
13
|
-
id = @resource.id
|
12
|
+
def remember_device(id)
|
14
13
|
cookies.signed[:remember_device] = {
|
15
14
|
:value => {expires: Time.now.to_i, id: id}.to_json,
|
16
15
|
:secure => !(Rails.env.test? || Rails.env.development?),
|
16
|
+
:httponly => !(Rails.env.test? || Rails.env.development?),
|
17
17
|
:expires => resource_class.authy_remember_device.from_now
|
18
18
|
}
|
19
19
|
end
|
@@ -40,7 +40,7 @@ module DeviseAuthy
|
|
40
40
|
end
|
41
41
|
|
42
42
|
def is_signing_in?
|
43
|
-
if devise_controller? &&
|
43
|
+
if devise_controller? &&
|
44
44
|
is_devise_sessions_controller? &&
|
45
45
|
self.action_name == "create"
|
46
46
|
return true
|
@@ -76,8 +76,8 @@ module DeviseAuthy
|
|
76
76
|
send(:"#{scope}_verify_authy_path")
|
77
77
|
end
|
78
78
|
|
79
|
-
def send_one_touch_request
|
80
|
-
Authy::OneTouch.send_approval_request(id:
|
79
|
+
def send_one_touch_request(authy_id)
|
80
|
+
Authy::OneTouch.send_approval_request(id: authy_id, message: I18n.t('request_to_login', { :scope => 'devise' }))
|
81
81
|
end
|
82
82
|
|
83
83
|
def record_authy_authentication
|
data/lib/devise-authy/mapping.rb
CHANGED
@@ -6,5 +6,12 @@ module DeviseAuthy
|
|
6
6
|
options[:controllers][:passwords] ||= "devise_authy/passwords"
|
7
7
|
super
|
8
8
|
end
|
9
|
+
|
10
|
+
def default_path_names(options)
|
11
|
+
options[:path_names] ||= {}
|
12
|
+
options[:path_names][:request_sms] ||= 'request-sms'
|
13
|
+
options[:path_names][:request_phone_call] ||= 'request-phone-call'
|
14
|
+
super
|
15
|
+
end
|
9
16
|
end
|
10
17
|
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, :authy_enable_onetouch)
|
20
|
+
Devise::Models.config(self, :authy_remember_device, :authy_enable_onetouch, :authy_enable_qr_code)
|
21
21
|
end
|
22
22
|
end
|
23
23
|
end
|
data/lib/devise-authy/routes.rb
CHANGED
@@ -16,8 +16,8 @@ module ActionDispatch::Routing
|
|
16
16
|
|
17
17
|
match "/#{mapping.path_names[:authy_onetouch_status]}", :controller => controllers[:devise_authy], :action => :GET_authy_onetouch_status, as: :authy_onetouch_status, via: :get
|
18
18
|
|
19
|
-
match "
|
20
|
-
match "
|
19
|
+
match "/#{mapping.path_names[:request_sms]}", :controller => controllers[:devise_authy], :action => :request_sms, :as => :request_sms, :via => :post
|
20
|
+
match "/#{mapping.path_names[:request_phone_call]}", :controller => controllers[:devise_authy], :action => :request_phone_call, :as => :request_phone_call, :via => :post
|
21
21
|
end
|
22
22
|
end
|
23
23
|
end
|
data/lib/devise-authy/version.rb
CHANGED
@@ -11,12 +11,12 @@ module ActiveRecord
|
|
11
11
|
|
12
12
|
private
|
13
13
|
|
14
|
-
def
|
15
|
-
Rails
|
14
|
+
def versioned_migrations?
|
15
|
+
Rails::VERSION::MAJOR >= 5
|
16
16
|
end
|
17
17
|
|
18
18
|
def migration_version
|
19
|
-
"[#{Rails::VERSION::MAJOR}.#{Rails::VERSION::MINOR}]" if
|
19
|
+
"[#{Rails::VERSION::MAJOR}.#{Rails::VERSION::MINOR}]" if versioned_migrations?
|
20
20
|
end
|
21
21
|
end
|
22
22
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module DeviseAuthy
|
2
4
|
module Generators
|
3
5
|
class DeviseAuthyGenerator < Rails::Generators::NamedBase
|
@@ -7,7 +9,7 @@ module DeviseAuthy
|
|
7
9
|
desc "Add :authy_authenticatable directive in the given model, plus accessors. Also generate migration for ActiveRecord"
|
8
10
|
|
9
11
|
def inject_devise_authy_content
|
10
|
-
path = File.join("app","models","#{file_path}.rb")
|
12
|
+
path = File.join(destination_root, "app","models","#{file_path}.rb")
|
11
13
|
if File.exists?(path) &&
|
12
14
|
!File.read(path).include?("authy_authenticatable")
|
13
15
|
inject_into_file(path,
|
@@ -19,7 +21,7 @@ module DeviseAuthy
|
|
19
21
|
!File.read(path).include?(":authy_id")
|
20
22
|
inject_into_file(path,
|
21
23
|
":authy_id, :last_sign_in_with_authy, ",
|
22
|
-
:after => "attr_accessible ")
|
24
|
+
:after => "attr_accessible ")
|
23
25
|
end
|
24
26
|
end
|
25
27
|
|
@@ -1,7 +1,9 @@
|
|
1
|
+
require "rails/generators"
|
2
|
+
|
1
3
|
module DeviseAuthy
|
2
4
|
module Generators
|
3
5
|
# Install Generator
|
4
|
-
class InstallGenerator < Rails::Generators::Base
|
6
|
+
class InstallGenerator < ::Rails::Generators::Base
|
5
7
|
source_root File.expand_path("../../templates", __FILE__)
|
6
8
|
|
7
9
|
class_option :haml, :type => :boolean, :required => false, :default => false, :desc => "Generate views in Haml"
|
@@ -15,8 +17,10 @@ module DeviseAuthy
|
|
15
17
|
" # How long should the user's device be remembered for.\n" +
|
16
18
|
" # config.authy_remember_device = 1.month\n\n" +
|
17
19
|
" # Should Authy OneTouch be enabled?\n" +
|
18
|
-
" # config.authy_enable_onetouch = false\n\n"
|
19
|
-
|
20
|
+
" # config.authy_enable_onetouch = false\n\n" +
|
21
|
+
" # Should generating QR codes for other authenticator apps be enabled?\n" +
|
22
|
+
" # Note: you need to enable this in your Twilio console.\n" +
|
23
|
+
" # config.authy_enable_qr_code = false\n\n", :after => "Devise.setup do |config|\n"
|
20
24
|
end
|
21
25
|
|
22
26
|
def add_initializer
|
@@ -61,14 +65,14 @@ module DeviseAuthy
|
|
61
65
|
@
|
62
66
|
},
|
63
67
|
:erb => {
|
64
|
-
:before => %r{\s
|
68
|
+
:before => %r{\s*<\/\s*head\s*>\s*},
|
65
69
|
:content => %@
|
66
70
|
<%=javascript_include_tag "https://www.authy.com/form.authy.min.js" %>
|
67
71
|
<%=stylesheet_link_tag "https://www.authy.com/form.authy.min.css" %>
|
68
72
|
@
|
69
73
|
}
|
70
74
|
}.each do |extension, opts|
|
71
|
-
file_path = "app
|
75
|
+
file_path = File.join(destination_root, "app", "views", "layouts", "application.html.#{extension}")
|
72
76
|
if File.exists?(file_path) && !File.read(file_path).include?("form.authy.min.js")
|
73
77
|
inject_into_file(file_path, opts.delete(:content), opts)
|
74
78
|
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:
|
4
|
+
version: 2.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Authy Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-06-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: devise
|
@@ -16,56 +16,84 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 4.0.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 4.0.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: authy
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 2.7.
|
33
|
+
version: 2.7.5
|
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: 2.7.
|
40
|
+
version: 2.7.5
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: appraisal
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '2.2'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '2.2'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: bundler
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1.16'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
53
67
|
- !ruby/object:Gem::Version
|
54
68
|
version: '1.16'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: rake
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: combustion
|
57
85
|
requirement: !ruby/object:Gem::Requirement
|
58
86
|
requirements:
|
59
87
|
- - "~>"
|
60
88
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
89
|
+
version: '1.1'
|
62
90
|
type: :development
|
63
91
|
prerelease: false
|
64
92
|
version_requirements: !ruby/object:Gem::Requirement
|
65
93
|
requirements:
|
66
94
|
- - "~>"
|
67
95
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
96
|
+
version: '1.1'
|
69
97
|
- !ruby/object:Gem::Dependency
|
70
98
|
name: rspec
|
71
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -80,6 +108,34 @@ dependencies:
|
|
80
108
|
- - "~>"
|
81
109
|
- !ruby/object:Gem::Version
|
82
110
|
version: '3.0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: rspec-rails
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: rails-controller-testing
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '1.0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '1.0'
|
83
139
|
- !ruby/object:Gem::Dependency
|
84
140
|
name: yard
|
85
141
|
requirement: !ruby/object:Gem::Requirement
|
@@ -114,14 +170,98 @@ dependencies:
|
|
114
170
|
requirements:
|
115
171
|
- - "~>"
|
116
172
|
- !ruby/object:Gem::Version
|
117
|
-
version: 0.
|
173
|
+
version: 0.17.1
|
174
|
+
type: :development
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - "~>"
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: 0.17.1
|
181
|
+
- !ruby/object:Gem::Dependency
|
182
|
+
name: webmock
|
183
|
+
requirement: !ruby/object:Gem::Requirement
|
184
|
+
requirements:
|
185
|
+
- - "~>"
|
186
|
+
- !ruby/object:Gem::Version
|
187
|
+
version: 3.7.6
|
188
|
+
type: :development
|
189
|
+
prerelease: false
|
190
|
+
version_requirements: !ruby/object:Gem::Requirement
|
191
|
+
requirements:
|
192
|
+
- - "~>"
|
193
|
+
- !ruby/object:Gem::Version
|
194
|
+
version: 3.7.6
|
195
|
+
- !ruby/object:Gem::Dependency
|
196
|
+
name: rails
|
197
|
+
requirement: !ruby/object:Gem::Requirement
|
198
|
+
requirements:
|
199
|
+
- - ">="
|
200
|
+
- !ruby/object:Gem::Version
|
201
|
+
version: '5'
|
202
|
+
type: :development
|
203
|
+
prerelease: false
|
204
|
+
version_requirements: !ruby/object:Gem::Requirement
|
205
|
+
requirements:
|
206
|
+
- - ">="
|
207
|
+
- !ruby/object:Gem::Version
|
208
|
+
version: '5'
|
209
|
+
- !ruby/object:Gem::Dependency
|
210
|
+
name: sqlite3
|
211
|
+
requirement: !ruby/object:Gem::Requirement
|
212
|
+
requirements:
|
213
|
+
- - ">="
|
214
|
+
- !ruby/object:Gem::Version
|
215
|
+
version: '0'
|
216
|
+
type: :development
|
217
|
+
prerelease: false
|
218
|
+
version_requirements: !ruby/object:Gem::Requirement
|
219
|
+
requirements:
|
220
|
+
- - ">="
|
221
|
+
- !ruby/object:Gem::Version
|
222
|
+
version: '0'
|
223
|
+
- !ruby/object:Gem::Dependency
|
224
|
+
name: generator_spec
|
225
|
+
requirement: !ruby/object:Gem::Requirement
|
226
|
+
requirements:
|
227
|
+
- - ">="
|
228
|
+
- !ruby/object:Gem::Version
|
229
|
+
version: '0'
|
230
|
+
type: :development
|
231
|
+
prerelease: false
|
232
|
+
version_requirements: !ruby/object:Gem::Requirement
|
233
|
+
requirements:
|
234
|
+
- - ">="
|
235
|
+
- !ruby/object:Gem::Version
|
236
|
+
version: '0'
|
237
|
+
- !ruby/object:Gem::Dependency
|
238
|
+
name: database_cleaner
|
239
|
+
requirement: !ruby/object:Gem::Requirement
|
240
|
+
requirements:
|
241
|
+
- - "~>"
|
242
|
+
- !ruby/object:Gem::Version
|
243
|
+
version: '1.7'
|
244
|
+
type: :development
|
245
|
+
prerelease: false
|
246
|
+
version_requirements: !ruby/object:Gem::Requirement
|
247
|
+
requirements:
|
248
|
+
- - "~>"
|
249
|
+
- !ruby/object:Gem::Version
|
250
|
+
version: '1.7'
|
251
|
+
- !ruby/object:Gem::Dependency
|
252
|
+
name: factory_bot_rails
|
253
|
+
requirement: !ruby/object:Gem::Requirement
|
254
|
+
requirements:
|
255
|
+
- - "~>"
|
256
|
+
- !ruby/object:Gem::Version
|
257
|
+
version: 5.1.1
|
118
258
|
type: :development
|
119
259
|
prerelease: false
|
120
260
|
version_requirements: !ruby/object:Gem::Requirement
|
121
261
|
requirements:
|
122
262
|
- - "~>"
|
123
263
|
- !ruby/object:Gem::Version
|
124
|
-
version:
|
264
|
+
version: 5.1.1
|
125
265
|
description: Authy plugin to add two factor authentication to Devise.
|
126
266
|
email:
|
127
267
|
- support@authy.com
|
@@ -133,6 +273,7 @@ files:
|
|
133
273
|
- ".gitignore"
|
134
274
|
- ".rspec"
|
135
275
|
- ".travis.yml"
|
276
|
+
- Appraisals
|
136
277
|
- CHANGELOG.md
|
137
278
|
- Gemfile
|
138
279
|
- LICENSE.txt
|
@@ -149,8 +290,12 @@ files:
|
|
149
290
|
- app/views/devise/verify_authy.html.haml
|
150
291
|
- app/views/devise/verify_authy_installation.html.erb
|
151
292
|
- app/views/devise/verify_authy_installation.html.haml
|
293
|
+
- config.ru
|
152
294
|
- config/locales/en.yml
|
153
295
|
- devise-authy.gemspec
|
296
|
+
- gemfiles/.bundle/config
|
297
|
+
- gemfiles/rails_5_2.gemfile
|
298
|
+
- gemfiles/rails_6.gemfile
|
154
299
|
- lib/devise-authy.rb
|
155
300
|
- lib/devise-authy/controllers/helpers.rb
|
156
301
|
- lib/devise-authy/controllers/view_helpers.rb
|
@@ -165,15 +310,15 @@ files:
|
|
165
310
|
- lib/generators/active_record/templates/migration.rb
|
166
311
|
- lib/generators/devise_authy/devise_authy_generator.rb
|
167
312
|
- lib/generators/devise_authy/install_generator.rb
|
168
|
-
homepage: https://github.com/
|
313
|
+
homepage: https://github.com/twilio/authy-devise
|
169
314
|
licenses:
|
170
315
|
- MIT
|
171
316
|
metadata:
|
172
|
-
bug_tracker_uri: https://github.com/
|
173
|
-
change_log_uri: https://github.com/
|
174
|
-
documentation_uri: https://github.com/
|
175
|
-
homepage_uri: https://github.com/
|
176
|
-
source_code_uri: https://github.com/
|
317
|
+
bug_tracker_uri: https://github.com/twilio/authy-devise/issues
|
318
|
+
change_log_uri: https://github.com/twilio/authy-devise/blob/master/CHANGELOG.md
|
319
|
+
documentation_uri: https://github.com/twilio/authy-devise
|
320
|
+
homepage_uri: https://github.com/twilio/authy-devise
|
321
|
+
source_code_uri: https://github.com/twilio/authy-devise
|
177
322
|
post_install_message:
|
178
323
|
rdoc_options: []
|
179
324
|
require_paths:
|
@@ -189,8 +334,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
189
334
|
- !ruby/object:Gem::Version
|
190
335
|
version: '0'
|
191
336
|
requirements: []
|
192
|
-
|
193
|
-
rubygems_version: 2.7.6
|
337
|
+
rubygems_version: 3.0.1
|
194
338
|
signing_key:
|
195
339
|
specification_version: 4
|
196
340
|
summary: Authy plugin for Devise.
|