two_factor_cookies 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
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