two_factor_cookies 0.1.0 → 0.1.1

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: 9713b369c8e8f380b513419c48aecf9ece9452b3
4
- data.tar.gz: 6884bce7e414cafaaf41db49bd7219a890aef13e
3
+ metadata.gz: 241ec50e9eff97c7afea1414e8b29314cb583d22
4
+ data.tar.gz: ba4267a354328a32050c47c161494ecd5b7c46fc
5
5
  SHA512:
6
- metadata.gz: 7421c34e7c0b19cc41f20fa52141aa843e750689ebe1d0df4ed8f62d1ecd0c4f7e22797e9659724a5673916ec0b3d41dc4ab9ee3310ed786210d938ddffd0ff8
7
- data.tar.gz: b70483ca83b32182b4db5e3a64f2bcf450c5262297548158d800d96cd77ce8af0e2612060054da7a7a5e4cf678b261d3a087bea1ab82fc415629dcb76e91fd32
6
+ metadata.gz: 47991ccded64ecaf8a6986c0f04585527d37e5af6775ddfa75cd6bacba313a86406bf017da2b62c7826f57befae17e4a9249684b8f18983ba046da570d6a0706
7
+ data.tar.gz: 558a837a8afc2ccc4beca5a3a1331a1d324ce88e8c5a681f10e26422eec7f8e552749ae986f189a514f8958d4bef8c497969e8703611278c0da8ef517d44ef34
data/README.md CHANGED
@@ -1,14 +1,13 @@
1
1
  # TwoFactorCookies
2
- Short description and motivation.
3
-
4
- ## Usage
5
- How to use my plugin.
2
+ Simple two factor logon using Twilio SMS for code delivery and ROTP fpr code generation and verification.
3
+ The aim is to be configurable and work with as many kinds of authentication as possible.
4
+ All information needed is placed in encrypted cookies.
6
5
 
7
6
  ## Installation
8
7
  Add this line to your application's Gemfile:
9
8
 
10
9
  ```ruby
11
- gem 'two_factor_cookies', git: 'git@bitbucket.org:cs2software/two_factor_cookies.git', branch: 'master'
10
+ gem 'two_factor_cookies', '0.1.1'
12
11
  ```
13
12
 
14
13
  And then execute:
@@ -22,14 +21,94 @@ The gem is a rails engine, so it needs to be mounted to a location in `routes.rb
22
21
  mount TwoFactorCookies::Engine, at: '/two_factor_cookies'
23
22
  ```
24
23
 
25
- Todo: Document initializeer
24
+ The gem needs to be configured. The example below can be copied and placed in an initializer, eg. `config/initializers/2fa_setup.rb`
25
+ ```ruby
26
+ TwoFactorCookies.configure do |config|
27
+ # One time password (otp) generation and verification
28
+ # Must be a 160 bit (32 character) base32 secret. The rotp gem included in the project can generate such a key by typing this in the console: ROTP::Base32.random
29
+ config.otp_generation_secret_key = MUST BE FILLED
30
+
31
+ # Cookie expiry
32
+ # When a user will need to perform 2fa again
33
+ # config.two_factor_authentication_expiry = 30.days.from_now
34
+ # How much time a user has to type in the otp sent to his phone
35
+ # config.otp_expiry = 30.minutes.from_now
36
+
37
+ # Twilio API credentials
38
+ config.twilio_account_sid = MUST BE FILLED
39
+ # phone number is the number, that will be shown on the receiving phone. It can also be a string, for example the name of your company
40
+ config.twilio_phone_number = MUST BE FILLED
41
+ config.twilio_auth_token = MUST BE FILLED
42
+
43
+ # User model
44
+ # user_model_name is used as the permit option in toggle_two_factor_controller
45
+ # config.user_model_name = :user
46
+ # config.phone_number_field_name = :phone_number
47
+ # config.username_field_name = :username
48
+
49
+ # Controllers
50
+ # The route you want two_factor_authentication_controller to redirect to. Would typically be where, your user is redirected to after logging in.
51
+ config.two_factor_authentication_success_route = MUST BE FILLED
52
+ # The route you want toggle_two_factor_controller to route to after a user has toggled two factor
53
+ config.toggle_two_factor_success_route = MUST BE FILLED
54
+ # The route you want toggle_two_factor_controller to route to after a user has confirmed their phone number
55
+ config.confirm_phone_number_success_route = MUST BE FILLED
56
+
57
+ # If you need or want to replace the layout in the two_factor_authentication_controller, add a path here, eg. 'two_factor_cookies/two_factor_authentication'
58
+ #config.layout_path = nil
59
+
60
+ # In order to know which user is attempting to login, the two factor authentication controller checks current_user. It
61
+ # looks at its parent for this method. The default parent is ApplicationController. If you use devise or have
62
+ # implemented current_user elsewhere, you need to supply the parent constant here
63
+ # config.two_factor_authentication_controller_parent = '::ApplicationController'
64
+
65
+ # If you check for additional values when determining if a user is authenticated, you need to tell the controller how
66
+ # to determine these values. Add a hash of key-value pairs here, where the key is the name, you want in the cookie,
67
+ # the value is the method used to find whatever value you want as a string. Example:
68
+ # { customer_no: 'current_company.customer_no' }
69
+ # config.additional_authentication_values = nil
70
+
71
+ # any params sent along when enabling 2fa that needs to be updated on the user model, for example a phone number
72
+ # config.update_params = nil
73
+
74
+ # If another engine than main_app contains the routes you want the 2fa controllers to redirect to, write the engine
75
+ # name here as a string
76
+ #config.engine_name = 'main_app'
77
+ end
26
78
 
27
- In your ApplicationController you must include TwoFactorAuthentication
79
+ ```
80
+
81
+ In your ApplicationController you must include TwoFactorAuthenticate
82
+ ```ruby
83
+ class ApplicationController < ActionController::Base
84
+ include TwoFactorAuthenticate
85
+ ```
28
86
 
