devise-otp 0.4.0 → 0.6.0

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.
Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +4 -0
  3. data/Rakefile +17 -18
  4. data/app/controllers/devise_otp/devise/otp_credentials_controller.rb +15 -21
  5. data/app/controllers/devise_otp/devise/otp_tokens_controller.rb +7 -11
  6. data/app/views/devise/otp_credentials/show.html.erb +1 -1
  7. data/app/views/devise/otp_tokens/_token_secret.html.erb +4 -4
  8. data/app/views/devise/otp_tokens/recovery.html.erb +4 -4
  9. data/app/views/devise/otp_tokens/show.html.erb +5 -5
  10. data/config/locales/en.yml +4 -12
  11. data/devise-otp.gemspec +13 -13
  12. data/lib/devise-otp/version.rb +1 -1
  13. data/lib/devise-otp.rb +15 -29
  14. data/lib/devise_otp_authenticatable/controllers/helpers.rb +21 -23
  15. data/lib/devise_otp_authenticatable/controllers/url_helpers.rb +0 -2
  16. data/lib/devise_otp_authenticatable/engine.rb +6 -4
  17. data/lib/devise_otp_authenticatable/hooks/sessions.rb +6 -6
  18. data/lib/devise_otp_authenticatable/hooks.rb +1 -3
  19. data/lib/devise_otp_authenticatable/models/otp_authenticatable.rb +19 -25
  20. data/lib/devise_otp_authenticatable/routes.rb +11 -14
  21. data/lib/generators/active_record/devise_otp_generator.rb +1 -1
  22. data/lib/generators/devise_otp/devise_otp_generator.rb +12 -13
  23. data/lib/generators/devise_otp/install_generator.rb +3 -4
  24. data/lib/generators/devise_otp/views_generator.rb +5 -5
  25. data/test/dummy/Rakefile +1 -1
  26. data/test/dummy/app/controllers/posts_controller.rb +2 -2
  27. data/test/dummy/app/models/user.rb +8 -8
  28. data/test/dummy/config/application.rb +4 -4
  29. data/test/dummy/config/boot.rb +5 -5
  30. data/test/dummy/config/environment.rb +1 -1
  31. data/test/dummy/config/environments/development.rb +1 -1
  32. data/test/dummy/config/environments/production.rb +1 -1
  33. data/test/dummy/config/environments/test.rb +2 -2
  34. data/test/dummy/config/initializers/devise.rb +6 -8
  35. data/test/dummy/config/initializers/secret_token.rb +2 -2
  36. data/test/dummy/config/initializers/session_store.rb +1 -1
  37. data/test/dummy/config/initializers/wrap_parameters.rb +1 -1
  38. data/test/dummy/config/routes.rb +1 -1
  39. data/test/dummy/config.ru +1 -1
  40. data/test/dummy/db/migrate/20130131092406_add_devise_to_users.rb +12 -13
  41. data/test/dummy/db/migrate/20130131160351_devise_otp_add_to_users.rb +13 -13
  42. data/test/dummy/script/rails +3 -3
  43. data/test/integration/persistence_test.rb +11 -12
  44. data/test/integration/refresh_test.rb +13 -14
  45. data/test/integration/sign_in_test.rb +24 -26
  46. data/test/integration/token_test.rb +5 -6
  47. data/test/integration_tests_helper.rb +16 -17
  48. data/test/model_tests_helper.rb +5 -7
  49. data/test/models/otp_authenticatable_test.rb +18 -19
  50. data/test/test_helper.rb +10 -10
  51. metadata +24 -64
@@ -4,7 +4,7 @@ module DeviseOtpAuthenticatable::Hooks
4
4
  include DeviseOtpAuthenticatable::Controllers::UrlHelpers
5
5
 
6
6
  included do
7
- alias_method :create, :create_with_otp
7
+ alias_method :create, :create_with_otp
8
8
  end
9
9
 
10
10
  #
@@ -18,19 +18,19 @@ module DeviseOtpAuthenticatable::Hooks
18
18
 
19
19
  otp_refresh_credentials_for(resource)
20
20
 
21
+ yield resource if block_given?
21
22
  if otp_challenge_required_on?(resource)
22
23
  challenge = resource.generate_otp_challenge!
23
24
  warden.logout
24
25
  store_location_for(resource, devise_stored_location) # restore the stored location
25
- respond_with resource, :location => otp_credential_path_for(resource, {:challenge => challenge})
26
+ respond_with resource, location: otp_credential_path_for(resource, {challenge: challenge})
26
27
  elsif otp_mandatory_on?(resource) # if mandatory, log in user but send him to the must activate otp
27
28
  set_flash_message(:notice, :signed_in_but_otp) if is_navigational_format?
28
29
  sign_in(resource_name, resource)
29
- respond_with resource, :location => otp_token_path_for(resource)
30
+ respond_with resource, location: otp_token_path_for(resource)
30
31
  else
31
- set_flash_message(:notice, :signed_in) if is_navigational_format?
32
32
  sign_in(resource_name, resource)
33
- respond_with resource, :location => after_sign_in_path_for(resource)
33
+ respond_with resource, location: after_sign_in_path_for(resource)
34
34
  end
35
35
  end
36
36
 
@@ -49,7 +49,7 @@ module DeviseOtpAuthenticatable::Hooks
49
49
  # the resource -should- have otp turned on, but it isn't
50
50
  #
51
51
  def otp_mandatory_on?(resource)
52
- return true if resource.class.otp_mandatory
52
+ return true if resource.class.otp_mandatory && !resource.otp_enabled
53
53
  return false unless resource.respond_to?(:otp_mandatory)
54
54
 
55
55
  resource.otp_mandatory && !resource.otp_enabled
@@ -1,13 +1,11 @@
1
1
  module DeviseOtpAuthenticatable
2
2
  module Hooks
3
-
4
- autoload :Sessions, 'devise_otp_authenticatable/hooks/sessions.rb'
3
+ autoload :Sessions, "devise_otp_authenticatable/hooks/sessions.rb"
5
4
 
6
5
  class << self
7
6
  def apply
8
7
  ::Devise::SessionsController.send(:include, Hooks::Sessions)
9
8
  end
10
9
  end
11
-
12
10
  end
13
11
  end
@@ -1,27 +1,27 @@
1
- require 'rotp'
1
+ require "rotp"
2
2
 
3
3
  module Devise::Models
4
4
  module OtpAuthenticatable
5
5
  extend ActiveSupport::Concern
6
6
 
7
7
  included do
8
- before_validation :generate_otp_auth_secret, :on => :create
9
- before_validation :generate_otp_persistence_seed, :on => :create
10
- scope :with_valid_otp_challenge, lambda { |time| where('otp_challenge_expires > ?', time) }
8
+ before_validation :generate_otp_auth_secret, on: :create
9
+ before_validation :generate_otp_persistence_seed, on: :create
10
+ scope :with_valid_otp_challenge, lambda { |time| where("otp_challenge_expires > ?", time) }
11
11
  end
12
12
 
13
13
  module ClassMethods
14
14
  ::Devise::Models.config(self, :otp_authentication_timeout, :otp_drift_window, :otp_trust_persistence,
15
- :otp_mandatory, :otp_credentials_refresh, :otp_issuer, :otp_recovery_tokens,
16
- :otp_controller_path)
15
+ :otp_mandatory, :otp_credentials_refresh, :otp_issuer, :otp_recovery_tokens,
16
+ :otp_controller_path)
17
17
 
18
18
  def find_valid_otp_challenge(challenge)
19
- with_valid_otp_challenge(Time.now).where(:otp_session_challenge => challenge).first
19
+ with_valid_otp_challenge(Time.now).where(otp_session_challenge: challenge).first
20
20
  end
21
21
  end
22
22
 
23
23
  def time_based_otp
24
- @time_based_otp ||= ROTP::TOTP.new(otp_auth_secret, issuer: "#{self.class.otp_issuer || Rails.application.class.module_parent_name}")
24
+ @time_based_otp ||= ROTP::TOTP.new(otp_auth_secret, issuer: (self.class.otp_issuer || Rails.application.class.module_parent_name).to_s)
25
25
  end
26
26
 
27
27
  def recovery_otp
@@ -36,15 +36,14 @@ module Devise::Models
36
36
  email
37
37
  end
38
38
 
39
-
40
39
  def reset_otp_credentials
41
40
  @time_based_otp = nil
42
41
  @recovery_otp = nil
43
42
  generate_otp_auth_secret
44
43
  reset_otp_persistence
45
- update!(:otp_enabled => false,
46
- :otp_session_challenge => nil, :otp_challenge_expires => nil,
47
- :otp_recovery_counter => 0)
44
+ update!(otp_enabled: false,
45
+ otp_session_challenge: nil, otp_challenge_expires: nil,
46
+ otp_recovery_counter: 0)
48
47
  end
49
48
 
50
49
  def reset_otp_credentials!
@@ -66,16 +65,16 @@ module Devise::Models
66
65
  reset_otp_credentials!
67
66
  end
68
67
 
69
- update!(:otp_enabled => true, :otp_enabled_on => Time.now)
68
+ update!(otp_enabled: true, otp_enabled_on: Time.now)
70
69
  end
71
70
 
72
71
  def disable_otp!
73
- update!(:otp_enabled => false, :otp_enabled_on => nil)
72
+ update!(otp_enabled: false, otp_enabled_on: nil)
74
73
  end
75
74
 
76
75
  def generate_otp_challenge!(expires = nil)
77
- update!(:otp_session_challenge => SecureRandom.hex,
78
- :otp_challenge_expires => DateTime.now + (expires || self.class.otp_authentication_timeout))
76
+ update!(otp_session_challenge: SecureRandom.hex,
77
+ otp_challenge_expires: DateTime.now + (expires || self.class.otp_authentication_timeout))
79
78
  otp_session_challenge
80
79
  end
81
80
 
@@ -83,7 +82,6 @@ module Devise::Models
83
82
  (otp_challenge_expires.nil? || otp_challenge_expires > Time.now)
84
83
  end
85
84
 
86
-
87
85
  def validate_otp_token(token, recovery = false)
88
86
  if recovery
89
87
  validate_otp_recovery_token token
@@ -100,9 +98,8 @@ module Devise::Models
100
98
  alias_method :valid_otp_time_token?, :validate_otp_time_token
101
99
 
102
100
  def next_otp_recovery_tokens(number = self.class.otp_recovery_tokens)
103
- (otp_recovery_counter..otp_recovery_counter + number).inject({}) do |h, index|
101
+ (otp_recovery_counter..otp_recovery_counter + number).each_with_object({}) do |index, h|
104
102
  h[index] = recovery_otp.at(index)
105
- h
106
103
  end
107
104
  end
108
105
 
@@ -114,15 +111,13 @@ module Devise::Models
114
111
  end
115
112
  alias_method :valid_otp_recovery_token?, :validate_otp_recovery_token
116
113
 
117
-
118
-
119
114
  private
120
115
 
121
116
  def validate_otp_token_with_drift(token)
122
-
123
117
  # should be centered around saved drift
124
- (-self.class.otp_drift_window..self.class.otp_drift_window).any? {|drift|
125
- (time_based_otp.verify(token, at: Time.now.ago(30 * drift))) }
118
+ (-self.class.otp_drift_window..self.class.otp_drift_window).any? { |drift|
119
+ time_based_otp.verify(token, at: Time.now.ago(30 * drift))
120
+ }
126
121
  end
127
122
 
128
123
  def generate_otp_persistence_seed
@@ -133,6 +128,5 @@ module Devise::Models
133
128
  self.otp_auth_secret = ROTP::Base32.random_base32
134
129
  self.otp_recovery_secret = ROTP::Base32.random_base32
135
130
  end
136
-
137
131
  end
138
132
  end
@@ -1,27 +1,24 @@
1
1
  module ActionDispatch::Routing
2
2
  class Mapper
3
-
4
3
  protected
5
4
 
6
5
  def devise_otp(mapping, controllers)
7
- namespace :otp, :module => :devise_otp do
8
- resource :token, :only => [:show, :update, :destroy],
9
- :path => mapping.path_names[:token], :controller => controllers[:otp_tokens] do
10
-
6
+ namespace :otp, module: :devise_otp do
7
+ resource :token, only: [:show, :update, :destroy],
8
+ path: mapping.path_names[:token], controller: controllers[:otp_tokens] do
11
9
  if Devise.otp_trust_persistence
12
- get :persistence, :action => 'get_persistence'
13
- post :persistence, :action => 'clear_persistence'
14
- delete :persistence, :action => 'delete_persistence'
10
+ get :persistence, action: "get_persistence"
11
+ post :persistence, action: "clear_persistence"
12
+ delete :persistence, action: "delete_persistence"
15
13
  end
16
14
 
17
- get :recovery
15
+ get :recovery
18
16
  end
19
17
 
20
- resource :credential, :only => [:show, :update],
21
- :path => mapping.path_names[:credentials], :controller => controllers[:otp_credentials] do
22
-
23
- get :refresh, :action => 'get_refresh'
24
- put :refresh, :action => 'set_refresh'
18
+ resource :credential, only: [:show, :update],
19
+ path: mapping.path_names[:credentials], controller: controllers[:otp_credentials] do
20
+ get :refresh, action: "get_refresh"
21
+ put :refresh, action: "set_refresh"
25
22
  end
26
23
  end
27
24
  end
@@ -1,4 +1,4 @@
1
- require 'rails/generators/active_record'
1
+ require "rails/generators/active_record"
2
2
 
3
3
  module ActiveRecord
4
4
  module Generators
@@ -1,17 +1,16 @@
1
1
  module DeviseOtp
2
- module Generators
3
- class DeviseOtpGenerator < Rails::Generators::NamedBase
2
+ module Generators
3
+ class DeviseOtpGenerator < Rails::Generators::NamedBase
4
+ namespace "devise_otp"
4
5
 
5
- namespace "devise_otp"
6
+ desc "Add :otp_authenticatable directive in the given model, plus accessors. Also generate migration for ActiveRecord"
6
7
 
7
- desc "Add :otp_authenticatable directive in the given model, plus accessors. Also generate migration for ActiveRecord"
8
+ def inject_devise_otp_content
9
+ path = File.join("app", "models", "#{file_path}.rb")
10
+ inject_into_file(path, "otp_authenticatable, :", after: "devise :") if File.exist?(path)
11
+ end
8
12
 
9
- def inject_devise_otp_content
10
- path = File.join("app","models","#{file_path}.rb")
11
- inject_into_file(path, "otp_authenticatable, :", :after => "devise :") if File.exists?(path)
12
- end
13
-
14
- hook_for :orm
15
- end
16
- end
17
- end
13
+ hook_for :orm
14
+ end
15
+ end
16
+ end
@@ -7,8 +7,7 @@ module DeviseOtp
7
7
  desc "Install the devise OTP authentication extension"
8
8
 
9
9
  def add_configs
10
-
11
- content = <<-CONTENT
10
+ content = <<-CONTENT
12
11
 
13
12
  # ==> Devise OTP Extension
14
13
  # Configure OTP extension for devise
@@ -43,9 +42,9 @@ content = <<-CONTENT
43
42
  # Custom view path for Devise OTP controllers
44
43
  #config.otp_controller_path = 'devise'
45
44
 
46
- CONTENT
45
+ CONTENT
47
46
 
48
- inject_into_file "config/initializers/devise.rb", content, :before => /end[ |\n|]+\Z/
47
+ inject_into_file "config/initializers/devise.rb", content, before: /end[ |\n]+\Z/
49
48
  end
50
49
 
51
50
  def copy_locale
@@ -1,17 +1,17 @@
1
- require 'generators/devise/views_generator'
1
+ require "generators/devise/views_generator"
2
2
 
3
3
  module DeviseOtp
4
4
  module Generators
5
5
  class ViewsGenerator < Rails::Generators::Base
6
- desc 'Copies all Devise OTP views to your application.'
6
+ desc "Copies all Devise OTP views to your application."
7
7
 
8
- argument :scope, :required => false, :default => nil,
9
- :desc => "The scope to copy views to"
8
+ argument :scope, required: false, default: nil,
9
+ desc: "The scope to copy views to"
10
10
 
11
11
  include ::Devise::Generators::ViewPathTemplates
12
12
  source_root File.expand_path("../../../../app/views", __FILE__)
13
13
  def copy_views
14
- view_directory :devise, 'app/views/devise'
14
+ view_directory :devise, "app/views/devise"
15
15
  end
16
16
  end
17
17
  end
data/test/dummy/Rakefile CHANGED
@@ -2,6 +2,6 @@
2
2
  # Add your own tasks in files placed in lib/tasks ending in .rake,
3
3
  # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
4
4
 
5
- require File.expand_path('../config/application', __FILE__)
5
+ require File.expand_path("../config/application", __FILE__)
6
6
 
7
7
  Dummy::Application.load_tasks
@@ -46,7 +46,7 @@ class PostsController < ApplicationController
46
46
 
47
47
  respond_to do |format|
48
48
  if @post.save
49
- format.html { redirect_to @post, notice: 'Post was successfully created.' }
49
+ format.html { redirect_to @post, notice: "Post was successfully created." }
50
50
  format.json { render json: @post, status: :created, location: @post }
51
51
  else
52
52
  format.html { render action: "new" }
@@ -62,7 +62,7 @@ class PostsController < ApplicationController
62
62
 
63
63
  respond_to do |format|
64
64
  if @post.update_attributes(params[:post])
65
- format.html { redirect_to @post, notice: 'Post was successfully updated.' }
65
+ format.html { redirect_to @post, notice: "Post was successfully updated." }
66
66
  format.json { head :ok }
67
67
  else
68
68
  format.html { render action: "edit" }
@@ -3,18 +3,18 @@ class User < PARENT_MODEL_CLASS
3
3
  include Mongoid::Document
4
4
 
5
5
  ## Database authenticatable
6
- field :email, :type => String, :null => false, :default => ""
7
- field :encrypted_password, :type => String, :null => false, :default => ""
6
+ field :email, type: String, null: false, default: ""
7
+ field :encrypted_password, type: String, null: false, default: ""
8
8
 
9
9
  ## Recoverable
10
- field :reset_password_token, :type => String
11
- field :reset_password_sent_at, :type => Time
10
+ field :reset_password_token, type: String
11
+ field :reset_password_sent_at, type: Time
12
12
  end
13
13
 
14
14
  devise :otp_authenticatable, :database_authenticatable, :registerable,
15
- :trackable, :validatable
15
+ :trackable, :validatable
16
16
 
17
17
  # Setup accessible (or protected) attributes for your model
18
- #attr_accessible :otp_enabled, :otp_mandatory, :as => :otp_privileged
19
- #attr_accessible :email, :password, :password_confirmation, :remember_me
20
- end
18
+ # attr_accessible :otp_enabled, :otp_mandatory, :as => :otp_privileged
19
+ # attr_accessible :email, :password, :password_confirmation, :remember_me
20
+ end
@@ -1,10 +1,10 @@
1
- require File.expand_path('../boot', __FILE__)
1
+ require File.expand_path("../boot", __FILE__)
2
2
 
3
3
  # Pick the frameworks you want:
4
4
  require "active_record/railtie"
5
5
  require "action_controller/railtie"
6
6
  require "action_mailer/railtie"
7
- #require "active_resource/railtie"
7
+ # require "active_resource/railtie"
8
8
  require "sprockets/railtie"
9
9
  # require "rails/test_unit/railtie"
10
10
 
@@ -15,7 +15,7 @@ begin
15
15
  require "#{DEVISE_ORM}/railtie"
16
16
  rescue LoadError
17
17
  end
18
- PARENT_MODEL_CLASS = DEVISE_ORM == :active_record ? ActiveRecord::Base : Object
18
+ PARENT_MODEL_CLASS = (DEVISE_ORM == :active_record) ? ActiveRecord::Base : Object
19
19
 
20
20
  require "devise"
21
21
  require "devise-otp"
@@ -64,6 +64,6 @@ module Dummy
64
64
  config.assets.enabled = true
65
65
 
66
66
  # Version of your assets, change this if you want to expire all your assets
67
- config.assets.version = '1.0'
67
+ config.assets.version = "1.0"
68
68
  end
69
69
  end
@@ -1,10 +1,10 @@
1
- require 'rubygems'
2
- gemfile = File.expand_path('../../../../Gemfile', __FILE__)
1
+ require "rubygems"
2
+ gemfile = File.expand_path("../../../../Gemfile", __FILE__)
3
3
 
4
4
  if File.exist?(gemfile)
5
- ENV['BUNDLE_GEMFILE'] = gemfile
6
- require 'bundler'
5
+ ENV["BUNDLE_GEMFILE"] = gemfile
6
+ require "bundler"
7
7
  Bundler.setup
8
8
  end
9
9
 
10
- $:.unshift File.expand_path('../../../../lib', __FILE__)
10
+ $:.unshift File.expand_path("../../../../lib", __FILE__)
@@ -1,5 +1,5 @@
1
1
  # Load the rails application
2
- require File.expand_path('../application', __FILE__)
2
+ require File.expand_path("../application", __FILE__)
3
3
 
4
4
  # Initialize the rails application
5
5
  Dummy::Application.initialize!
@@ -10,7 +10,7 @@ Dummy::Application.configure do
10
10
  config.eager_load = false
11
11
 
12
12
  # Show full error reports and disable caching
13
- config.consider_all_requests_local = true
13
+ config.consider_all_requests_local = true
14
14
  config.action_controller.perform_caching = false
15
15
 
16
16
  # Don't care if the mailer can't send
@@ -11,7 +11,7 @@ Dummy::Application.configure do
11
11
  config.eager_load = true
12
12
 
13
13
  # Full error reports are disabled and caching is turned on
14
- config.consider_all_requests_local = false
14
+ config.consider_all_requests_local = false
15
15
  config.action_controller.perform_caching = true
16
16
 
17
17
  # Disable Rails's static asset server (Apache or nginx will already do this)
@@ -17,14 +17,14 @@ Dummy::Application.configure do
17
17
  config.static_cache_control = "public, max-age=3600"
18
18
 
19
19
  # Show full error reports and disable caching
20
- config.consider_all_requests_local = true
20
+ config.consider_all_requests_local = true
21
21
  config.action_controller.perform_caching = false
22
22
 
23
23
  # Raise exceptions instead of rendering exception templates
24
24
  config.action_dispatch.show_exceptions = false
25
25
 
26
26
  # Disable request forgery protection in test environment
27
- config.action_controller.allow_forgery_protection = false
27
+ config.action_controller.allow_forgery_protection = false
28
28
 
29
29
  # Tell Action Mailer not to deliver emails to the real world.
30
30
  # The :test delivery method accumulates sent emails in the
@@ -1,8 +1,7 @@
1
1
  # Use this hook to configure devise mailer, warden hooks and so forth.
2
2
  # Many of these configuration options can be set straight in your model.
3
3
  Devise.setup do |config|
4
-
5
- config.secret_key = '638da6a325f1de9038321504c4a06ef7f4f7f835331a63ba41b93732b3830d032b6a10b38afa67427e050b19f9717b1e7a45f650ac5631c53cc9dd85264fdfb0'
4
+ config.secret_key = "638da6a325f1de9038321504c4a06ef7f4f7f835331a63ba41b93732b3830d032b6a10b38afa67427e050b19f9717b1e7a45f650ac5631c53cc9dd85264fdfb0"
6
5
 
7
6
  # ==> Mailer Configuration
8
7
  # Configure the e-mail address which will be shown in Devise::Mailer,
@@ -16,7 +15,7 @@ Devise.setup do |config|
16
15
  # Load and configure the ORM. Supports :active_record (default) and
17
16
  # :mongoid (bson_ext recommended) by default. Other ORMs may be
18
17
  # available as additional gems.
19
- require 'devise/orm/active_record'
18
+ require "devise/orm/active_record"
20
19
 
21
20
  # ==> Configuration for any authentication mechanism
22
21
  # Configure which keys are used when authenticating a user. The default is
@@ -38,12 +37,12 @@ Devise.setup do |config|
38
37
  # Configure which authentication keys should be case-insensitive.
39
38
  # These keys will be downcased upon creating or modifying a user and when used
40
39
  # to authenticate or find a user. Default is :email.
41
- config.case_insensitive_keys = [ :email ]
40
+ config.case_insensitive_keys = [:email]
42
41
 
43
42
  # Configure which authentication keys should have whitespace stripped.
44
43
  # These keys will have whitespace before and after removed upon creating or
45
44
  # modifying a user and when used to authenticate or find a user. Default is :email.
46
- config.strip_whitespace_keys = [ :email ]
45
+ config.strip_whitespace_keys = [:email]
47
46
 
48
47
  # Tell if authentication through request.params is enabled. True by default.
49
48
  # It can be set to an array that will enable params authentication only for the
@@ -245,9 +244,8 @@ Devise.setup do |config|
245
244
  # Configure extension for devise
246
245
 
247
246
  # How long should the user have to enter their token. To change the default, uncomment and change the below:
248
- #config.otp_authentication_timeout = 3.minutes
247
+ # config.otp_authentication_timeout = 3.minutes
249
248
 
250
249
  # Change time drift settings for valid token values. To change the default, uncomment and change the below:
251
- #config.otp_authentication_time_drift = 3
252
-
250
+ # config.otp_authentication_time_drift = 3
253
251
  end
@@ -4,5 +4,5 @@
4
4
  # If you change this key, all old signed cookies will become invalid!
5
5
  # Make sure the secret is at least 30 characters and all random,
6
6
  # no regular words or you'll be exposed to dictionary attacks.
7
- Dummy::Application.config.secret_token = '7854ba4c663086c191afbc2e05384503b5529fa2c8e51417539db1cbe7c68e8490e9d57a1d908d4e82816a522edb97f71a8de9233272a5598534a38ef1b08697'
8
- Dummy::Application.config.secret_key_base = '7854ba4c663086c191afbc2e05384503b5529fa2c8e51417539db1cbe7c68e8490e9d57a1d908d4e82816a522edb97f71a8de9233272a5598534a38ef1b08697'
7
+ Dummy::Application.config.secret_token = "7854ba4c663086c191afbc2e05384503b5529fa2c8e51417539db1cbe7c68e8490e9d57a1d908d4e82816a522edb97f71a8de9233272a5598534a38ef1b08697"
8
+ Dummy::Application.config.secret_key_base = "7854ba4c663086c191afbc2e05384503b5529fa2c8e51417539db1cbe7c68e8490e9d57a1d908d4e82816a522edb97f71a8de9233272a5598534a38ef1b08697"
@@ -1,6 +1,6 @@
1
1
  # Be sure to restart your server when you modify this file.
2
2
 
3
- Dummy::Application.config.session_store :cookie_store, :key => '_dummy_session'
3
+ Dummy::Application.config.session_store :cookie_store, key: "_dummy_session"
4
4
 
5
5
  # Use the database for sessions instead of the cookie-based default,
6
6
  # which shouldn't be used to store highly confidential information
@@ -5,7 +5,7 @@
5
5
 
6
6
  # Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array.
7
7
  ActiveSupport.on_load(:action_controller) do
8
- wrap_parameters :format => [:json]
8
+ wrap_parameters format: [:json]
9
9
  end
10
10
 
11
11
  # Disable root element in JSON by default.
@@ -2,5 +2,5 @@ Dummy::Application.routes.draw do
2
2
  devise_for :users
3
3
 
4
4
  resources :posts
5
- root :to => 'posts#index'
5
+ root to: "posts#index"
6
6
  end
data/test/dummy/config.ru CHANGED
@@ -1,4 +1,4 @@
1
1
  # This file is used by Rack-based servers to start the application.
2
2
 
3
- require ::File.expand_path('../config/environment', __FILE__)
3
+ require ::File.expand_path("../config/environment", __FILE__)
4
4
  run Dummy::Application
@@ -2,22 +2,22 @@ class AddDeviseToUsers < ActiveRecord::Migration[5.0]
2
2
  def self.up
3
3
  change_table(:users) do |t|
4
4
  ## Database authenticatable
5
- t.string :email, :null => false, :default => ""
6
- t.string :encrypted_password, :null => false, :default => ""
5
+ t.string :email, null: false, default: ""
6
+ t.string :encrypted_password, null: false, default: ""
7
7
 
8
8
  ## Recoverable
9
- t.string :reset_password_token
9
+ t.string :reset_password_token
10
10
  t.datetime :reset_password_sent_at
11
11
 
12
12
  ## Rememberable
13
13
  t.datetime :remember_created_at
14
14
 
15
15
  ## Trackable
16
- t.integer :sign_in_count, :default => 0
16
+ t.integer :sign_in_count, default: 0
17
17
  t.datetime :current_sign_in_at
18
18
  t.datetime :last_sign_in_at
19
- t.string :current_sign_in_ip
20
- t.string :last_sign_in_ip
19
+ t.string :current_sign_in_ip
20
+ t.string :last_sign_in_ip
21
21
 
22
22
  ## Confirmable
23
23
  # t.string :confirmation_token
@@ -26,23 +26,22 @@ class AddDeviseToUsers < ActiveRecord::Migration[5.0]
26
26
  # t.string :unconfirmed_email # Only if using reconfirmable
27
27
 
28
28
  ## Lockable
29
- t.integer :failed_attempts, :default => 0 # Only if lock strategy is :failed_attempts
30
- t.string :unlock_token # Only if unlock strategy is :email or :both
29
+ t.integer :failed_attempts, default: 0 # Only if lock strategy is :failed_attempts
30
+ t.string :unlock_token # Only if unlock strategy is :email or :both
31
31
  t.datetime :locked_at
32
32
 
33
33
  ## Token authenticatable
34
34
  t.string :authentication_token
35
35
 
36
-
37
36
  # Uncomment below if timestamps were not included in your original model.
38
37
  # t.timestamps
39
38
  end
40
39
 
41
- add_index :users, :email, :unique => true
42
- add_index :users, :reset_password_token, :unique => true
40
+ add_index :users, :email, unique: true
41
+ add_index :users, :reset_password_token, unique: true
43
42
  # add_index :users, :confirmation_token, :unique => true
44
- add_index :users, :unlock_token, :unique => true
45
- add_index :users, :authentication_token, :unique => true
43
+ add_index :users, :unlock_token, unique: true
44
+ add_index :users, :authentication_token, unique: true
46
45
  end
47
46
 
48
47
  def self.down
@@ -1,28 +1,28 @@
1
1
  class DeviseOtpAddToUsers < ActiveRecord::Migration[5.0]
2
2
  def self.up
3
3
  change_table :users do |t|
4
- t.string :otp_auth_secret
5
- t.string :otp_recovery_secret
6
- t.boolean :otp_enabled, :default => false, :null => false
7
- t.boolean :otp_mandatory, :default => false, :null => false
8
- t.datetime :otp_enabled_on
9
- t.integer :otp_time_drift, :default => 0, :null => false
10
- t.integer :otp_failed_attempts, :default => 0, :null => false
11
- t.integer :otp_recovery_counter, :default => 0, :null => false
12
- t.string :otp_persistence_seed
4
+ t.string :otp_auth_secret
5
+ t.string :otp_recovery_secret
6
+ t.boolean :otp_enabled, default: false, null: false
7
+ t.boolean :otp_mandatory, default: false, null: false
8
+ t.datetime :otp_enabled_on
9
+ t.integer :otp_time_drift, default: 0, null: false
10
+ t.integer :otp_failed_attempts, default: 0, null: false
11
+ t.integer :otp_recovery_counter, default: 0, null: false
12
+ t.string :otp_persistence_seed
13
13
 
14
- t.string :otp_session_challenge
15
- t.datetime :otp_challenge_expires
14
+ t.string :otp_session_challenge
15
+ t.datetime :otp_challenge_expires
16
16
  end
17
17
 
18
- add_index :users, :otp_session_challenge, :unique => true
18
+ add_index :users, :otp_session_challenge, unique: true
19
19
  add_index :users, :otp_challenge_expires
20
20
  end
21
21
 
22
22
  def self.down
23
23
  change_table :users do |t|
24
24
  t.remove :otp_auth_secret, :otp_recovery_secret, :otp_enabled, :otp_mandatory, :otp_enabled_on, :otp_session_challenge,
25
- :otp_challenge_expires, :otp_time_drift, :otp_failed_attempts, :otp_recovery_counter, :otp_persistence_seed
25
+ :otp_challenge_expires, :otp_time_drift, :otp_failed_attempts, :otp_recovery_counter, :otp_persistence_seed
26
26
  end
27
27
  end
28
28
  end