devise_fido_usf 0.1.7 → 0.1.8
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/app/controllers/devise/fido_usf_registrations_controller.rb +51 -20
- data/app/views/devise/fido_usf_authentications/new.html.erb +1 -1
- data/app/views/devise/fido_usf_registrations/_device.html.erb +1 -1
- data/app/views/devise/fido_usf_registrations/new.html.erb +1 -1
- data/app/views/devise/fido_usf_registrations/show.html.erb +1 -1
- data/lib/devise_fido_usf/controllers/helpers.rb +9 -7
- data/lib/devise_fido_usf/models/fido_usf_registerable.rb +4 -1
- data/lib/devise_fido_usf/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 96c8b3e2463da3287d1e62f498c6ad481a98e928
|
4
|
+
data.tar.gz: ef2e2c7a249c4ceef0d07f2d121b45be1ae0d491
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f2b0854980aacbbc4480475d193ba47ec360f4b72729895303bbf8935d5225c38c7c63d95d52c6ce615518f430b0e7c9ef80c6d4c5e4a3c258cfce69edc42130
|
7
|
+
data.tar.gz: a8be7220ea71e7e0aa9655403fe0e639994a9ed4607530ecfcdebacdf2e65481bccc7185663fbc58a35eb6adc37f31a8196ee7b11e7cd9fd88c0fadb08214e72
|
@@ -1,10 +1,10 @@
|
|
1
1
|
class Devise::FidoUsfRegistrationsController < ApplicationController
|
2
|
-
before_action :
|
2
|
+
before_action :authenticate_resource!
|
3
3
|
|
4
4
|
def new
|
5
5
|
@registration_requests = u2f.registration_requests
|
6
6
|
session[:challenges] = @registration_requests.map(&:challenge)
|
7
|
-
key_handles =
|
7
|
+
key_handles = resource.fido_usf_devices.map(&:key_handle)
|
8
8
|
@sign_requests = u2f.authentication_requests(key_handles)
|
9
9
|
@app_id = u2f.app_id
|
10
10
|
render :new
|
@@ -12,19 +12,21 @@ class Devise::FidoUsfRegistrationsController < ApplicationController
|
|
12
12
|
|
13
13
|
# Show a list of all registered devices
|
14
14
|
def show
|
15
|
-
@devices =
|
15
|
+
@devices = resource.fido_usf_devices.all
|
16
16
|
render :show
|
17
17
|
end
|
18
18
|
|
19
19
|
def destroy
|
20
|
-
device =
|
21
|
-
@fade_out_id = device.id
|
20
|
+
device = resource.fido_usf_devices.find(params[:id])
|
21
|
+
@fade_out_id = device.id unless params[:on_success_redirect_to]
|
22
22
|
device.destroy
|
23
|
-
|
23
|
+
unless params[:on_success_redirect_to]
|
24
|
+
@devices = resource.fido_usf_devices.all
|
25
|
+
end
|
24
26
|
flash[:success] = I18n.t('fido_usf.flashs.device.removed')
|
25
27
|
respond_to do |format|
|
26
28
|
format.js
|
27
|
-
format.html { redirect_to
|
29
|
+
format.html { redirect_to fido_usf_registration_url }
|
28
30
|
end
|
29
31
|
end
|
30
32
|
|
@@ -34,39 +36,55 @@ class Devise::FidoUsfRegistrationsController < ApplicationController
|
|
34
36
|
reg = u2f.register!(session[:challenges], response)
|
35
37
|
|
36
38
|
pubkey = reg.public_key
|
37
|
-
pubkey = Base64.decode64(reg.public_key) unless pubkey.bytesize == 65 && pubkey.byteslice(0) != "\x04"
|
38
|
-
|
39
|
+
pubkey = Base64.decode64(reg.public_key) unless pubkey.bytesize == 65 && pubkey.byteslice(0) != "\x04"
|
40
|
+
|
39
41
|
@device = FidoUsf::FidoUsfDevice.create!(
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
42
|
+
user: resource,
|
43
|
+
name: "Token ##{resource.fido_usf_devices.count + 1}",
|
44
|
+
certificate: reg.certificate,
|
45
|
+
key_handle: reg.key_handle,
|
46
|
+
public_key: pubkey,
|
47
|
+
counter: reg.counter,
|
48
|
+
last_authenticated_at: Time.now
|
49
|
+
)
|
47
50
|
flash[:success] = I18n.t('fido_usf.flashs.device.registered')
|
48
51
|
rescue U2F::Error => e
|
49
52
|
@error_message = "Unable to register: #{e.class.name}"
|
50
|
-
flash[:error] = @error_message
|
53
|
+
flash[:error] = @error_message
|
51
54
|
ensure
|
52
55
|
session.delete(:challenges)
|
53
56
|
end
|
54
57
|
|
55
58
|
respond_to do |format|
|
56
59
|
format.js
|
57
|
-
format.html { redirect_to
|
60
|
+
format.html { redirect_to fido_usf_registration_url }
|
58
61
|
end
|
59
62
|
end
|
60
63
|
|
61
64
|
def update
|
62
|
-
device =
|
65
|
+
device = resource.fido_usf_devices.find(params[:id])
|
63
66
|
device.update!(fido_usf_params)
|
64
67
|
respond_to do |format|
|
65
68
|
format.js
|
66
|
-
format.html { redirect_to
|
69
|
+
format.html { redirect_to fido_usf_registration_url }
|
67
70
|
end
|
68
71
|
end
|
69
72
|
|
73
|
+
if respond_to?(:helper_method)
|
74
|
+
helpers = %w[resource_name]
|
75
|
+
helper_method(*helpers)
|
76
|
+
end
|
77
|
+
|
78
|
+
protected
|
79
|
+
|
80
|
+
def resource_name
|
81
|
+
devise_mapping.name
|
82
|
+
end
|
83
|
+
|
84
|
+
def devise_mapping
|
85
|
+
@devise_mapping ||= request.env['devise.mapping']
|
86
|
+
end
|
87
|
+
|
70
88
|
private
|
71
89
|
|
72
90
|
def fido_usf_params
|
@@ -78,4 +96,17 @@ class Devise::FidoUsfRegistrationsController < ApplicationController
|
|
78
96
|
# use base_url as app_id, e.g. 'http://localhost:3000'
|
79
97
|
@u2f ||= U2F::U2F.new(request.base_url)
|
80
98
|
end
|
99
|
+
|
100
|
+
def resource
|
101
|
+
send("current_#{resource_name}")
|
102
|
+
end
|
103
|
+
|
104
|
+
def authenticate_resource!
|
105
|
+
send("authenticate_#{resource_name}!")
|
106
|
+
end
|
107
|
+
|
108
|
+
def fido_usf_registration_url
|
109
|
+
params[:on_success_redirect_to].presence ||
|
110
|
+
send("#{resource_name}_fido_usf_registration_url")
|
111
|
+
end
|
81
112
|
end
|
@@ -2,7 +2,7 @@
|
|
2
2
|
<p>Please insert one of your registered keys and press the button within 15 seconds</p>
|
3
3
|
<p id="waiting">Waiting...</p>
|
4
4
|
<p id="error" style="display: none;"></p>
|
5
|
-
<%= form_tag
|
5
|
+
<%= form_tag send("#{resource_name}_fido_usf_authentication_path"), method: 'post' do %>
|
6
6
|
<%= hidden_field_tag :response %>
|
7
7
|
<% end %>
|
8
8
|
<script>
|
@@ -1,5 +1,5 @@
|
|
1
1
|
<tr id="device_<%= device.id %>">
|
2
2
|
<td><%= device.name %></td>
|
3
3
|
<td><%= l(device.last_authenticated_at, format: :long) %></td>
|
4
|
-
<td><%= link_to 'Delete',
|
4
|
+
<td><%= link_to 'Delete', send("#{resource_name}_fido_usf_registration_path", id: device.id), remote: true, method: :delete, data: { confirm: "Should device #{device.name} be deleted?" } %></td>
|
5
5
|
</tr>
|
@@ -3,7 +3,7 @@
|
|
3
3
|
<p id="waiting">Waiting...</p>
|
4
4
|
<p id="error" style="display: none;"></p>
|
5
5
|
|
6
|
-
<%= form_tag
|
6
|
+
<%= form_tag send("#{resource_name}_fido_usf_registration_path"), method: 'post' do %>
|
7
7
|
<%= hidden_field_tag :response %>
|
8
8
|
<% end %>
|
9
9
|
|
@@ -2,4 +2,4 @@
|
|
2
2
|
<p>List of registered devices:</p>
|
3
3
|
<%= render 'devise/fido_usf_registrations/devices' %>
|
4
4
|
<p><%= link_to 'Back', root_path %></p>
|
5
|
-
<p><%= link_to 'Add',
|
5
|
+
<p><%= link_to 'Add', send("new_#{resource_name}_fido_usf_registration_path") %></p>
|
@@ -7,22 +7,24 @@ module DeviseFidoUsf
|
|
7
7
|
|
8
8
|
included do
|
9
9
|
before_action :check_request_and_redirect_to_verify_fido_usf,
|
10
|
-
if: :
|
10
|
+
if: :user_signing_in?
|
11
11
|
end
|
12
12
|
|
13
13
|
private
|
14
|
-
|
15
|
-
|
14
|
+
|
15
|
+
def devise_sessions_controller?
|
16
|
+
self.class == Devise::SessionsController ||
|
17
|
+
self.class.ancestors.include?(Devise::SessionsController)
|
16
18
|
end
|
17
19
|
|
18
|
-
def
|
20
|
+
def user_signing_in?
|
19
21
|
if devise_controller? && signed_in?(resource_name) &&
|
20
|
-
|
21
|
-
|
22
|
+
devise_sessions_controller? &&
|
23
|
+
action_name == 'create'
|
22
24
|
return true
|
23
25
|
end
|
24
26
|
|
25
|
-
|
27
|
+
false
|
26
28
|
end
|
27
29
|
|
28
30
|
def check_request_and_redirect_to_verify_fido_usf
|
@@ -4,7 +4,10 @@ module Devise
|
|
4
4
|
extend ActiveSupport::Concern
|
5
5
|
|
6
6
|
included do
|
7
|
-
has_many :fido_usf_devices,
|
7
|
+
has_many :fido_usf_devices,
|
8
|
+
as: :user,
|
9
|
+
class_name: 'FidoUsf::FidoUsfDevice',
|
10
|
+
dependent: :destroy
|
8
11
|
end
|
9
12
|
end
|
10
13
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: devise_fido_usf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- H. Gregor Molter
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-01-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: devise
|