devise_fido_usf 0.1.6 → 0.1.7

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6818c646ee1328a03e416afb48e95a3249a24093
4
- data.tar.gz: 5363ecb84e7f86b72ed9de132c10c11e9c1e8367
3
+ metadata.gz: 42abbd5255725a51542abfb644b763acb7d88bc0
4
+ data.tar.gz: d4a778d571a0d53f8b795019b7b0f4d926c74463
5
5
  SHA512:
6
- metadata.gz: 5f9f9e9ea7abe3caf6c7ee5b54da01ad66d7cde4fbdeac61d4ea5730c8927974f1cbee27cbce71da740ab16e53eda309d914484ca8bb18d28aafa402b510a000
7
- data.tar.gz: 3c9f2e4522e85de76327404fde6471afe51e37b759c2226daef855d08ea0d33c08c95e4308cd9205671ba100ffca6fe3ca6d41a608ee9850ff95d6d438fc1ee9
6
+ metadata.gz: b3731b702a48ab0544f31482d1b00e6ddf3972ff22ff83fed7d098e111d5b3c4098eb2f9681bfcd179493ef4d3fe57c94027f52e88be5cdc5dcb061dc22ee69d
7
+ data.tar.gz: 538830aa044e285f94d089d89c8b21f7cd077f84c27fe3853409a4d790c17d068870e9f5329c77959b74efbe8baf0444734993d9e159fadc1dc51d9ba0fe5a6f
@@ -3,9 +3,9 @@ class Devise::FidoUsfAuthenticationsController < DeviseController
3
3
 
4
4
  def new
5
5
  key_handles = @resource.fido_usf_devices.map(&:key_handle)
6
- @app_id = helpers.u2f.app_id
7
- @sign_requests = helpers.u2f.authentication_requests(key_handles)
8
- @challenge = helpers.u2f.challenge
6
+ @app_id = u2f.app_id
7
+ @sign_requests = u2f.authentication_requests(key_handles)
8
+ @challenge = u2f.challenge
9
9
  session[:"#{resource_name}_u2f_challenge"] = @challenge
10
10
  render :new
11
11
  end
@@ -17,14 +17,15 @@ class Devise::FidoUsfAuthenticationsController < DeviseController
17
17
  return redirect_to root_path
18
18
  end
19
19
 
20
- registration = @resource.fido_usf_devices.find_by_key_handle(response.key_handle)
20
+ registration = @resource.fido_usf_devices
21
+ .find_by(key_handle: response.key_handle)
21
22
  return 'Need to register first' unless registration
22
23
 
23
24
  begin
24
-
25
- #helpers.u2f.authenticate!(session[:"#{resource_name}_u2f_challenge"], response, Base64.decode64(registration.public_key), registration.counter)
26
- helpers.u2f.authenticate!(session[:"#{resource_name}_u2f_challenge"], response, registration.public_key, registration.counter)
27
- registration.update(counter: response.counter, last_authenticated_at: Time.now)
25
+ u2f.authenticate!(session[:"#{resource_name}_u2f_challenge"], response,
26
+ registration.public_key, registration.counter)
27
+ registration.update(counter: response.counter,
28
+ last_authenticated_at: Time.now)
28
29
 
29
30
  # Remember the user (if applicable)
30
31
  @resource.remember_me = Devise::TRUE_VALUES.include?(session[:"#{resource_name}_remember_me"]) if @resource.respond_to?(:remember_me=)
@@ -38,10 +39,11 @@ class Devise::FidoUsfAuthenticationsController < DeviseController
38
39
  session.delete(:"#{resource_name}_u2f_challenge")
39
40
  end
40
41
 
41
- respond_with resource, :location => after_sign_in_path_for(@resource)
42
+ respond_with resource, location: after_sign_in_path_for(@resource)
42
43
  end
43
44
 
44
45
  private
46
+
45
47
  def find_resource_and_verify_password
46
48
  @resource = send("current_#{resource_name}")
47
49
  if @resource.nil?
@@ -51,4 +53,9 @@ class Devise::FidoUsfAuthenticationsController < DeviseController
51
53
  redirect_to root_path
52
54
  end
53
55
  end
56
+
57
+ def u2f
58
+ # use base_url as app_id, e.g. 'http://localhost:3000'
59
+ @u2f ||= U2F::U2F.new(request.base_url)
60
+ end
54
61
  end
@@ -2,11 +2,11 @@ class Devise::FidoUsfRegistrationsController < ApplicationController
2
2
  before_action :authenticate_user!
3
3
 
4
4
  def new
5
- @registration_requests = helpers.u2f.registration_requests
5
+ @registration_requests = u2f.registration_requests
6
6
  session[:challenges] = @registration_requests.map(&:challenge)
7
7
  key_handles = current_user.fido_usf_devices.map(&:key_handle)
8
- @sign_requests = helpers.u2f.authentication_requests(key_handles)
9
- @app_id = helpers.u2f.app_id
8
+ @sign_requests = u2f.authentication_requests(key_handles)
9
+ @app_id = u2f.app_id
10
10
  render :new
11
11
  end
12
12
 
@@ -31,8 +31,8 @@ class Devise::FidoUsfRegistrationsController < ApplicationController
31
31
  def create
32
32
  begin
33
33
  response = U2F::RegisterResponse.load_from_json(params[:response])
34
- reg = helpers.u2f.register!(session[:challenges], response)
35
-
34
+ reg = u2f.register!(session[:challenges], response)
35
+
36
36
  pubkey = reg.public_key
37
37
  pubkey = Base64.decode64(reg.public_key) unless pubkey.bytesize == 65 && pubkey.byteslice(0) != "\x04"
38
38
 
@@ -68,8 +68,14 @@ class Devise::FidoUsfRegistrationsController < ApplicationController
68
68
  end
69
69
 
70
70
  private
71
- def fido_usf_params
72
- # Only allow to update the name
73
- params.require(:fido_usf_device).permit(:name)
74
- end
71
+
72
+ def fido_usf_params
73
+ # Only allow to update the name
74
+ params.require(:fido_usf_device).permit(:name)
75
+ end
76
+
77
+ def u2f
78
+ # use base_url as app_id, e.g. 'http://localhost:3000'
79
+ @u2f ||= U2F::U2F.new(request.base_url)
80
+ end
75
81
  end
@@ -26,26 +26,35 @@ module DeviseFidoUsf
26
26
  end
27
27
 
28
28
  def check_request_and_redirect_to_verify_fido_usf
29
- if signed_in?(resource_name) && warden.session(resource_name)[:with_fido_usf_authentication]
29
+ if signed_in?(resource_name) &&
30
+ warden.session(resource_name)[:with_fido_usf_authentication]
30
31
  # login with 2fa
31
32
  id = warden.session(resource_name)[:id]
32
33
 
34
+ remember_me = Devise::TRUE_VALUES.include?(remember_me_from_params)
33
35
  return_to = session["#{resource_name}_return_to"]
34
- remember_me = Devise::TRUE_VALUES.include?(sign_in_params[:remember_me])
36
+
35
37
  sign_out
36
38
 
37
- # It is secure to put these information in a Rails 5 session
38
- # because cookies are signed and encrypted.
39
- session["#{resource_name}_id"] = id
40
- session["#{resource_name}_remember_me"] = remember_me
41
- session["#{resource_name}_password_checked"] = true
42
- session["#{resource_name}_return_to"] = return_to if return_to
39
+ update_session_with!(id, remember_me, return_to)
43
40
 
44
41
  redirect_to verify_fido_usf_path_for(resource_name)
45
- return
46
42
  end
47
43
  end
48
44
 
45
+ def remember_me_from_params
46
+ sign_in_params[:remember_me]
47
+ end
48
+
49
+ def update_session_with!(id, remember_me, return_to)
50
+ # It is secure to put these information in a Rails 5 session
51
+ # because cookies are signed and encrypted.
52
+ session["#{resource_name}_id"] = id
53
+ session["#{resource_name}_remember_me"] = remember_me
54
+ session["#{resource_name}_password_checked"] = true
55
+ session["#{resource_name}_return_to"] = return_to if return_to
56
+ end
57
+
49
58
  def verify_fido_usf_path_for(resource_or_scope = nil)
