devise-authy 1.5.1 → 1.5.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/VERSION +1 -1
- data/app/controllers/devise/devise_authy_controller.rb +16 -1
- data/app/controllers/devise_authy/passwords_controller.rb +12 -0
- data/authy-devise-demo/app/views/welcome/index.html.erb +6 -1
- data/authy-devise-demo/config/environments/development.rb +2 -0
- data/config/locales/en.yml +2 -0
- data/devise-authy.gemspec +6 -3
- data/lib/devise-authy.rb +8 -3
- data/lib/devise-authy/controllers/helpers.rb +2 -3
- data/lib/devise-authy/mapping.rb +14 -0
- data/lib/devise-authy/rails.rb +5 -0
- data/lib/devise-authy/routes.rb +2 -0
- data/lib/generators/active_record/devise_authy_generator.rb +1 -1
- data/spec/controllers/devise_authy_controller_spec.rb +34 -0
- data/spec/controllers/passwords_controller_spec.rb +48 -0
- data/spec/rails-app/Gemfile.lock +1 -1
- data/spec/rails-app/config/environments/test.rb +2 -0
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8ae1f6fbc203862085abd304cc928dfee2fd2dda
|
4
|
+
data.tar.gz: ed576398d4d571f5dec9d4f646d4736a5cb688d2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aff8716fb178b1bccf6c81a1cd8f0edca118cbd2e385ace47b27568d89f5b2d81f4b3f7ea7c8adcc15298267a332221da5bff0be102bb1b0425116d03653209e
|
7
|
+
data.tar.gz: 613afb26bd7b9056379892a2659577a9cd812196e3d2395375210d99882b3c0f0004e52cd84dd8fb7e9a00819803aa752d022ec1baff4cd548cffbc37885442e
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.5.
|
1
|
+
1.5.2
|
@@ -7,7 +7,8 @@ class Devise::DeviseAuthyController < DeviseController
|
|
7
7
|
]
|
8
8
|
prepend_before_filter :authenticate_scope!, :only => [
|
9
9
|
:GET_enable_authy, :POST_enable_authy,
|
10
|
-
:GET_verify_authy_installation, :POST_verify_authy_installation
|
10
|
+
:GET_verify_authy_installation, :POST_verify_authy_installation,
|
11
|
+
:POST_disable_authy
|
11
12
|
]
|
12
13
|
include Devise::Controllers::Helpers
|
13
14
|
|
@@ -74,6 +75,20 @@ class Devise::DeviseAuthyController < DeviseController
|
|
74
75
|
end
|
75
76
|
end
|
76
77
|
|
78
|
+
# Disable 2FA
|
79
|
+
def POST_disable_authy
|
80
|
+
resource.authy_enabled = false
|
81
|
+
resource.authy_id = nil
|
82
|
+
|
83
|
+
if resource.save
|
84
|
+
set_flash_message(:notice, :disabled)
|
85
|
+
else
|
86
|
+
set_flash_message(:error, :not_disabled)
|
87
|
+
end
|
88
|
+
|
89
|
+
redirect_to root_path
|
90
|
+
end
|
91
|
+
|
77
92
|
def GET_verify_authy_installation
|
78
93
|
render :verify_authy_installation
|
79
94
|
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
class DeviseAuthy::PasswordsController < Devise::PasswordsController
|
2
|
+
def sign_in(resource_or_scope, *args)
|
3
|
+
resource = args.last || resource_or_scope
|
4
|
+
|
5
|
+
if resource.with_authy_authentication?(request)
|
6
|
+
# Do nothing. Because we need verify the 2FA
|
7
|
+
true
|
8
|
+
else
|
9
|
+
super
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -1,5 +1,10 @@
|
|
1
1
|
<h1>Welcome#index</h1>
|
2
2
|
<p>Find me in app/views/welcome/index.html.erb</p>
|
3
3
|
|
4
|
-
|
4
|
+
<% if current_user.authy_enabled %>
|
5
|
+
<%= link_to "Disable authy", user_disable_authy_path, :method => :post %>
|
6
|
+
<% else %>
|
7
|
+
<%= link_to "Enable authy", user_enable_authy_path %>
|
8
|
+
<% end %>
|
9
|
+
|
5
10
|
<%= link_to "Logout", destroy_user_session_path, :method => :delete %>
|
data/config/locales/en.yml
CHANGED
@@ -16,6 +16,8 @@ en:
|
|
16
16
|
user:
|
17
17
|
enabled: 'Two factor authentication was enabled'
|
18
18
|
not_enabled: 'Something went wrong while enabling two factor authentication'
|
19
|
+
disabled: 'Two factor authentication was disabled'
|
20
|
+
not_disabled: 'Something went wrong while disabling two factor authentication'
|
19
21
|
signed_in: 'Signed in with Authy successfully.'
|
20
22
|
already_enabled: "Two factor authentication is already enabled."
|
21
23
|
invalid_token: 'The entered token is invalid'
|
data/devise-authy.gemspec
CHANGED
@@ -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.5.
|
5
|
+
# stub: devise-authy 1.5.2 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "devise-authy"
|
9
|
-
s.version = "1.5.
|
9
|
+
s.version = "1.5.2"
|
10
10
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
12
12
|
s.require_paths = ["lib"]
|
13
13
|
s.authors = ["Authy Inc."]
|
14
|
-
s.date = "2014-
|
14
|
+
s.date = "2014-06-10"
|
15
15
|
s.description = "Authy plugin for Devise"
|
16
16
|
s.email = "support@authy.com"
|
17
17
|
s.extra_rdoc_files = [
|
@@ -31,6 +31,7 @@ Gem::Specification.new do |s|
|
|
31
31
|
"app/assets/stylesheets/devise_authy.css",
|
32
32
|
"app/assets/stylesheets/devise_authy.sass",
|
33
33
|
"app/controllers/devise/devise_authy_controller.rb",
|
34
|
+
"app/controllers/devise_authy/passwords_controller.rb",
|
34
35
|
"app/views/devise/enable_authy.html.erb",
|
35
36
|
"app/views/devise/enable_authy.html.haml",
|
36
37
|
"app/views/devise/verify_authy.html.erb",
|
@@ -113,6 +114,7 @@ Gem::Specification.new do |s|
|
|
113
114
|
"lib/devise-authy/controllers/helpers.rb",
|
114
115
|
"lib/devise-authy/controllers/view_helpers.rb",
|
115
116
|
"lib/devise-authy/hooks/authy_authenticatable.rb",
|
117
|
+
"lib/devise-authy/mapping.rb",
|
116
118
|
"lib/devise-authy/models/authy_authenticatable.rb",
|
117
119
|
"lib/devise-authy/rails.rb",
|
118
120
|
"lib/devise-authy/routes.rb",
|
@@ -121,6 +123,7 @@ Gem::Specification.new do |s|
|
|
121
123
|
"lib/generators/devise_authy/devise_authy_generator.rb",
|
122
124
|
"lib/generators/devise_authy/install_generator.rb",
|
123
125
|
"spec/controllers/devise_authy_controller_spec.rb",
|
126
|
+
"spec/controllers/passwords_controller_spec.rb",
|
124
127
|
"spec/features/authy_authenticatable_spec.rb",
|
125
128
|
"spec/generators_spec.rb",
|
126
129
|
"spec/models/authy_authenticatable.rb",
|
data/lib/devise-authy.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
require 'active_support/concern'
|
2
2
|
require 'active_support/core_ext/integer/time'
|
3
|
-
require 'devise'
|
4
3
|
require 'authy'
|
5
4
|
|
6
5
|
module Devise
|
@@ -8,17 +7,23 @@ module Devise
|
|
8
7
|
@@authy_remember_device = 1.month
|
9
8
|
end
|
10
9
|
|
10
|
+
require 'devise'
|
11
|
+
require 'devise-authy/routes'
|
12
|
+
require 'devise-authy/rails'
|
13
|
+
|
11
14
|
module DeviseAuthy
|
15
|
+
autoload :Mapping, 'devise-authy/mapping'
|
16
|
+
|
12
17
|
module Controllers
|
18
|
+
autoload :Passwords, 'devise-authy/controllers/passwords'
|
13
19
|
autoload :Helpers, 'devise-authy/controllers/helpers'
|
14
20
|
end
|
21
|
+
|
15
22
|
module Views
|
16
23
|
autoload :Helpers, 'devise-authy/controllers/view_helpers'
|
17
24
|
end
|
18
25
|
end
|
19
26
|
|
20
|
-
require 'devise-authy/routes'
|
21
|
-
require 'devise-authy/rails'
|
22
27
|
require 'devise-authy/models/authy_authenticatable'
|
23
28
|
|
24
29
|
Devise.add_module :authy_authenticatable, :model => 'devise-authy/models/authy_authenticatable', :controller => :devise_authy, :route => :authy
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module DeviseAuthy
|
2
|
+
module Mapping
|
3
|
+
def self.included(base)
|
4
|
+
base.alias_method_chain :default_controllers, :authy_authenticatable
|
5
|
+
end
|
6
|
+
|
7
|
+
private
|
8
|
+
def default_controllers_with_authy_authenticatable(options)
|
9
|
+
options[:controllers] ||= {}
|
10
|
+
options[:controllers][:passwords] ||= "devise_authy/passwords"
|
11
|
+
default_controllers_without_authy_authenticatable(options)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
data/lib/devise-authy/rails.rb
CHANGED
@@ -6,6 +6,11 @@ module DeviseAuthy
|
|
6
6
|
ActiveSupport.on_load(:action_view) do
|
7
7
|
include DeviseAuthy::Views::Helpers
|
8
8
|
end
|
9
|
+
|
10
|
+
# extend mapping with after_initialize because it's not reloaded
|
11
|
+
config.after_initialize do
|
12
|
+
Devise::Mapping.send :include, DeviseAuthy::Mapping
|
13
|
+
end
|
9
14
|
end
|
10
15
|
end
|
11
16
|
|
data/lib/devise-authy/routes.rb
CHANGED
@@ -9,6 +9,8 @@ module ActionDispatch::Routing
|
|
9
9
|
match "/#{mapping.path_names[:enable_authy]}", :controller => controllers[:devise_authy], :action => :GET_enable_authy, :as => :enable_authy, :via => :get
|
10
10
|
match "/#{mapping.path_names[:enable_authy]}", :controller => controllers[:devise_authy], :action => :POST_enable_authy, :as => nil, :via => :post
|
11
11
|
|
12
|
+
match "/#{mapping.path_names[:disable_authy]}", :controller => controllers[:devise_authy], :action => :POST_disable_authy, :as => :disable_authy, :via => :post
|
13
|
+
|
12
14
|
match "/#{mapping.path_names[:verify_authy_installation]}", :controller => controllers[:devise_authy], :action => :GET_verify_authy_installation, :as => :verify_authy_installation, :via => :get
|
13
15
|
match "/#{mapping.path_names[:verify_authy_installation]}", :controller => controllers[:devise_authy], :action => :POST_verify_authy_installation, :as => nil, :via => :post
|
14
16
|
|
@@ -6,7 +6,7 @@ module ActiveRecord
|
|
6
6
|
source_root File.expand_path("../templates", __FILE__)
|
7
7
|
|
8
8
|
def copy_devise_migration
|
9
|
-
migration_template "migration.rb", "db/migrate/devise_authy_add_to_#{table_name}"
|
9
|
+
migration_template "migration.rb", "db/migrate/devise_authy_add_to_#{table_name}.rb"
|
10
10
|
end
|
11
11
|
end
|
12
12
|
end
|
@@ -119,6 +119,40 @@ describe Devise::DeviseAuthyController do
|
|
119
119
|
end
|
120
120
|
end
|
121
121
|
|
122
|
+
describe "POST #disable_authy" do
|
123
|
+
it "Should disable 2FA" do
|
124
|
+
sign_in @user
|
125
|
+
@user.authy_enabled = true
|
126
|
+
@user.save
|
127
|
+
|
128
|
+
post :POST_disable_authy
|
129
|
+
@user.reload
|
130
|
+
@user.authy_id.should be_nil
|
131
|
+
@user.authy_enabled.should be_false
|
132
|
+
flash.now[:notice].should == "Two factor authentication was disabled"
|
133
|
+
response.should redirect_to(root_url)
|
134
|
+
end
|
135
|
+
|
136
|
+
it "Should not disable 2FA" do
|
137
|
+
sign_in @user
|
138
|
+
@user.authy_enabled = true
|
139
|
+
@user.save
|
140
|
+
|
141
|
+
User.any_instance.stub(:save).and_return(false)
|
142
|
+
|
143
|
+
post :POST_disable_authy
|
144
|
+
@user.reload
|
145
|
+
@user.authy_id.should_not be_nil
|
146
|
+
@user.authy_enabled.should be_true
|
147
|
+
flash[:error].should == "Something went wrong while disabling two factor authentication"
|
148
|
+
end
|
149
|
+
|
150
|
+
it "Should redirect if user isn't authenticated" do
|
151
|
+
post :POST_disable_authy
|
152
|
+
response.should redirect_to(new_user_session_url)
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
122
156
|
describe "GET #verify_authy_installation" do
|
123
157
|
it "Should render the authy installation page" do
|
124
158
|
sign_in @user
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe DeviseAuthy::PasswordsController do
|
4
|
+
include Devise::TestHelpers
|
5
|
+
|
6
|
+
before :each do
|
7
|
+
request.env["devise.mapping"] = Devise.mappings[:user]
|
8
|
+
end
|
9
|
+
|
10
|
+
context "when the user has authy enabled" do
|
11
|
+
|
12
|
+
describe "Reset password" do
|
13
|
+
it "Should redirect to verify token view" do
|
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
|
+
user.authy_enabled = true
|
18
|
+
user.save
|
19
|
+
|
20
|
+
put :update, :user => { :reset_password_token => user.reset_password_token, :password => "password", :password_confirmation => "password" }
|
21
|
+
|
22
|
+
user.reload
|
23
|
+
user.last_sign_in_at.should be_nil
|
24
|
+
response.should redirect_to(root_url)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
context "when the user don't have 2FA" do
|
30
|
+
describe "Reset password" do
|
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
|
35
|
+
user.save
|
36
|
+
|
37
|
+
last_sign_in_at = user.last_sign_in_at
|
38
|
+
|
39
|
+
put :update, :user => { :reset_password_token => user.reset_password_token, :password => "password", :password_confirmation => "password" }
|
40
|
+
response.should redirect_to(root_url)
|
41
|
+
|
42
|
+
user.reload
|
43
|
+
user.last_sign_in_at.should_not be_nil
|
44
|
+
flash[:notice].should == "Your password was changed successfully. You are now signed in."
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
data/spec/rails-app/Gemfile.lock
CHANGED
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.5.
|
4
|
+
version: 1.5.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: 2014-
|
11
|
+
date: 2014-06-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: devise
|
@@ -184,6 +184,7 @@ files:
|
|
184
184
|
- app/assets/stylesheets/devise_authy.css
|
185
185
|
- app/assets/stylesheets/devise_authy.sass
|
186
186
|
- app/controllers/devise/devise_authy_controller.rb
|
187
|
+
- app/controllers/devise_authy/passwords_controller.rb
|
187
188
|
- app/views/devise/enable_authy.html.erb
|
188
189
|
- app/views/devise/enable_authy.html.haml
|
189
190
|
- app/views/devise/verify_authy.html.erb
|
@@ -266,6 +267,7 @@ files:
|
|
266
267
|
- lib/devise-authy/controllers/helpers.rb
|
267
268
|
- lib/devise-authy/controllers/view_helpers.rb
|
268
269
|
- lib/devise-authy/hooks/authy_authenticatable.rb
|
270
|
+
- lib/devise-authy/mapping.rb
|
269
271
|
- lib/devise-authy/models/authy_authenticatable.rb
|
270
272
|
- lib/devise-authy/rails.rb
|
271
273
|
- lib/devise-authy/routes.rb
|
@@ -274,6 +276,7 @@ files:
|
|
274
276
|
- lib/generators/devise_authy/devise_authy_generator.rb
|
275
277
|
- lib/generators/devise_authy/install_generator.rb
|
276
278
|
- spec/controllers/devise_authy_controller_spec.rb
|
279
|
+
- spec/controllers/passwords_controller_spec.rb
|
277
280
|
- spec/features/authy_authenticatable_spec.rb
|
278
281
|
- spec/generators_spec.rb
|
279
282
|
- spec/models/authy_authenticatable.rb
|