87
+ ### Using your own template for submitting otps
29
88
  The gem includes a template for submitting one time passwords. To override it, a partial named 'show' must be placed under `two_factor_cookies/two_factor_authentication`
30
89
 
31
- ## Contributing
32
- Contribution directions go here.
90
+ ### Necessary methods on your user model
91
+ TwoFactorCookies relies on a number of methods being present on your user model: `enabled_two_factor?`, `confirmed_phone_number?`, `disable_two_factor!`, `enable_two_factor!`, `confirm_phone_number!` and `disaffirm_phone_number!`.
92
+
93
+ If using ActiveRecord or Mongoid, `enabled_two_factor?` and `confirmed_phone_number?` will be automatically added, if your user model has fields named `enabled_two_factor` and `confirmed_phone_number`
94
+
95
+ #### Example implementations
96
+ ```ruby
97
+ def disable_two_factor!
98
+ self.enabled_two_factor = false
99
+ save
100
+ end
101
+ ```
102
+ If for example you want to delete the phone number, when disabling 2fa, it could be done here
103
+ ```ruby
104
+ def disaffirm_phone_number!
105
+ self.confirmed_phone_number = false
106
+ self.phone_number = nil
107
+ save
108
+ end
109
+ ```
110
+
111
+ When disabling two factor authentication, `disaffirm_phone_number!` is also called and a new confirmation of the phone number is required, if 2fa is enabled again.
33
112
 
34
113
  ## License
35
114
  The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
@@ -2,7 +2,7 @@ module TwoFactorCookies
2
2
  class Configuration
3
3
  attr_accessor :otp_generation_secret_key, :two_factor_authentication_success_route, :confirm_phone_number_success_route,
4
4
  :toggle_two_factor_success_route, :two_factor_authentication_expiry, :otp_expiry, :twilio_account_sid,
5
- :twilio_phone_number, :twilio_auth_token, :phone_number_field_name, :user_model_name, :user_model_namespace, :username_field_name,
5
+ :twilio_phone_number, :twilio_auth_token, :phone_number_field_name, :user_model_name, :username_field_name,
6
6
  :two_factor_authentication_controller_parent, :skip_before_action, :layout_path, :additional_authentication_values,
7
7
  :update_params, :engine_name
8
8
 
@@ -15,7 +15,6 @@ module TwoFactorCookies
15
15
  @twilio_phone_number = nil
16
16
  @twilio_auth_token = nil
17
17
 
18
- @user_model_namespace = nil
19
18
  @user_model_name = :user
20
19
  @phone_number_field_name = :phone_number
21
20
  @username_field_name = :username
@@ -29,9 +28,6 @@ module TwoFactorCookies
29
28
  @additional_authentication_values = {}
30
29
 
31
30
  @update_params = nil
32
-
33
-
34
-
35
31
  @engine_name = 'main_app'
36
32
  end
37
33
  end
@@ -1,3 +1,3 @@
1
1
  module TwoFactorCookies
2
- VERSION = '0.1.0'
2
+ VERSION = '0.1.1'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: two_factor_cookies
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nicolai Bach Woller
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-08-01 00:00:00.000000000 Z
11
+ date: 2019-08-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails