devise-authy 1.7.0 → 1.8.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 +5 -13
- data/.travis.yml +4 -0
- data/Gemfile +29 -13
- data/README.md +8 -6
- data/VERSION +1 -1
- data/app/controllers/devise/devise_authy_controller.rb +3 -3
- data/authy-devise-demo/Gemfile +39 -28
- data/authy-devise-demo/Gemfile.lock +166 -113
- data/authy-devise-demo/README.md +1 -1
- data/authy-devise-demo/app/controllers/welcome_controller.rb +2 -2
- data/authy-devise-demo/app/models/admin.rb +0 -3
- data/authy-devise-demo/app/models/user.rb +0 -3
- data/authy-devise-demo/config/application.rb +5 -41
- data/authy-devise-demo/config/environments/development.rb +21 -17
- data/authy-devise-demo/config/environments/production.rb +45 -33
- data/authy-devise-demo/config/environments/test.rb +18 -13
- data/authy-devise-demo/config/initializers/session_store.rb +1 -1
- data/authy-devise-demo/config/locales/devise.authy.en.yml +4 -4
- data/authy-devise-demo/config/secrets.yml +22 -0
- data/authy-devise-demo/db/migrate/20160906221739_add_sessions_table.rb +12 -0
- data/authy-devise-demo/db/schema.rb +32 -22
- data/config/locales/en.yml +4 -4
- data/devise-authy.gemspec +44 -47
- data/lib/devise-authy/controllers/helpers.rb +1 -1
- data/lib/devise-authy/controllers/view_helpers.rb +8 -2
- data/lib/devise-authy/mapping.rb +3 -7
- data/lib/devise-authy/models/authy_authenticatable.rb +1 -1
- data/lib/devise-authy/rails.rb +1 -1
- data/lib/generators/devise_authy/install_generator.rb +7 -0
- data/spec/controllers/devise_authy_controller_spec.rb +61 -60
- data/spec/controllers/passwords_controller_spec.rb +15 -15
- data/spec/features/authy_authenticatable_spec.rb +23 -23
- data/spec/features/authy_lockable_spec.rb +6 -6
- data/spec/generators_spec.rb +11 -9
- data/spec/models/authy_authenticatable_spec.rb +3 -3
- data/spec/models/authy_lockable_spec.rb +7 -7
- data/spec/rails-app/Gemfile +4 -3
- data/spec/rails-app/Gemfile.lock +116 -91
- data/spec/rails-app/app/controllers/welcome_controller.rb +1 -1
- data/spec/rails-app/app/models/user.rb +0 -3
- data/spec/rails-app/config/application.rb +15 -34
- data/spec/rails-app/config/environments/development.rb +21 -17
- data/spec/rails-app/config/environments/production.rb +45 -33
- data/spec/rails-app/config/environments/test.rb +18 -13
- data/spec/rails-app/config/secrets.yml +22 -0
- data/spec/routing/routes_spec.rb +7 -7
- data/spec/spec_helper.rb +17 -0
- data/spec/support/helpers.rb +3 -1
- metadata +34 -59
- data/Gemfile.lock +0 -194
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe DeviseAuthy::PasswordsController do
|
4
|
-
include Devise::
|
3
|
+
describe DeviseAuthy::PasswordsController, type: :controller do
|
4
|
+
include Devise::Test::ControllerHelpers
|
5
5
|
|
6
6
|
before :each do
|
7
7
|
request.env["devise.mapping"] = Devise.mappings[:user]
|
@@ -12,16 +12,16 @@ describe DeviseAuthy::PasswordsController do
|
|
12
12
|
describe "Reset password" do
|
13
13
|
it "Should redirect to verify token view" do
|
14
14
|
user = create_user(:authy_id => 1)
|
15
|
-
user.reset_password_token = User.reset_password_token
|
16
|
-
user.reset_password_sent_at = Time.now.utc
|
17
15
|
user.authy_enabled = true
|
18
16
|
user.save
|
19
17
|
|
20
|
-
|
18
|
+
token = user.send_reset_password_instructions
|
19
|
+
|
20
|
+
put :update, :user => { :reset_password_token => token, :password => "password", :password_confirmation => "password" }
|
21
21
|
|
22
22
|
user.reload
|
23
|
-
user.last_sign_in_at.
|
24
|
-
response.
|
23
|
+
expect(user.last_sign_in_at).to be_nil
|
24
|
+
expect(response).to redirect_to(root_url)
|
25
25
|
end
|
26
26
|
end
|
27
27
|
end
|
@@ -29,20 +29,20 @@ describe DeviseAuthy::PasswordsController do
|
|
29
29
|
context "when the user don't have 2FA" do
|
30
30
|
describe "Reset password" do
|
31
31
|
it "Should sign in the user" do
|
32
|
-
user = create_user
|
33
|
-
user.reset_password_token = User.reset_password_token
|
34
|
-
user.reset_password_sent_at = Time.now.utc
|
32
|
+
user = create_user(:authy_id => 1)
|
35
33
|
user.save
|
36
34
|
|
35
|
+
token = user.send_reset_password_instructions
|
36
|
+
|
37
37
|
last_sign_in_at = user.last_sign_in_at
|
38
38
|
|
39
|
-
put :update, :user => { :reset_password_token =>
|
40
|
-
response.
|
39
|
+
put :update, :user => { :reset_password_token => token, :password => "password", :password_confirmation => "password" }
|
40
|
+
expect(response).to redirect_to(root_url)
|
41
41
|
|
42
42
|
user.reload
|
43
|
-
user.last_sign_in_at.
|
44
|
-
flash[:notice].
|
43
|
+
expect(user.last_sign_in_at).not_to be_nil
|
44
|
+
expect(flash[:notice]).to eq("Your password was changed successfully. You are now signed in.")
|
45
45
|
end
|
46
46
|
end
|
47
47
|
end
|
48
|
-
end
|
48
|
+
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe "Authy
|
3
|
+
describe "Authy Authenticatable", :type => :request do
|
4
4
|
describe "If user don't have two factor authentication should login with email - password" do
|
5
5
|
before :each do
|
6
6
|
@user = create_user(:email => 'foo@bar.com')
|
@@ -8,18 +8,18 @@ describe "Authy Autnenticatable", :type => :request do
|
|
8
8
|
|
9
9
|
it "Sign in should succeed" do
|
10
10
|
fill_sign_in_form('foo@bar.com', '12345678')
|
11
|
-
current_path.
|
12
|
-
page.
|
11
|
+
expect(current_path).to eq(root_path)
|
12
|
+
expect(page).to have_content('Signed in successfully.')
|
13
13
|
end
|
14
14
|
|
15
|
-
it "Sign in shouldn't
|
15
|
+
it "Sign in shouldn't succeed" do
|
16
16
|
fill_sign_in_form('foo@bar.com', '14567823')
|
17
|
-
current_path.
|
18
|
-
page.
|
17
|
+
expect(current_path).to eq(new_user_session_path)
|
18
|
+
expect(page).not_to have_content('Signed in successfully.')
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
|
-
describe "If user
|
22
|
+
describe "If user has two factor authentication" do
|
23
23
|
before :each do
|
24
24
|
@user = create_user(:authy_id => 1)
|
25
25
|
@user.update_attribute(:authy_enabled, true)
|
@@ -27,31 +27,31 @@ describe "Authy Autnenticatable", :type => :request do
|
|
27
27
|
|
28
28
|
it "Sign in should succeed" do
|
29
29
|
fill_sign_in_form(@user.email, '12345678')
|
30
|
-
current_path.
|
31
|
-
page.
|
30
|
+
expect(current_path).to eq(user_verify_authy_path)
|
31
|
+
expect(page).to have_content('Please enter your Authy token')
|
32
32
|
|
33
33
|
within('#devise_authy') do
|
34
34
|
fill_in 'authy-token', :with => '0000000'
|
35
35
|
end
|
36
36
|
click_on 'Check Token'
|
37
|
-
current_path.
|
38
|
-
page.
|
37
|
+
expect(current_path).to eq(root_path)
|
38
|
+
expect(page).to have_content(I18n.t('devise.devise_authy.user.signed_in'))
|
39
39
|
@user.reload
|
40
|
-
@user.last_sign_in_with_authy.
|
40
|
+
expect(@user.last_sign_in_with_authy).not_to be_nil
|
41
41
|
end
|
42
42
|
|
43
43
|
it "Sign in shouldn't succeed" do
|
44
44
|
fill_sign_in_form(@user.email, '12345678')
|
45
|
-
current_path.
|
46
|
-
page.
|
45
|
+
expect(current_path).to eq(user_verify_authy_path)
|
46
|
+
expect(page).to have_content('Please enter your Authy token')
|
47
47
|
|
48
48
|
within('#devise_authy') do
|
49
49
|
fill_in 'authy-token', :with => '324567'
|
50
50
|
end
|
51
51
|
click_on 'Check Token'
|
52
|
-
current_path.
|
52
|
+
expect(current_path).to eq(user_verify_authy_path)
|
53
53
|
@user.reload
|
54
|
-
@user.last_sign_in_with_authy.
|
54
|
+
expect(@user.last_sign_in_with_authy).to be_nil
|
55
55
|
end
|
56
56
|
|
57
57
|
describe "With cookie['remember_device']" do
|
@@ -59,16 +59,16 @@ describe "Authy Autnenticatable", :type => :request do
|
|
59
59
|
cookie_val = sign_cookie("remember_device", Time.now.to_i - 2.month.to_i)
|
60
60
|
page.driver.browser.set_cookie("remember_device=#{cookie_val}")
|
61
61
|
fill_sign_in_form(@user.email, '12345678')
|
62
|
-
current_path.
|
63
|
-
page.
|
62
|
+
expect(current_path).to eq(user_verify_authy_path)
|
63
|
+
expect(page).to have_content('Please enter your Authy token')
|
64
64
|
end
|
65
65
|
|
66
66
|
it "Shouldn't prompt for a token" do
|
67
67
|
cookie_val = sign_cookie("remember_device", Time.now.to_i)
|
68
68
|
page.driver.browser.set_cookie("remember_device=#{cookie_val}")
|
69
69
|
fill_sign_in_form(@user.email, '12345678')
|
70
|
-
current_path.
|
71
|
-
page.
|
70
|
+
expect(current_path).to eq(root_path)
|
71
|
+
expect(page).to have_content("Signed in successfully.")
|
72
72
|
end
|
73
73
|
end
|
74
74
|
|
@@ -77,14 +77,14 @@ describe "Authy Autnenticatable", :type => :request do
|
|
77
77
|
page.driver.browser.set_cookie('user_password_checked=true')
|
78
78
|
|
79
79
|
visit user_verify_authy_path
|
80
|
-
current_path.
|
81
|
-
page.
|
80
|
+
expect(current_path).to eq(new_user_session_path)
|
81
|
+
expect(page).to have_content('Log in')
|
82
82
|
end
|
83
83
|
|
84
84
|
it "Click link Request sms" do
|
85
85
|
fill_sign_in_form(@user.email, '12345678')
|
86
86
|
click_link 'Request SMS'
|
87
|
-
page.
|
87
|
+
expect(page).to have_content("token was sent")
|
88
88
|
end
|
89
89
|
end
|
90
90
|
end
|
@@ -15,19 +15,19 @@ feature 'Authy Lockable' do
|
|
15
15
|
end
|
16
16
|
|
17
17
|
scenario 'account locked when user enters invalid code too many times' do
|
18
|
-
|
18
|
+
(LockableUser.maximum_attempts - 1).times do |i|
|
19
19
|
fill_verify_token_form invalid_authy_token
|
20
20
|
assert_at lockable_user_verify_authy_path
|
21
21
|
expect(page).to have_content('Please enter your Authy token')
|
22
22
|
user.reload
|
23
|
-
assert_account_locked_for user,
|
23
|
+
assert_account_locked_for user, false
|
24
24
|
expect(user.failed_attempts).to eq(i + 1)
|
25
25
|
end
|
26
26
|
|
27
27
|
fill_verify_token_form invalid_authy_token
|
28
28
|
user.reload
|
29
29
|
assert_at new_user_session_path
|
30
|
-
assert_account_locked_for user
|
30
|
+
assert_account_locked_for user, true
|
31
31
|
visit root_path
|
32
32
|
assert_at new_user_session_path
|
33
33
|
end
|
@@ -48,19 +48,19 @@ feature 'Authy Lockable' do
|
|
48
48
|
fill_in 'authy-cellphone', with: '8001234567'
|
49
49
|
click_on 'Enable'
|
50
50
|
|
51
|
-
|
51
|
+
(LockableUser.maximum_attempts - 1).times do |i|
|
52
52
|
fill_in_verify_authy_installation_form invalid_authy_token
|
53
53
|
assert_at lockable_user_verify_authy_installation_path
|
54
54
|
expect(page).to have_content('Verify your account')
|
55
55
|
user.reload
|
56
|
-
assert_account_locked_for user,
|
56
|
+
assert_account_locked_for user, false
|
57
57
|
expect(user.failed_attempts).to eq(i + 1)
|
58
58
|
end
|
59
59
|
|
60
60
|
fill_in_verify_authy_installation_form invalid_authy_token
|
61
61
|
user.reload
|
62
62
|
assert_at new_user_session_path
|
63
|
-
assert_account_locked_for user
|
63
|
+
assert_account_locked_for user, true
|
64
64
|
visit root_path
|
65
65
|
assert_at new_user_session_path
|
66
66
|
end
|
data/spec/generators_spec.rb
CHANGED
@@ -13,18 +13,20 @@ describe "generators for devise_authy" do
|
|
13
13
|
|
14
14
|
it "rails g should include the generators" do
|
15
15
|
@output = rails_command("g")
|
16
|
-
@output.include?('devise_authy:install').
|
17
|
-
@output.include?('active_record:devise_authy').
|
16
|
+
expect(@output.include?('devise_authy:install')).to be_truthy
|
17
|
+
expect(@output.include?('active_record:devise_authy')).to be_truthy
|
18
18
|
end
|
19
19
|
|
20
20
|
it "rails g devise_authy:install" do
|
21
21
|
@output = rails_command("g", "devise_authy:install", "-s")
|
22
|
-
|
23
|
-
@output.include?('config/
|
24
|
-
@output.include?('
|
25
|
-
@output.include?('
|
26
|
-
@output.include?('app/views/devise/devise_authy/
|
27
|
-
@output.include?('app/
|
28
|
-
@output.include?('app/
|
22
|
+
|
23
|
+
expect(@output.include?('config/initializers/devise.rb')).to be_truthy
|
24
|
+
expect(@output.include?('authy.rb')).to be_truthy
|
25
|
+
expect(@output.include?('config/locales/devise.authy.en.yml')).to be_truthy
|
26
|
+
expect(@output.include?('app/views/devise/devise_authy/enable_authy.html.erb')).to be_truthy
|
27
|
+
expect(@output.include?('app/views/devise/devise_authy/verify_authy.html.erb')).to be_truthy
|
28
|
+
expect(@output.include?('app/views/devise/devise_authy/verify_authy_installation.html.erb')).to be_truthy
|
29
|
+
expect(@output.include?('app/assets/stylesheets/devise_authy.css')).to be_truthy
|
30
|
+
expect(@output.include?('app/assets/javascripts/devise_authy.js')).to be_truthy
|
29
31
|
end
|
30
32
|
end
|
@@ -1,17 +1,17 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe Devise::Models::AuthyAuthenticatable do
|
3
|
+
describe Devise::Models::AuthyAuthenticatable, type: :model do
|
4
4
|
before(:each) do
|
5
5
|
@user = create_user(:authy_id => '20')
|
6
6
|
end
|
7
7
|
|
8
8
|
describe "User#find_by_authy_id" do
|
9
9
|
it "Should find the user" do
|
10
|
-
User.find_by_authy_id('20').
|
10
|
+
expect(User.find_by_authy_id('20')).not_to be_nil
|
11
11
|
end
|
12
12
|
|
13
13
|
it "Shouldn't find the user" do
|
14
|
-
User.find_by_authy_id('80').
|
14
|
+
expect(User.find_by_authy_id('80')).to be_nil
|
15
15
|
end
|
16
16
|
end
|
17
17
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
describe Devise::Models::AuthyLockable do
|
3
|
+
describe Devise::Models::AuthyLockable, type: :controller do
|
4
4
|
|
5
5
|
context 'model includes Devise::Models::Lockable' do
|
6
6
|
|
@@ -9,12 +9,12 @@ describe Devise::Models::AuthyLockable do
|
|
9
9
|
context '#lockable?' do
|
10
10
|
|
11
11
|
it 'returns true if lock_strategy is :failed_attempts' do
|
12
|
-
expect(user.lockable?).to
|
12
|
+
expect(user.lockable?).to be_truthy
|
13
13
|
end
|
14
14
|
|
15
15
|
it 'returns false if lock_strategy is anything other than :failed attempts' do
|
16
16
|
Devise.lock_strategy = :none
|
17
|
-
expect(user.lockable?).to
|
17
|
+
expect(user.lockable?).to be_falsey
|
18
18
|
Devise.lock_strategy = :failed_attempts
|
19
19
|
end
|
20
20
|
|
@@ -35,17 +35,17 @@ describe Devise::Models::AuthyLockable do
|
|
35
35
|
|
36
36
|
it 'respects the maximum attempts configuration for Devise::Models::Lockable' do
|
37
37
|
4.times { user.invalid_authy_attempt! }
|
38
|
-
expect(user.send :attempts_exceeded?).to
|
39
|
-
expect(user.access_locked?).to
|
38
|
+
expect(user.send :attempts_exceeded?).to be_truthy # protected method
|
39
|
+
expect(user.access_locked?).to be_truthy
|
40
40
|
end
|
41
41
|
|
42
42
|
it 'returns true if the account is locked' do
|
43
43
|
3.times { user.invalid_authy_attempt! }
|
44
|
-
expect(user.invalid_authy_attempt!).to
|
44
|
+
expect(user.invalid_authy_attempt!).to be_truthy
|
45
45
|
end
|
46
46
|
|
47
47
|
it 'returns false if the account is not locked' do
|
48
|
-
expect(user.invalid_authy_attempt!).to
|
48
|
+
expect(user.invalid_authy_attempt!).to be_falsey
|
49
49
|
end
|
50
50
|
|
51
51
|
end
|
data/spec/rails-app/Gemfile
CHANGED
@@ -1,9 +1,10 @@
|
|
1
1
|
source "https://rubygems.org"
|
2
2
|
|
3
|
-
gem "rails", "~>
|
3
|
+
gem "rails", "~> 4.2.7"
|
4
|
+
gem 'json', '>= 1.8.1'
|
4
5
|
gem "sqlite3"
|
5
6
|
gem "rake"
|
6
7
|
gem "authy"
|
7
|
-
gem "devise"
|
8
|
+
gem "devise", '>= 3.0.0'
|
8
9
|
gem "devise-authy", :path => "../.."
|
9
|
-
gem '
|
10
|
+
gem 'launchy'
|
data/spec/rails-app/Gemfile.lock
CHANGED
@@ -1,105 +1,126 @@
|
|
1
1
|
PATH
|
2
2
|
remote: ../..
|
3
3
|
specs:
|
4
|
-
devise-authy (1.
|
4
|
+
devise-authy (1.7.0)
|
5
5
|
authy
|
6
6
|
devise
|
7
7
|
|
8
8
|
GEM
|
9
9
|
remote: https://rubygems.org/
|
10
10
|
specs:
|
11
|
-
actionmailer (
|
12
|
-
actionpack (=
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
11
|
+
actionmailer (4.2.7.1)
|
12
|
+
actionpack (= 4.2.7.1)
|
13
|
+
actionview (= 4.2.7.1)
|
14
|
+
activejob (= 4.2.7.1)
|
15
|
+
mail (~> 2.5, >= 2.5.4)
|
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)
|
20
|
+
rack (~> 1.6)
|
21
|
+
rack-test (~> 0.6.2)
|
22
|
+
rails-dom-testing (~> 1.0, >= 1.0.5)
|
23
|
+
rails-html-sanitizer (~> 1.0, >= 1.0.2)
|
24
|
+
actionview (4.2.7.1)
|
25
|
+
activesupport (= 4.2.7.1)
|
26
|
+
builder (~> 3.1)
|
18
27
|
erubis (~> 2.7.0)
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
activemodel (
|
25
|
-
activesupport (=
|
26
|
-
builder (~> 3.
|
27
|
-
activerecord (
|
28
|
-
activemodel (=
|
29
|
-
activesupport (=
|
30
|
-
arel (~>
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
arel (
|
39
|
-
authy (2.
|
40
|
-
httpclient (>= 2.
|
41
|
-
bcrypt
|
42
|
-
builder (3.
|
43
|
-
|
44
|
-
|
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)
|
32
|
+
globalid (>= 0.3.0)
|
33
|
+
activemodel (4.2.7.1)
|
34
|
+
activesupport (= 4.2.7.1)
|
35
|
+
builder (~> 3.1)
|
36
|
+
activerecord (4.2.7.1)
|
37
|
+
activemodel (= 4.2.7.1)
|
38
|
+
activesupport (= 4.2.7.1)
|
39
|
+
arel (~> 6.0)
|
40
|
+
activesupport (4.2.7.1)
|
41
|
+
i18n (~> 0.7)
|
42
|
+
json (~> 1.7, >= 1.7.7)
|
43
|
+
minitest (~> 5.1)
|
44
|
+
thread_safe (~> 0.3, >= 0.3.4)
|
45
|
+
tzinfo (~> 1.1)
|
46
|
+
addressable (2.4.0)
|
47
|
+
arel (6.0.3)
|
48
|
+
authy (2.7.1)
|
49
|
+
httpclient (>= 2.5.3.3)
|
50
|
+
bcrypt (3.1.11)
|
51
|
+
builder (3.2.2)
|
52
|
+
concurrent-ruby (1.0.2)
|
53
|
+
devise (4.2.0)
|
54
|
+
bcrypt (~> 3.0)
|
45
55
|
orm_adapter (~> 0.1)
|
46
|
-
railties (
|
47
|
-
|
56
|
+
railties (>= 4.1.0, < 5.1)
|
57
|
+
responders
|
58
|
+
warden (~> 1.2.3)
|
48
59
|
erubis (2.7.0)
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
mime-types (
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
rack
|
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)
|
65
|
+
launchy (2.4.3)
|
66
|
+
addressable (~> 2.3)
|
67
|
+
loofah (2.0.3)
|
68
|
+
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)
|
79
|
+
orm_adapter (0.5.0)
|
80
|
+
pkg-config (1.1.7)
|
81
|
+
rack (1.6.4)
|
82
|
+
rack-test (0.6.3)
|
71
83
|
rack (>= 1.0)
|
72
|
-
rails (
|
73
|
-
actionmailer (=
|
74
|
-
actionpack (=
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
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)
|
92
|
+
bundler (>= 1.3.0, < 2.0)
|
93
|
+
railties (= 4.2.7.1)
|
94
|
+
sprockets-rails
|
95
|
+
rails-deprecated_sanitizer (1.0.3)
|
96
|
+
activesupport (>= 4.2.0.alpha)
|
97
|
+
rails-dom-testing (1.0.7)
|
98
|
+
activesupport (>= 4.2.0.beta, < 5.0)
|
99
|
+
nokogiri (~> 1.6.0)
|
100
|
+
rails-deprecated_sanitizer (>= 1.0.1)
|
101
|
+
rails-html-sanitizer (1.0.3)
|
102
|
+
loofah (~> 2.0)
|
103
|
+
railties (4.2.7.1)
|
104
|
+
actionpack (= 4.2.7.1)
|
105
|
+
activesupport (= 4.2.7.1)
|
84
106
|
rake (>= 0.8.7)
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
warden (1.2.1)
|
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)
|
112
|
+
concurrent-ruby (~> 1.0)
|
113
|
+
rack (> 1, < 3)
|
114
|
+
sprockets-rails (3.2.0)
|
115
|
+
actionpack (>= 4.0)
|
116
|
+
activesupport (>= 4.0)
|
117
|
+
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)
|
122
|
+
thread_safe (~> 0.1)
|
123
|
+
warden (1.2.6)
|
103
124
|
rack (>= 1.0)
|
104
125
|
|
105
126
|
PLATFORMS
|
@@ -107,9 +128,13 @@ PLATFORMS
|
|
107
128
|
|
108
129
|
DEPENDENCIES
|
109
130
|
authy
|
110
|
-
devise
|
131
|
+
devise (>= 3.0.0)
|
111
132
|
devise-authy!
|
112
|
-
|
113
|
-
|
133
|
+
json (>= 1.8.1)
|
134
|
+
launchy
|
135
|
+
rails (~> 4.2.7)
|
114
136
|
rake
|
115
137
|
sqlite3
|
138
|
+
|
139
|
+
BUNDLED WITH
|
140
|
+
1.11.2
|