devise-authy 1.8.3 → 1.9.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 +44 -0
- data/CHANGELOG.md +11 -0
- data/Gemfile +1 -12
- data/README.md +5 -3
- data/Rakefile +1 -14
- data/devise-authy.gemspec +34 -237
- data/lib/devise-authy.rb +1 -0
- data/lib/devise-authy/version.rb +5 -0
- data/lib/generators/active_record/devise_authy_generator.rb +11 -1
- data/lib/generators/active_record/templates/migration.rb +1 -1
- metadata +42 -195
- data/VERSION +0 -1
- data/authy-devise-demo/.gitignore +0 -15
- data/authy-devise-demo/Gemfile +0 -51
- data/authy-devise-demo/Gemfile.lock +0 -194
- data/authy-devise-demo/README.md +0 -64
- data/authy-devise-demo/Rakefile +0 -7
- data/authy-devise-demo/app/assets/images/rails.png +0 -0
- data/authy-devise-demo/app/assets/javascripts/application.js +0 -15
- data/authy-devise-demo/app/assets/javascripts/devise_authy.js +0 -12
- data/authy-devise-demo/app/assets/javascripts/welcome.js.coffee +0 -3
- data/authy-devise-demo/app/assets/stylesheets/application.css +0 -13
- data/authy-devise-demo/app/assets/stylesheets/devise_authy.css +0 -26
- data/authy-devise-demo/app/assets/stylesheets/welcome.css.scss +0 -3
- data/authy-devise-demo/app/controllers/application_controller.rb +0 -3
- data/authy-devise-demo/app/controllers/welcome_controller.rb +0 -15
- data/authy-devise-demo/app/helpers/application_helper.rb +0 -2
- data/authy-devise-demo/app/helpers/welcome_helper.rb +0 -2
- data/authy-devise-demo/app/mailers/.gitkeep +0 -0
- data/authy-devise-demo/app/models/.gitkeep +0 -0
- data/authy-devise-demo/app/models/admin.rb +0 -7
- data/authy-devise-demo/app/models/user.rb +0 -7
- data/authy-devise-demo/app/views/devise/devise_authy/enable_authy.html.erb +0 -7
- data/authy-devise-demo/app/views/devise/devise_authy/verify_authy.html.erb +0 -38
- data/authy-devise-demo/app/views/devise/devise_authy/verify_authy_installation.html.erb +0 -10
- data/authy-devise-demo/app/views/layouts/application.html.erb +0 -28
- data/authy-devise-demo/app/views/welcome/admin_page.html.erb +0 -12
- data/authy-devise-demo/app/views/welcome/index.html.erb +0 -5
- data/authy-devise-demo/app/views/welcome/user_page.html.erb +0 -5
- data/authy-devise-demo/config.ru +0 -4
- data/authy-devise-demo/config/application.rb +0 -26
- data/authy-devise-demo/config/boot.rb +0 -6
- data/authy-devise-demo/config/database.yml +0 -25
- data/authy-devise-demo/config/environment.rb +0 -5
- data/authy-devise-demo/config/environments/development.rb +0 -43
- data/authy-devise-demo/config/environments/production.rb +0 -79
- data/authy-devise-demo/config/environments/test.rb +0 -42
- data/authy-devise-demo/config/initializers/authy.rb +0 -1
- data/authy-devise-demo/config/initializers/backtrace_silencers.rb +0 -7
- data/authy-devise-demo/config/initializers/devise.rb +0 -240
- data/authy-devise-demo/config/initializers/inflections.rb +0 -15
- data/authy-devise-demo/config/initializers/mime_types.rb +0 -5
- data/authy-devise-demo/config/initializers/secret_token.rb +0 -7
- data/authy-devise-demo/config/initializers/session_store.rb +0 -8
- data/authy-devise-demo/config/initializers/wrap_parameters.rb +0 -14
- data/authy-devise-demo/config/locales/devise.authy.en.yml +0 -24
- data/authy-devise-demo/config/locales/devise.en.yml +0 -58
- data/authy-devise-demo/config/locales/en.yml +0 -5
- data/authy-devise-demo/config/routes.rb +0 -65
- data/authy-devise-demo/config/secrets.yml +0 -22
- data/authy-devise-demo/db/migrate/20130409234357_devise_create_users.rb +0 -46
- data/authy-devise-demo/db/migrate/20141202000744_devise_create_admins.rb +0 -46
- data/authy-devise-demo/db/migrate/20141202004246_devise_authy_add_to_admins.rb +0 -21
- data/authy-devise-demo/db/migrate/20160906221739_add_sessions_table.rb +0 -12
- data/authy-devise-demo/db/schema.rb +0 -72
- data/authy-devise-demo/db/seeds.rb +0 -7
- data/authy-devise-demo/lib/assets/.gitkeep +0 -0
- data/authy-devise-demo/lib/tasks/.gitkeep +0 -0
- data/authy-devise-demo/log/.gitkeep +0 -0
- data/authy-devise-demo/public/404.html +0 -26
- data/authy-devise-demo/public/422.html +0 -26
- data/authy-devise-demo/public/500.html +0 -25
- data/authy-devise-demo/public/favicon.ico +0 -0
- data/authy-devise-demo/public/robots.txt +0 -5
- data/authy-devise-demo/script/rails +0 -6
- data/authy-devise-demo/test/fixtures/.gitkeep +0 -0
- data/authy-devise-demo/test/fixtures/users.yml +0 -11
- data/authy-devise-demo/test/functional/.gitkeep +0 -0
- data/authy-devise-demo/test/functional/welcome_controller_test.rb +0 -9
- data/authy-devise-demo/test/integration/.gitkeep +0 -0
- data/authy-devise-demo/test/performance/browsing_test.rb +0 -12
- data/authy-devise-demo/test/test_helper.rb +0 -13
- data/authy-devise-demo/test/unit/.gitkeep +0 -0
- data/authy-devise-demo/test/unit/helpers/welcome_helper_test.rb +0 -4
- data/authy-devise-demo/test/unit/user_test.rb +0 -7
- data/authy-devise-demo/vendor/assets/javascripts/.gitkeep +0 -0
- data/authy-devise-demo/vendor/assets/stylesheets/.gitkeep +0 -0
- data/authy-devise-demo/vendor/plugins/.gitkeep +0 -0
- data/spec/controllers/devise_authy_controller_spec.rb +0 -360
- data/spec/controllers/passwords_controller_spec.rb +0 -48
- data/spec/features/authy_authenticatable_spec.rb +0 -108
- data/spec/features/authy_lockable_spec.rb +0 -70
- data/spec/generators_spec.rb +0 -32
- data/spec/models/authy_authenticatable_spec.rb +0 -17
- data/spec/models/authy_lockable_spec.rb +0 -81
- data/spec/orm/active_record.rb +0 -4
- data/spec/rails-app/Gemfile +0 -10
- data/spec/rails-app/Gemfile.lock +0 -141
- data/spec/rails-app/Rakefile +0 -7
- data/spec/rails-app/app/assets/images/rails.png +0 -0
- data/spec/rails-app/app/assets/javascripts/application.js +0 -15
- data/spec/rails-app/app/assets/javascripts/devise_authy.js +0 -12
- data/spec/rails-app/app/assets/javascripts/welcome.js +0 -2
- data/spec/rails-app/app/assets/stylesheets/application.css +0 -13
- data/spec/rails-app/app/assets/stylesheets/devise_authy.css +0 -26
- data/spec/rails-app/app/assets/stylesheets/welcome.css.scss +0 -3
- data/spec/rails-app/app/controllers/application_controller.rb +0 -3
- data/spec/rails-app/app/controllers/welcome_controller.rb +0 -13
- data/spec/rails-app/app/helpers/application_helper.rb +0 -2
- data/spec/rails-app/app/helpers/welcome_helper.rb +0 -2
- data/spec/rails-app/app/mailers/.gitkeep +0 -0
- data/spec/rails-app/app/models/.gitkeep +0 -0
- data/spec/rails-app/app/models/lockable_user.rb +0 -7
- data/spec/rails-app/app/models/user.rb +0 -8
- data/spec/rails-app/app/views/devise/devise_authy/enable_authy.html.erb +0 -7
- data/spec/rails-app/app/views/devise/devise_authy/verify_authy.html.erb +0 -37
- data/spec/rails-app/app/views/devise/devise_authy/verify_authy_installation.html.erb +0 -10
- data/spec/rails-app/app/views/layouts/application.html.erb +0 -28
- data/spec/rails-app/app/views/welcome/index.html.erb +0 -5
- data/spec/rails-app/config.ru +0 -4
- data/spec/rails-app/config/application.rb +0 -30
- data/spec/rails-app/config/boot.rb +0 -6
- data/spec/rails-app/config/database.yml +0 -25
- data/spec/rails-app/config/environment.rb +0 -5
- data/spec/rails-app/config/environments/development.rb +0 -43
- data/spec/rails-app/config/environments/production.rb +0 -79
- data/spec/rails-app/config/environments/test.rb +0 -44
- data/spec/rails-app/config/initializers/authy.rb +0 -2
- data/spec/rails-app/config/initializers/backtrace_silencers.rb +0 -7
- data/spec/rails-app/config/initializers/devise.rb +0 -256
- data/spec/rails-app/config/initializers/inflections.rb +0 -15
- data/spec/rails-app/config/initializers/mime_types.rb +0 -5
- data/spec/rails-app/config/initializers/secret_token.rb +0 -7
- data/spec/rails-app/config/initializers/session_store.rb +0 -8
- data/spec/rails-app/config/initializers/wrap_parameters.rb +0 -14
- data/spec/rails-app/config/locales/devise.authy.en.yml +0 -24
- data/spec/rails-app/config/locales/devise.en.yml +0 -59
- data/spec/rails-app/config/locales/en.yml +0 -5
- data/spec/rails-app/config/routes.rb +0 -8
- data/spec/rails-app/config/secrets.yml +0 -22
- data/spec/rails-app/db/development.sqlite3 +0 -0
- data/spec/rails-app/db/migrate/20130419164907_devise_create_users.rb +0 -46
- data/spec/rails-app/db/migrate/20130419164936_devise_authy_add_to_users.rb +0 -18
- data/spec/rails-app/db/schema.rb +0 -41
- data/spec/rails-app/db/seeds.rb +0 -7
- data/spec/rails-app/lib/assets/.gitkeep +0 -0
- data/spec/rails-app/lib/tasks/.gitkeep +0 -0
- data/spec/rails-app/public/404.html +0 -26
- data/spec/rails-app/public/422.html +0 -26
- data/spec/rails-app/public/500.html +0 -25
- data/spec/rails-app/public/favicon.ico +0 -0
- data/spec/rails-app/public/robots.txt +0 -5
- data/spec/rails-app/script/rails +0 -6
- data/spec/routing/routes_spec.rb +0 -35
- data/spec/spec_helper.rb +0 -46
- data/spec/support/helpers.rb +0 -80
|
File without changes
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env ruby
|
|
2
|
-
# This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
|
|
3
|
-
|
|
4
|
-
APP_PATH = File.expand_path('../../config/application', __FILE__)
|
|
5
|
-
require File.expand_path('../../config/boot', __FILE__)
|
|
6
|
-
require 'rails/commands'
|
|
File without changes
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/Fixtures.html
|
|
2
|
-
|
|
3
|
-
# This model initially had no columns defined. If you add columns to the
|
|
4
|
-
# model remove the '{}' from the fixture names and add the columns immediately
|
|
5
|
-
# below each fixture, per the syntax in the comments below
|
|
6
|
-
#
|
|
7
|
-
one: {}
|
|
8
|
-
# column: value
|
|
9
|
-
#
|
|
10
|
-
two: {}
|
|
11
|
-
# column: value
|
|
File without changes
|
|
File without changes
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
require 'test_helper'
|
|
2
|
-
require 'rails/performance_test_help'
|
|
3
|
-
|
|
4
|
-
class BrowsingTest < ActionDispatch::PerformanceTest
|
|
5
|
-
# Refer to the documentation for all available options
|
|
6
|
-
# self.profile_options = { :runs => 5, :metrics => [:wall_time, :memory]
|
|
7
|
-
# :output => 'tmp/performance', :formats => [:flat] }
|
|
8
|
-
|
|
9
|
-
def test_homepage
|
|
10
|
-
get '/'
|
|
11
|
-
end
|
|
12
|
-
end
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
ENV["RAILS_ENV"] = "test"
|
|
2
|
-
require File.expand_path('../../config/environment', __FILE__)
|
|
3
|
-
require 'rails/test_help'
|
|
4
|
-
|
|
5
|
-
class ActiveSupport::TestCase
|
|
6
|
-
# Setup all fixtures in test/fixtures/*.(yml|csv) for all tests in alphabetical order.
|
|
7
|
-
#
|
|
8
|
-
# Note: You'll currently still have to declare fixtures explicitly in integration tests
|
|
9
|
-
# -- they do not yet inherit this setting
|
|
10
|
-
fixtures :all
|
|
11
|
-
|
|
12
|
-
# Add more helper methods to be used by all tests here...
|
|
13
|
-
end
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -1,360 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
|
|
3
|
-
describe Devise::DeviseAuthyController, type: :controller do
|
|
4
|
-
include Devise::Test::ControllerHelpers
|
|
5
|
-
|
|
6
|
-
before :each do
|
|
7
|
-
request.env["devise.mapping"] = Devise.mappings[:user]
|
|
8
|
-
@user = create_user(:authy_id => 2)
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
describe "GET #verify_authy" do
|
|
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
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
it "Should no render the second step of authentication if first step is incomplete" do
|
|
43
|
-
request.session["user_id"] = @user.id
|
|
44
|
-
get :GET_verify_authy
|
|
45
|
-
expect(response).to redirect_to(root_url)
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
it "should redirect to root_url" do
|
|
49
|
-
get :GET_verify_authy
|
|
50
|
-
expect(response).to redirect_to(root_url)
|
|
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
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
describe "POST #verify_authy" do
|
|
60
|
-
it "Should login the user if token is ok" do
|
|
61
|
-
request.session["user_id"] = @user.id
|
|
62
|
-
request.session["user_password_checked"] = true
|
|
63
|
-
|
|
64
|
-
post :POST_verify_authy, :token => '0000000'
|
|
65
|
-
@user.reload
|
|
66
|
-
expect(@user.last_sign_in_with_authy).not_to be_nil
|
|
67
|
-
|
|
68
|
-
expect(response.cookies["remember_device"]).to be_nil
|
|
69
|
-
expect(response).to redirect_to(root_url)
|
|
70
|
-
expect(flash.now[:notice]).not_to be_nil
|
|
71
|
-
expect(session["user_authy_token_checked"]).to be_truthy
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
it "Should set remember_device if selected" do
|
|
75
|
-
request.session["user_id"] = @user.id
|
|
76
|
-
request.session["user_password_checked"] = true
|
|
77
|
-
|
|
78
|
-
post :POST_verify_authy, :token => '0000000', :remember_device => '1'
|
|
79
|
-
@user.reload
|
|
80
|
-
expect(@user.last_sign_in_with_authy).not_to be_nil
|
|
81
|
-
|
|
82
|
-
expect(response.cookies["remember_device"]).not_to be_nil
|
|
83
|
-
expect(response).to redirect_to(root_url)
|
|
84
|
-
expect(flash.now[:notice]).not_to be_nil
|
|
85
|
-
end
|
|
86
|
-
|
|
87
|
-
it "Shouldn't login the user if token is invalid" do
|
|
88
|
-
request.session["user_id"] = @user.id
|
|
89
|
-
request.session["user_password_checked"] = true
|
|
90
|
-
|
|
91
|
-
post :POST_verify_authy, :token => '5678900'
|
|
92
|
-
expect(response).to render_template('verify_authy')
|
|
93
|
-
end
|
|
94
|
-
|
|
95
|
-
context 'User is lockable' do
|
|
96
|
-
|
|
97
|
-
let(:user) { create_lockable_user authy_id: 2 }
|
|
98
|
-
|
|
99
|
-
before do
|
|
100
|
-
allow(controller).to receive(:find_resource).and_return user
|
|
101
|
-
controller.instance_variable_set :@resource, user
|
|
102
|
-
end
|
|
103
|
-
|
|
104
|
-
it 'locks the account when failed_attempts exceeds maximum' do
|
|
105
|
-
request.session['user_id'] = user.id
|
|
106
|
-
request.session['user_password_checked'] = true
|
|
107
|
-
|
|
108
|
-
too_many_failed_attempts.times do
|
|
109
|
-
post :POST_verify_authy, token: invalid_authy_token
|
|
110
|
-
end
|
|
111
|
-
|
|
112
|
-
user.reload
|
|
113
|
-
expect(user.access_locked?).to be_truthy
|
|
114
|
-
end
|
|
115
|
-
|
|
116
|
-
end
|
|
117
|
-
|
|
118
|
-
context 'User is not lockable' do
|
|
119
|
-
|
|
120
|
-
it 'does not lock the account when failed_attempts exceeds maximum' do
|
|
121
|
-
request.session['user_id'] = @user.id
|
|
122
|
-
request.session['user_password_checked'] = true
|
|
123
|
-
|
|
124
|
-
too_many_failed_attempts.times do
|
|
125
|
-
post :POST_verify_authy, token: invalid_authy_token
|
|
126
|
-
end
|
|
127
|
-
|
|
128
|
-
@user.reload
|
|
129
|
-
expect(@user.locked_at).to be_nil
|
|
130
|
-
end
|
|
131
|
-
|
|
132
|
-
end
|
|
133
|
-
|
|
134
|
-
end
|
|
135
|
-
|
|
136
|
-
describe "GET #enable_authy" do
|
|
137
|
-
it "Should render enable authy view" do
|
|
138
|
-
user2 = create_user
|
|
139
|
-
sign_in user2
|
|
140
|
-
get :GET_enable_authy
|
|
141
|
-
expect(response).to render_template('enable_authy')
|
|
142
|
-
end
|
|
143
|
-
|
|
144
|
-
it "Shouldn't render enable authy view" do
|
|
145
|
-
get :GET_enable_authy
|
|
146
|
-
expect(response).to redirect_to(new_user_session_url)
|
|
147
|
-
end
|
|
148
|
-
|
|
149
|
-
it "should redirect if user has authy enabled" do
|
|
150
|
-
@user.update_attribute(:authy_enabled, true)
|
|
151
|
-
sign_in @user
|
|
152
|
-
get :GET_enable_authy
|
|
153
|
-
expect(response).to redirect_to(root_url)
|
|
154
|
-
expect(flash.now[:notice]).to eq("Two factor authentication is already enabled.")
|
|
155
|
-
end
|
|
156
|
-
|
|
157
|
-
it "Should render enable authy view if authy enabled is false" do
|
|
158
|
-
sign_in @user
|
|
159
|
-
get :GET_enable_authy
|
|
160
|
-
expect(response).to render_template('enable_authy')
|
|
161
|
-
end
|
|
162
|
-
end
|
|
163
|
-
|
|
164
|
-
describe "POST #enable_authy" do
|
|
165
|
-
it "Should create user in authy application" do
|
|
166
|
-
user2 = create_user
|
|
167
|
-
sign_in user2
|
|
168
|
-
|
|
169
|
-
post :POST_enable_authy, :cellphone => '3010008090', :country_code => '57'
|
|
170
|
-
user2.reload
|
|
171
|
-
expect(user2.authy_id).not_to be_nil
|
|
172
|
-
expect(flash.now[:notice]).to eq("Two factor authentication was enabled")
|
|
173
|
-
expect(response).to redirect_to(user_verify_authy_installation_url)
|
|
174
|
-
end
|
|
175
|
-
|
|
176
|
-
it "Should not create user register user failed" do
|
|
177
|
-
user2 = create_user
|
|
178
|
-
sign_in user2
|
|
179
|
-
|
|
180
|
-
post :POST_enable_authy, :cellphone => '22222', :country_code => "57"
|
|
181
|
-
expect(response).to render_template('enable_authy')
|
|
182
|
-
expect(flash[:error]).to eq("Something went wrong while enabling two factor authentication")
|
|
183
|
-
end
|
|
184
|
-
|
|
185
|
-
it "Should redirect if user isn't authenticated" do
|
|
186
|
-
post :POST_enable_authy, :cellphone => '3010008090', :country_code => '57'
|
|
187
|
-
expect(response).to redirect_to(new_user_session_url)
|
|
188
|
-
end
|
|
189
|
-
end
|
|
190
|
-
|
|
191
|
-
describe "POST #disable_authy" do
|
|
192
|
-
it "Should disable 2FA" do
|
|
193
|
-
sign_in @user
|
|
194
|
-
@user.update_attribute(:authy_enabled, true)
|
|
195
|
-
|
|
196
|
-
request.cookies["remember_device"] = {
|
|
197
|
-
:value => {expires: Time.now.to_i, id: @user.id}.to_json,
|
|
198
|
-
:secure => false,
|
|
199
|
-
:expires => User.authy_remember_device.from_now
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
post :POST_disable_authy
|
|
203
|
-
|
|
204
|
-
expect(response.cookies["remember_device"]).to be_nil
|
|
205
|
-
@user.reload
|
|
206
|
-
expect(@user.authy_id).to be_nil
|
|
207
|
-
expect(@user.authy_enabled).to be_falsey
|
|
208
|
-
expect(flash.now[:notice]).to eq("Two factor authentication was disabled")
|
|
209
|
-
expect(response).to redirect_to(root_url)
|
|
210
|
-
end
|
|
211
|
-
|
|
212
|
-
it "Should not disable 2FA" do
|
|
213
|
-
sign_in @user
|
|
214
|
-
@user.update_attribute(:authy_enabled, true)
|
|
215
|
-
|
|
216
|
-
authy_response = double('authy_response')
|
|
217
|
-
allow(authy_response).to receive(:ok?).and_return(false)
|
|
218
|
-
expect(Authy::API).to receive(:delete_user).with(:id => @user.authy_id.to_s).and_return(authy_response)
|
|
219
|
-
|
|
220
|
-
post :POST_disable_authy
|
|
221
|
-
@user.reload
|
|
222
|
-
expect(@user.authy_id).not_to be_nil
|
|
223
|
-
expect(@user.authy_enabled).to be_truthy
|
|
224
|
-
expect(flash[:error]).to eq("Something went wrong while disabling two factor authentication")
|
|
225
|
-
end
|
|
226
|
-
|
|
227
|
-
it "Should redirect if user isn't authenticated" do
|
|
228
|
-
post :POST_disable_authy
|
|
229
|
-
expect(response).to redirect_to(new_user_session_url)
|
|
230
|
-
end
|
|
231
|
-
end
|
|
232
|
-
|
|
233
|
-
describe "GET #verify_authy_installation" do
|
|
234
|
-
it "Should render the authy installation page" do
|
|
235
|
-
sign_in @user
|
|
236
|
-
get :GET_verify_authy_installation
|
|
237
|
-
expect(response).to render_template('verify_authy_installation')
|
|
238
|
-
end
|
|
239
|
-
|
|
240
|
-
it "Should redirect if user isn't authenticated" do
|
|
241
|
-
get :GET_verify_authy_installation
|
|
242
|
-
expect(response).to redirect_to(new_user_session_url)
|
|
243
|
-
end
|
|
244
|
-
end
|
|
245
|
-
|
|
246
|
-
describe "POST #verify_authy_installation" do
|
|
247
|
-
it "Should enable authy for user" do
|
|
248
|
-
sign_in @user
|
|
249
|
-
post :POST_verify_authy_installation, :token => "0000000"
|
|
250
|
-
expect(session["user_authy_token_checked"]).to be_truthy
|
|
251
|
-
expect(response).to redirect_to(root_url)
|
|
252
|
-
expect(flash[:notice]).to eq('Two factor authentication was enabled')
|
|
253
|
-
|
|
254
|
-
@user.reload
|
|
255
|
-
expect(@user.authy_enabled).to be_truthy
|
|
256
|
-
end
|
|
257
|
-
|
|
258
|
-
it "should not enable authy for user" do
|
|
259
|
-
sign_in @user
|
|
260
|
-
post :POST_verify_authy_installation, :token => "0007777"
|
|
261
|
-
expect(response).to render_template('verify_authy_installation')
|
|
262
|
-
expect(flash[:error]).to eq('Something went wrong while enabling two factor authentication')
|
|
263
|
-
end
|
|
264
|
-
|
|
265
|
-
it "Should redirect if user isn't authenticated" do
|
|
266
|
-
get :GET_verify_authy_installation
|
|
267
|
-
expect(response).to redirect_to(new_user_session_url)
|
|
268
|
-
end
|
|
269
|
-
end
|
|
270
|
-
|
|
271
|
-
describe "POST #request_sms" do
|
|
272
|
-
it "Should send sms if user is logged" do
|
|
273
|
-
sign_in @user
|
|
274
|
-
post :request_sms
|
|
275
|
-
expect(response.content_type).to eq('application/json')
|
|
276
|
-
body = JSON.parse(response.body)
|
|
277
|
-
|
|
278
|
-
expect(body['sent']).to be_truthy
|
|
279
|
-
expect(body['message']).to eq("Token was sent.")
|
|
280
|
-
end
|
|
281
|
-
|
|
282
|
-
it "Shoul not send sms if user couldn't be found" do
|
|
283
|
-
post :request_sms
|
|
284
|
-
expect(response.content_type).to eq('application/json')
|
|
285
|
-
body = JSON.parse(response.body)
|
|
286
|
-
expect(body['sent']).to be_falsey
|
|
287
|
-
expect(body['message']).to eq("User couldn't be found.")
|
|
288
|
-
end
|
|
289
|
-
end
|
|
290
|
-
|
|
291
|
-
describe "POST #request_phone_call" do
|
|
292
|
-
it "Should send phone call if user is logged" do
|
|
293
|
-
sign_in @user
|
|
294
|
-
post :request_phone_call
|
|
295
|
-
expect(response.content_type).to eq('application/json')
|
|
296
|
-
body = JSON.parse(response.body)
|
|
297
|
-
expect(body['sent']).to be_truthy
|
|
298
|
-
expect(body['message']).to eq("Call started...")
|
|
299
|
-
end
|
|
300
|
-
|
|
301
|
-
it "Shoul not send phone call if user couldn't be found" do
|
|
302
|
-
post :request_phone_call
|
|
303
|
-
expect(response.content_type).to eq('application/json')
|
|
304
|
-
body = JSON.parse(response.body)
|
|
305
|
-
expect(body['sent']).to be_falsey
|
|
306
|
-
expect(body['message']).to eq("User couldn't be found.")
|
|
307
|
-
end
|
|
308
|
-
end
|
|
309
|
-
|
|
310
|
-
describe "GET #authy_onetouch_status" do
|
|
311
|
-
# OneTouch stubbed due to test API key not having OneTouch enabled
|
|
312
|
-
before do
|
|
313
|
-
allow(Authy::OneTouch).to receive(:send_approval_request).with(id: @user.authy_id) { { 'approval_request' => { 'uuid' => SecureRandom.uuid } } }
|
|
314
|
-
@uuid = Authy::OneTouch.send_approval_request(id: @user.authy_id)['approval_request']['uuid']
|
|
315
|
-
end
|
|
316
|
-
|
|
317
|
-
it "Should return a 202 status code when pending" do
|
|
318
|
-
allow(Authy::API).to receive(:get_request).with(/onetouch\/json\/approval_requests\/.+/) { { 'approval_request' => { 'status' => 'pending' } } }
|
|
319
|
-
request.session["user_id"] = @user.id
|
|
320
|
-
request.session["user_password_checked"] = true
|
|
321
|
-
get :GET_authy_onetouch_status, onetouch_uuid: @uuid
|
|
322
|
-
expect(response.code).to eq("202")
|
|
323
|
-
end
|
|
324
|
-
|
|
325
|
-
it "Should return a 401 status code when denied" do
|
|
326
|
-
allow(Authy::API).to receive(:get_request).with(/onetouch\/json\/approval_requests\/.+/) { { 'approval_request' => { 'status' => 'denied' } } }
|
|
327
|
-
request.session["user_id"] = @user.id
|
|
328
|
-
request.session["user_password_checked"] = true
|
|
329
|
-
get :GET_authy_onetouch_status, onetouch_uuid: @uuid
|
|
330
|
-
expect(response.code).to eq("401")
|
|
331
|
-
end
|
|
332
|
-
|
|
333
|
-
it "Should return a 200 status code when approved" do
|
|
334
|
-
allow(Authy::API).to receive(:get_request).with(/onetouch\/json\/approval_requests\/.+/) { { 'approval_request' => { 'status' => 'approved' } } }
|
|
335
|
-
request.session["user_id"] = @user.id
|
|
336
|
-
request.session["user_password_checked"] = true
|
|
337
|
-
get :GET_authy_onetouch_status, onetouch_uuid: @uuid
|
|
338
|
-
expect(response.code).to eq("200")
|
|
339
|
-
end
|
|
340
|
-
|
|
341
|
-
it "Should render a JSON object with the redirect path when approved" do
|
|
342
|
-
allow(Authy::API).to receive(:get_request).with(/onetouch\/json\/approval_requests\/.+/) { { 'approval_request' => { 'status' => 'approved' } } }
|
|
343
|
-
request.session["user_id"] = @user.id
|
|
344
|
-
request.session["user_password_checked"] = true
|
|
345
|
-
get :GET_authy_onetouch_status, onetouch_uuid: @uuid
|
|
346
|
-
expect(response.body).to eq({ redirect: root_path }.to_json)
|
|
347
|
-
end
|
|
348
|
-
|
|
349
|
-
it "Should not render the second step of authentication if first step is incomplete" do
|
|
350
|
-
request.session["user_id"] = @user.id
|
|
351
|
-
get :GET_authy_onetouch_status
|
|
352
|
-
expect(response).to redirect_to(root_url)
|
|
353
|
-
end
|
|
354
|
-
|
|
355
|
-
it "should redirect to root_url" do
|
|
356
|
-
get :GET_authy_onetouch_status
|
|
357
|
-
expect(response).to redirect_to(root_url)
|
|
358
|
-
end
|
|
359
|
-
end
|
|
360
|
-
end
|