devise-security 0.12.0 → 0.16.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.
- checksums.yaml +4 -4
- data/README.md +186 -63
- data/app/controllers/devise/paranoid_verification_code_controller.rb +2 -0
- data/app/controllers/devise/password_expired_controller.rb +13 -6
- data/app/views/devise/paranoid_verification_code/show.html.erb +4 -4
- data/app/views/devise/password_expired/show.html.erb +6 -6
- data/config/locales/by.yml +49 -0
- data/config/locales/cs.yml +41 -0
- data/config/locales/de.yml +30 -7
- data/config/locales/en.yml +25 -1
- data/config/locales/es.yml +19 -6
- data/config/locales/fa.yml +41 -0
- data/config/locales/fr.yml +30 -0
- data/config/locales/hi.yml +42 -0
- data/config/locales/it.yml +35 -4
- data/config/locales/ja.yml +30 -0
- data/config/locales/nl.yml +41 -0
- data/config/locales/pt.yml +41 -0
- data/config/locales/ru.yml +49 -0
- data/config/locales/tr.yml +18 -0
- data/config/locales/uk.yml +49 -0
- data/config/locales/zh_CN.yml +41 -0
- data/config/locales/zh_TW.yml +41 -0
- data/lib/devise-security/controllers/helpers.rb +61 -50
- data/lib/devise-security/hooks/expirable.rb +3 -1
- data/lib/devise-security/hooks/paranoid_verification.rb +2 -0
- data/lib/devise-security/hooks/password_expirable.rb +4 -0
- data/lib/devise-security/hooks/session_limitable.rb +31 -14
- data/lib/devise-security/models/active_record/old_password.rb +5 -0
- data/lib/devise-security/models/compatibility/active_record_patch.rb +40 -0
- data/lib/devise-security/models/compatibility/mongoid_patch.rb +31 -0
- data/lib/devise-security/models/compatibility.rb +8 -15
- data/lib/devise-security/models/database_authenticatable_patch.rb +3 -1
- data/lib/devise-security/models/expirable.rb +8 -2
- data/lib/devise-security/models/mongoid/old_password.rb +21 -0
- data/lib/devise-security/models/paranoid_verification.rb +2 -0
- data/lib/devise-security/models/password_archivable.rb +18 -7
- data/lib/devise-security/models/password_expirable.rb +103 -48
- data/lib/devise-security/models/secure_validatable.rb +26 -6
- data/lib/devise-security/models/security_questionable.rb +2 -0
- data/lib/devise-security/models/session_limitable.rb +19 -2
- data/lib/devise-security/orm/mongoid.rb +7 -0
- data/lib/devise-security/patches/confirmations_controller_captcha.rb +2 -0
- data/lib/devise-security/patches/confirmations_controller_security_question.rb +2 -0
- data/lib/devise-security/patches/controller_captcha.rb +2 -0
- data/lib/devise-security/patches/controller_security_question.rb +3 -1
- data/lib/devise-security/patches/passwords_controller_captcha.rb +2 -0
- data/lib/devise-security/patches/passwords_controller_security_question.rb +2 -0
- data/lib/devise-security/patches/registrations_controller_captcha.rb +2 -0
- data/lib/devise-security/patches/sessions_controller_captcha.rb +2 -0
- data/lib/devise-security/patches/unlocks_controller_captcha.rb +2 -0
- data/lib/devise-security/patches/unlocks_controller_security_question.rb +2 -0
- data/lib/devise-security/patches.rb +2 -0
- data/lib/devise-security/rails.rb +2 -0
- data/lib/devise-security/routes.rb +2 -0
- data/lib/devise-security/validators/password_complexity_validator.rb +35 -0
- data/lib/devise-security/version.rb +3 -1
- data/lib/devise-security.rb +16 -10
- data/lib/generators/devise_security/install_generator.rb +5 -3
- data/lib/generators/templates/devise_security.rb +47 -0
- data/test/{test_captcha_controller.rb → controllers/test_captcha_controller.rb} +2 -0
- data/test/controllers/test_password_expired_controller.rb +110 -0
- data/test/controllers/test_security_question_controller.rb +60 -0
- data/test/dummy/Rakefile +3 -1
- data/test/dummy/app/assets/config/manifest.js +3 -0
- data/test/dummy/app/controllers/application_controller.rb +2 -0
- data/test/dummy/app/controllers/captcha/sessions_controller.rb +2 -0
- data/test/dummy/app/controllers/security_question/unlocks_controller.rb +2 -0
- data/test/dummy/app/controllers/widgets_controller.rb +6 -0
- data/test/dummy/app/models/application_record.rb +10 -2
- data/test/dummy/app/models/application_user_record.rb +11 -0
- data/test/dummy/app/models/captcha_user.rb +7 -2
- data/test/dummy/app/models/mongoid/confirmable_fields.rb +13 -0
- data/test/dummy/app/models/mongoid/database_authenticable_fields.rb +17 -0
- data/test/dummy/app/models/mongoid/expirable_fields.rb +11 -0
- data/test/dummy/app/models/mongoid/lockable_fields.rb +13 -0
- data/test/dummy/app/models/mongoid/mappings.rb +13 -0
- data/test/dummy/app/models/mongoid/omniauthable_fields.rb +11 -0
- data/test/dummy/app/models/mongoid/paranoid_verification_fields.rb +10 -0
- data/test/dummy/app/models/mongoid/password_archivable_fields.rb +9 -0
- data/test/dummy/app/models/mongoid/password_expirable_fields.rb +10 -0
- data/test/dummy/app/models/mongoid/recoverable_fields.rb +11 -0
- data/test/dummy/app/models/mongoid/registerable_fields.rb +19 -0
- data/test/dummy/app/models/mongoid/rememberable_fields.rb +10 -0
- data/test/dummy/app/models/mongoid/secure_validatable_fields.rb +11 -0
- data/test/dummy/app/models/mongoid/security_questionable_fields.rb +13 -0
- data/test/dummy/app/models/mongoid/session_limitable_fields.rb +10 -0
- data/test/dummy/app/models/mongoid/timeoutable_fields.rb +9 -0
- data/test/dummy/app/models/mongoid/trackable_fields.rb +14 -0
- data/test/dummy/app/models/mongoid/validatable_fields.rb +7 -0
- data/test/dummy/app/models/secure_user.rb +7 -1
- data/test/dummy/app/models/security_question_user.rb +9 -4
- data/test/dummy/app/models/user.rb +15 -0
- data/test/dummy/app/models/widget.rb +6 -0
- data/test/dummy/app/mongoid/admin.rb +31 -0
- data/test/dummy/app/mongoid/one_user.rb +58 -0
- data/test/dummy/app/mongoid/shim.rb +25 -0
- data/test/dummy/app/mongoid/user_on_engine.rb +41 -0
- data/test/dummy/app/mongoid/user_on_main_app.rb +41 -0
- data/test/dummy/app/mongoid/user_with_validations.rb +37 -0
- data/test/dummy/app/mongoid/user_without_email.rb +35 -0
- data/test/dummy/config/application.rb +13 -7
- data/test/dummy/config/boot.rb +2 -0
- data/test/dummy/config/environment.rb +2 -0
- data/test/dummy/config/environments/test.rb +5 -13
- data/test/dummy/config/initializers/devise.rb +10 -3
- data/test/dummy/config/initializers/migration_class.rb +3 -6
- data/test/dummy/config/mongoid.yml +6 -0
- data/test/dummy/config/routes.rb +6 -3
- data/test/dummy/config.ru +3 -1
- data/test/dummy/db/migrate/20120508165529_create_tables.rb +13 -2
- data/test/dummy/db/migrate/20150402165590_add_verification_columns.rb +2 -0
- data/test/dummy/db/migrate/20150407162345_add_verification_attempt_column.rb +2 -0
- data/test/dummy/db/migrate/20160320162345_add_security_questions_fields.rb +2 -0
- data/test/dummy/db/migrate/20180318103603_add_expireable_columns.rb +2 -0
- data/test/dummy/db/migrate/20180318105329_add_confirmable_columns.rb +2 -0
- data/test/dummy/db/migrate/20180318105732_add_rememberable_columns.rb +2 -0
- data/test/dummy/db/migrate/20180318111336_add_recoverable_columns.rb +2 -0
- data/test/dummy/db/migrate/20180319114023_add_widget.rb +2 -0
- data/test/dummy/lib/shared_expirable_columns.rb +14 -0
- data/test/dummy/lib/shared_security_questions_fields.rb +16 -0
- data/test/dummy/lib/shared_user.rb +32 -0
- data/test/dummy/lib/shared_user_with_password_verification.rb +13 -0
- data/test/dummy/lib/shared_user_without_email.rb +28 -0
- data/test/dummy/lib/shared_user_without_omniauth.rb +15 -0
- data/test/dummy/lib/shared_verification_fields.rb +15 -0
- data/test/dummy/log/development.log +883 -0
- data/test/dummy/log/test.log +21689 -0
- data/test/integration/test_password_expirable_workflow.rb +53 -0
- data/test/integration/test_session_limitable_workflow.rb +67 -0
- data/test/orm/active_record.rb +15 -0
- data/test/orm/mongoid.rb +13 -0
- data/test/support/integration_helpers.rb +29 -0
- data/test/support/mongoid.yml +6 -0
- data/test/test_compatibility.rb +13 -0
- data/test/test_complexity_validator.rb +72 -0
- data/test/test_helper.rb +42 -9
- data/test/test_install_generator.rb +19 -2
- data/test/test_paranoid_verification.rb +2 -0
- data/test/test_password_archivable.rb +8 -7
- data/test/test_password_expirable.rb +70 -7
- data/test/test_secure_validatable.rb +97 -21
- data/test/test_session_limitable.rb +57 -0
- data/{lib/generators/templates → test/tmp/config/initializers}/devise-security.rb +12 -3
- data/test/tmp/config/locales/devise.security_extension.by.yml +49 -0
- data/test/tmp/config/locales/devise.security_extension.cs.yml +41 -0
- data/test/tmp/config/locales/devise.security_extension.de.yml +39 -0
- data/test/tmp/config/locales/devise.security_extension.en.yml +41 -0
- data/test/tmp/config/locales/devise.security_extension.es.yml +30 -0
- data/test/tmp/config/locales/devise.security_extension.fa.yml +41 -0
- data/test/tmp/config/locales/devise.security_extension.fr.yml +30 -0
- data/test/tmp/config/locales/devise.security_extension.hi.yml +42 -0
- data/test/tmp/config/locales/devise.security_extension.it.yml +41 -0
- data/test/tmp/config/locales/devise.security_extension.ja.yml +30 -0
- data/test/tmp/config/locales/devise.security_extension.nl.yml +41 -0
- data/test/tmp/config/locales/devise.security_extension.pt.yml +41 -0
- data/test/tmp/config/locales/devise.security_extension.ru.yml +49 -0
- data/test/tmp/config/locales/devise.security_extension.tr.yml +18 -0
- data/test/tmp/config/locales/devise.security_extension.uk.yml +49 -0
- data/test/tmp/config/locales/devise.security_extension.zh_CN.yml +41 -0
- data/test/tmp/config/locales/devise.security_extension.zh_TW.yml +41 -0
- metadata +235 -110
- data/.circleci/config.yml +0 -41
- data/.document +0 -5
- data/.gitignore +0 -40
- data/.rubocop.yml +0 -63
- data/.ruby-version +0 -1
- data/.travis.yml +0 -25
- data/Appraisals +0 -19
- data/Gemfile +0 -3
- data/Rakefile +0 -28
- data/devise-security.gemspec +0 -44
- data/gemfiles/rails_4.1_stable.gemfile +0 -8
- data/gemfiles/rails_4.2_stable.gemfile +0 -8
- data/gemfiles/rails_5.0_stable.gemfile +0 -8
- data/gemfiles/rails_5.1_stable.gemfile +0 -8
- data/gemfiles/rails_5.2_rc1.gemfile +0 -8
- data/lib/devise-security/models/old_password.rb +0 -4
- data/lib/devise-security/orm/active_record.rb +0 -18
- data/lib/devise-security/schema.rb +0 -64
- data/test/dummy/app/models/.gitkeep +0 -0
- data/test/test_password_expired_controller.rb +0 -44
- data/test/test_security_question_controller.rb +0 -84
data/.rubocop.yml
DELETED
@@ -1,63 +0,0 @@
|
|
1
|
-
AllCops:
|
2
|
-
TargetRubyVersion: 2.3
|
3
|
-
Include:
|
4
|
-
- '**/Rakefile'
|
5
|
-
- '**/config.ru'
|
6
|
-
- 'lib/tasks/**/*'
|
7
|
-
Exclude:
|
8
|
-
- Gemfile*
|
9
|
-
- 'db/**/*'
|
10
|
-
- 'config/**/*'
|
11
|
-
- 'bin/**/*'
|
12
|
-
- 'vendor/bundle/**/*'
|
13
|
-
- 'spec/support/**/*' # rspec support helpers have a strange api
|
14
|
-
|
15
|
-
Rails:
|
16
|
-
Enabled: true
|
17
|
-
|
18
|
-
# We don't care about method length, since we check method cyclomatic
|
19
|
-
# complexity.
|
20
|
-
Metrics/MethodLength:
|
21
|
-
Enabled: false
|
22
|
-
|
23
|
-
Metrics/LineLength:
|
24
|
-
Max: 100
|
25
|
-
|
26
|
-
Naming/FileName:
|
27
|
-
Exclude: ["devise-security.gemspec"]
|
28
|
-
|
29
|
-
Style/ClassAndModuleChildren:
|
30
|
-
EnforcedStyle: compact
|
31
|
-
SupportedStyles:
|
32
|
-
- nested
|
33
|
-
- compact
|
34
|
-
|
35
|
-
Style/HashSyntax:
|
36
|
-
EnforcedStyle: ruby19
|
37
|
-
|
38
|
-
Style/SymbolArray:
|
39
|
-
EnforcedStyle: brackets
|
40
|
-
|
41
|
-
# Trailing commas make for clearer diffs because the last line won't appear
|
42
|
-
# to have been changed, as it would if it lacked a comma and had one added.
|
43
|
-
Style/TrailingCommaInArrayLiteral:
|
44
|
-
EnforcedStyleForMultiline: comma
|
45
|
-
Style/TrailingCommaInHashLiteral:
|
46
|
-
EnforcedStyleForMultiline: comma
|
47
|
-
Style/TrailingCommaInArguments:
|
48
|
-
EnforcedStyleForMultiline: comma
|
49
|
-
|
50
|
-
# Cop supports --auto-correct.
|
51
|
-
# Configuration parameters: PreferredDelimiters.
|
52
|
-
Style/PercentLiteralDelimiters:
|
53
|
-
PreferredDelimiters:
|
54
|
-
# Using `[]` for string arrays instead of `()`, since normal arrays are
|
55
|
-
# indicated with `[]` not `()`.
|
56
|
-
'%w': '[]'
|
57
|
-
'%W': '[]'
|
58
|
-
|
59
|
-
Style/AndOr:
|
60
|
-
# Whether `and` and `or` are banned only in conditionals (conditionals)
|
61
|
-
# or completely (always).
|
62
|
-
# They read better, more like normal English.
|
63
|
-
Enabled: false
|
data/.ruby-version
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
2.2.9
|
data/.travis.yml
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
language: ruby
|
2
|
-
before_install: gem install bundler && bundler -v
|
3
|
-
install: bundle install --jobs=3 --retry=3
|
4
|
-
before_script: bundle install
|
5
|
-
script: bundle exec rake
|
6
|
-
rvm:
|
7
|
-
- 2.2.9
|
8
|
-
- 2.3.6
|
9
|
-
- 2.4.3
|
10
|
-
- 2.5.0
|
11
|
-
- ruby-head
|
12
|
-
matrix:
|
13
|
-
allow_failures:
|
14
|
-
- rvm: ruby-head
|
15
|
-
- gemfile: gemfiles/rails_5.2_rc1.gemfile
|
16
|
-
- rvm: 2.4.3
|
17
|
-
gemfile: gemfiles/rails_4.1_stable.gemfile
|
18
|
-
- rvm: 2.5.0
|
19
|
-
gemfile: gemfiles/rails_4.1_stable.gemfile
|
20
|
-
gemfile:
|
21
|
-
- gemfiles/rails_4.1_stable.gemfile
|
22
|
-
- gemfiles/rails_4.2_stable.gemfile
|
23
|
-
- gemfiles/rails_5.0_stable.gemfile
|
24
|
-
- gemfiles/rails_5.1_stable.gemfile
|
25
|
-
- gemfiles/rails_5.2_rc1.gemfile
|
data/Appraisals
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
appraise 'rails-4.1-stable' do
|
2
|
-
gem 'rails', '~> 4.1.0'
|
3
|
-
end
|
4
|
-
|
5
|
-
appraise 'rails-4.2-stable' do
|
6
|
-
gem 'rails', '~> 4.2.0'
|
7
|
-
end
|
8
|
-
|
9
|
-
appraise 'rails-5.0-stable' do
|
10
|
-
gem 'rails', '~> 5.0.0'
|
11
|
-
end
|
12
|
-
|
13
|
-
appraise 'rails-5.1-stable' do
|
14
|
-
gem 'rails', '~> 5.1.0'
|
15
|
-
end
|
16
|
-
|
17
|
-
appraise 'rails-5.2-rc1' do
|
18
|
-
gem 'rails', '~> 5.2.0.rc1'
|
19
|
-
end
|
data/Gemfile
DELETED
data/Rakefile
DELETED
@@ -1,28 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
$LOAD_PATH.unshift File.join(File.dirname(__FILE__), 'lib')
|
4
|
-
require 'rubygems'
|
5
|
-
require 'bundler'
|
6
|
-
require 'rake/testtask'
|
7
|
-
require 'rdoc/task'
|
8
|
-
require 'devise-security/version'
|
9
|
-
|
10
|
-
desc 'Default: Run DeviseSecurity unit tests'
|
11
|
-
task default: :test
|
12
|
-
|
13
|
-
Rake::TestTask.new(:test) do |t|
|
14
|
-
t.libs << 'lib'
|
15
|
-
t.libs << 'test'
|
16
|
-
t.test_files = FileList['test/*test*.rb']
|
17
|
-
t.verbose = true
|
18
|
-
t.warning = false
|
19
|
-
end
|
20
|
-
|
21
|
-
Rake::RDocTask.new do |rdoc|
|
22
|
-
version = DeviseSecurity::VERSION.dup
|
23
|
-
|
24
|
-
rdoc.rdoc_dir = 'rdoc'
|
25
|
-
rdoc.title = "devise-security #{version}"
|
26
|
-
rdoc.rdoc_files.include('README*')
|
27
|
-
rdoc.rdoc_files.include('lib/**/*.rb')
|
28
|
-
end
|
data/devise-security.gemspec
DELETED
@@ -1,44 +0,0 @@
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
2
|
-
# frozen_string_literal: true
|
3
|
-
|
4
|
-
$LOAD_PATH.push File.expand_path('../lib', __FILE__)
|
5
|
-
require 'devise-security/version'
|
6
|
-
|
7
|
-
Gem::Specification.new do |s|
|
8
|
-
s.name = 'devise-security'
|
9
|
-
s.version = DeviseSecurity::VERSION.dup
|
10
|
-
s.platform = Gem::Platform::RUBY
|
11
|
-
s.licenses = ['MIT']
|
12
|
-
s.summary = 'Security extension for devise'
|
13
|
-
s.email = 'natebird@gmail.com'
|
14
|
-
s.homepage = 'https://github.com/devise-security/devise-security'
|
15
|
-
s.description = 'An enterprise security extension for devise.'
|
16
|
-
s.authors = [
|
17
|
-
'Marco Scholl', 'Alexander Dreher', 'Nate Bird', 'Dillon Welch'
|
18
|
-
]
|
19
|
-
|
20
|
-
s.files = `git ls-files`.split("\n")
|
21
|
-
s.test_files = `git ls-files -- test/*`.split("\n")
|
22
|
-
s.require_paths = ['lib']
|
23
|
-
s.required_ruby_version = '>= 2.2.9'
|
24
|
-
|
25
|
-
if RUBY_VERSION >= '2.4'
|
26
|
-
s.add_runtime_dependency 'rails', '>= 4.1.0', '< 6.0'
|
27
|
-
else
|
28
|
-
s.add_runtime_dependency 'railties', '>= 4.1.0', '< 6.0'
|
29
|
-
end
|
30
|
-
s.add_runtime_dependency 'devise', '>= 4.2.0', '< 5.0'
|
31
|
-
|
32
|
-
s.add_development_dependency 'appraisal'
|
33
|
-
s.add_development_dependency 'bundler', '>= 1.3.0', '< 2.0'
|
34
|
-
s.add_development_dependency 'coveralls', '~> 0.8'
|
35
|
-
s.add_development_dependency 'easy_captcha', '~> 0'
|
36
|
-
s.add_development_dependency 'm'
|
37
|
-
s.add_development_dependency 'minitest', '5.10.3' # see https://github.com/seattlerb/minitest/issues/730
|
38
|
-
s.add_development_dependency 'pry-byebug'
|
39
|
-
s.add_development_dependency 'pry-rescue'
|
40
|
-
s.add_development_dependency 'pry'
|
41
|
-
s.add_development_dependency 'rails_email_validator', '~> 0'
|
42
|
-
s.add_development_dependency 'rubocop', '~> 0'
|
43
|
-
s.add_development_dependency 'sqlite3', '~> 1.3', '>= 1.3.10'
|
44
|
-
end
|
@@ -1,18 +0,0 @@
|
|
1
|
-
module DeviseSecurity
|
2
|
-
module Orm
|
3
|
-
# This module contains some helpers and handle schema (migrations):
|
4
|
-
#
|
5
|
-
# create_table :accounts do |t|
|
6
|
-
# t.password_expirable
|
7
|
-
# end
|
8
|
-
#
|
9
|
-
module ActiveRecord
|
10
|
-
module Schema
|
11
|
-
include DeviseSecurity::Schema
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
ActiveRecord::ConnectionAdapters::Table.send :include, DeviseSecurity::Orm::ActiveRecord::Schema
|
18
|
-
ActiveRecord::ConnectionAdapters::TableDefinition.send :include, DeviseSecurity::Orm::ActiveRecord::Schema
|
@@ -1,64 +0,0 @@
|
|
1
|
-
module DeviseSecurity
|
2
|
-
# add schema helper for migrations
|
3
|
-
module Schema
|
4
|
-
# Add password_changed_at columns in the resource's database table.
|
5
|
-
#
|
6
|
-
# Examples
|
7
|
-
#
|
8
|
-
# # For a new resource migration:
|
9
|
-
# create_table :the_resources do |t|
|
10
|
-
# t.password_expirable
|
11
|
-
# ...
|
12
|
-
# end
|
13
|
-
#
|
14
|
-
# # or if the resource's table already exists, define a migration and put this in:
|
15
|
-
# change_table :the_resources do |t|
|
16
|
-
# t.datetime :password_changed_at
|
17
|
-
# end
|
18
|
-
#
|
19
|
-
def password_expirable
|
20
|
-
apply_devise_schema :password_changed_at, DateTime
|
21
|
-
end
|
22
|
-
|
23
|
-
# Add password_archivable columns
|
24
|
-
#
|
25
|
-
# Examples
|
26
|
-
#
|
27
|
-
# create_table :old_passwords do
|
28
|
-
# t.password_archivable
|
29
|
-
# end
|
30
|
-
# add_index :old_passwords, [:password_archivable_type, :password_archivable_id], name: :index_password_archivable
|
31
|
-
#
|
32
|
-
def password_archivable
|
33
|
-
apply_devise_schema :encrypted_password, String, limit: 128, null: false
|
34
|
-
apply_devise_schema :password_salt, String
|
35
|
-
apply_devise_schema :password_archivable_id, Integer, null: false
|
36
|
-
apply_devise_schema :password_archivable_type, String, null: false
|
37
|
-
apply_devise_schema :created_at, DateTime
|
38
|
-
end
|
39
|
-
|
40
|
-
# Add session_limitable columns in the resource's database table.
|
41
|
-
#
|
42
|
-
# Examples
|
43
|
-
#
|
44
|
-
# # For a new resource migration:
|
45
|
-
# create_table :the_resources do |t|
|
46
|
-
# t.session_limitable
|
47
|
-
# ...
|
48
|
-
# end
|
49
|
-
#
|
50
|
-
# # or if the resource's table already exists, define a migration and put this in:
|
51
|
-
# change_table :the_resources do |t|
|
52
|
-
# t.string :unique_session_id, limit: 20
|
53
|
-
# end
|
54
|
-
#
|
55
|
-
def session_limitable
|
56
|
-
apply_devise_schema :unique_session_id, String, limit: 20
|
57
|
-
end
|
58
|
-
|
59
|
-
def expirable
|
60
|
-
apply_devise_schema :expired_at, DateTime
|
61
|
-
apply_devise_schema :last_activity_at, DateTime
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
File without changes
|
@@ -1,44 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class Devise::PasswordExpiredControllerTest < ActionController::TestCase
|
4
|
-
include Devise::Test::ControllerHelpers
|
5
|
-
|
6
|
-
setup do
|
7
|
-
@request.env["devise.mapping"] = Devise.mappings[:user]
|
8
|
-
@user = User.create!(
|
9
|
-
username: 'hello',
|
10
|
-
email: 'hello@path.travel',
|
11
|
-
password: 'Password4',
|
12
|
-
password_changed_at: 4.months.ago,
|
13
|
-
confirmed_at: 5.months.ago
|
14
|
-
)
|
15
|
-
assert @user.valid?
|
16
|
-
sign_in(@user)
|
17
|
-
end
|
18
|
-
|
19
|
-
test 'should render show' do
|
20
|
-
get :show
|
21
|
-
assert_includes @response.body, 'Renew your password'
|
22
|
-
end
|
23
|
-
|
24
|
-
test 'should update password' do
|
25
|
-
if Rails.version < "5"
|
26
|
-
put :update, {
|
27
|
-
user: {
|
28
|
-
current_password: 'Password4',
|
29
|
-
password: 'Password5',
|
30
|
-
password_confirmation: 'Password5'
|
31
|
-
}
|
32
|
-
}
|
33
|
-
else
|
34
|
-
put :update, params: {
|
35
|
-
user: {
|
36
|
-
current_password: 'Password4',
|
37
|
-
password: 'Password5',
|
38
|
-
password_confirmation: 'Password5'
|
39
|
-
}
|
40
|
-
}
|
41
|
-
end
|
42
|
-
assert_redirected_to root_path
|
43
|
-
end
|
44
|
-
end
|
@@ -1,84 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class TestWithSecurityQuestion < ActionController::TestCase
|
4
|
-
include Devise::Test::ControllerHelpers
|
5
|
-
tests SecurityQuestion::UnlocksController
|
6
|
-
|
7
|
-
setup do
|
8
|
-
@user = User.create(username: 'hello', email: 'hello@path.travel',
|
9
|
-
password: '1234', security_question_answer: 'Right Answer')
|
10
|
-
@user.lock_access!
|
11
|
-
|
12
|
-
@request.env['devise.mapping'] = Devise.mappings[:security_question_user]
|
13
|
-
end
|
14
|
-
|
15
|
-
test 'When security question is enabled, it is inserted correctly' do
|
16
|
-
if Rails.version < "5"
|
17
|
-
post :create, {
|
18
|
-
security_question_user: {
|
19
|
-
email: @user.email
|
20
|
-
}, security_question_answer: "wrong answer"
|
21
|
-
}
|
22
|
-
else
|
23
|
-
post :create, params: {
|
24
|
-
security_question_user: {
|
25
|
-
email: @user.email
|
26
|
-
}, security_question_answer: "wrong answer"
|
27
|
-
}
|
28
|
-
end
|
29
|
-
|
30
|
-
assert_equal 'The security question answer was invalid.', flash[:alert]
|
31
|
-
assert_redirected_to new_security_question_user_unlock_path
|
32
|
-
end
|
33
|
-
|
34
|
-
test 'When security_question is valid, it runs as normal' do
|
35
|
-
if Rails.version < "5"
|
36
|
-
post :create, {
|
37
|
-
security_question_user: {
|
38
|
-
email: @user.email
|
39
|
-
}, security_question_answer: @user.security_question_answer
|
40
|
-
}
|
41
|
-
else
|
42
|
-
post :create, params: {
|
43
|
-
security_question_user: {
|
44
|
-
email: @user.email
|
45
|
-
}, security_question_answer: @user.security_question_answer
|
46
|
-
}
|
47
|
-
end
|
48
|
-
|
49
|
-
assert_equal 'You will receive an email with instructions for how to unlock your account in a few minutes.', flash[:notice]
|
50
|
-
assert_redirected_to new_security_question_user_session_path
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
class TestWithoutSecurityQuestion < ActionController::TestCase
|
55
|
-
include Devise::Test::ControllerHelpers
|
56
|
-
tests Devise::UnlocksController
|
57
|
-
|
58
|
-
setup do
|
59
|
-
@user = User.create(username: 'hello', email: 'hello@path.travel',
|
60
|
-
password: '1234', security_question_answer: 'Right Answer')
|
61
|
-
@user.lock_access!
|
62
|
-
|
63
|
-
@request.env['devise.mapping'] = Devise.mappings[:user]
|
64
|
-
end
|
65
|
-
|
66
|
-
test 'When security question is not enabled it is not inserted' do
|
67
|
-
if Rails.version < "5"
|
68
|
-
post :create, {
|
69
|
-
user: {
|
70
|
-
email: @user.email
|
71
|
-
}
|
72
|
-
}
|
73
|
-
else
|
74
|
-
post :create, params: {
|
75
|
-
user: {
|
76
|
-
email: @user.email
|
77
|
-
}
|
78
|
-
}
|
79
|
-
end
|
80
|
-
|
81
|
-
assert_equal 'You will receive an email with instructions for how to unlock your account in a few minutes.', flash[:notice]
|
82
|
-
assert_redirected_to new_user_session_path
|
83
|
-
end
|
84
|
-
end
|