50
59
  scope = Devise::Mapping.find_scope!(resource_or_scope)
51
60
  send(:"new_#{scope}_fido_usf_authentication_path")
@@ -1,10 +1,14 @@
1
1
  Warden::Manager.after_authentication do |user, auth, options|
2
- if user.respond_to?(:with_fido_usf_authentication?)
3
- with_fido_usf_authentication = user.with_fido_usf_authentication?()
4
- auth.session(options[:scope])[:with_fido_usf_authentication] = with_fido_usf_authentication
5
- if with_fido_usf_authentication
6
- auth.session(options[:scope])[:id] = user.id
2
+ u2fauth_enabled = true
3
+ u2fauth_enabled = user.u2fauth_enabled? if user.respond_to?(:u2fauth_enabled?)
4
+
5
+ if u2fauth_enabled
6
+ if user.respond_to?(:with_fido_usf_authentication?)
7
+ with_fido_usf_authentication = user.with_fido_usf_authentication?
8
+ scope = auth.session(options[:scope])
9
+ scope[:with_fido_usf_authentication] = with_fido_usf_authentication
10
+
11
+ scope[:id] = user.id if with_fido_usf_authentication
7
12
  end
8
13
  end
9
14
  end
10
-
@@ -1,3 +1,3 @@
1
1
  module DeviseFidoUsf
2
- VERSION = '0.1.6'
2
+ VERSION = '0.1.7'
3
3
  end
@@ -26,12 +26,6 @@ module DeviseFidoUsf
26
26
 
27
27
  end
28
28
 
29
- def add_application_helper
30
- in_root do
31
- inject_into_module "app/helpers/application_helper.rb", ApplicationHelper, application_helper_data
32
- end
33
- end
34
-
35
29
  def copy_locale
36
30
  copy_file "../../../config/locales/en.yml", "config/locales/fido_usf.en.yml"
37
31
  end
@@ -43,17 +37,6 @@ module DeviseFidoUsf
43
37
  def show_readme
44
38
  readme("README") if behavior == :invoke
45
39
  end
46
-
47
- def application_helper_data
48
- <<RUBY
49
-
50
- def u2f
51
- # use base_url as app_id, e.g. 'http://localhost:3000'
52
- @u2f ||= U2F::U2F.new(request.base_url)
53
- end
54
- RUBY
55
- end
56
40
  end
57
41
  end
58
42
  end
59
-
@@ -2,13 +2,13 @@ class Create<%= table_name.camelize %> < ActiveRecord::Migration<%= migration_ve
2
2
  def change
3
3
  create_table :<%= table_name %> do |t|
4
4
  t.references :user, null: false, polymorphic: true, index: true
5
- t.string :name, null: false, default: ""
6
- t.string :key_handle, null: false, limit: 255, default: ""
7
- t.binary :public_key, null: false, limit: 10.kilobytes, default: ""
8
- t.binary :certificate, null: false, limit: 1.megabyte, default: ""
5
+ t.string :name, null: false, default: ''
6
+ t.string :key_handle, null: false, limit: 255, default: ''
7
+ t.binary :public_key, null: false, limit: 10.kilobytes
8
+ t.binary :certificate, null: false, limit: 1.megabyte
9
9
  t.integer :counter, null: false, default: 0
10
10
  t.timestamp :last_authenticated_at, null: false
11
- <% attributes.each do |attribute| -%>
11
+ <% attributes.each do |attribute| -%>
12
12
  t.<%= attribute.type %> :<%= attribute.name %>
13
13
  <% end -%>
14
14
  t.timestamps
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.6
4
+ version: 0.1.7
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: 2017-12-28 00:00:00.000000000 Z
11
+ date: 2017-12-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: devise