devise-secure_password 1.0.6 → 2.0.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 +5 -5
- data/Changelog.md +39 -4
- data/Dockerfile +1 -1
- data/Dockerfile.prev +3 -3
- data/Gemfile +2 -1
- data/Gemfile.lock +218 -214
- data/README.md +33 -10
- data/app/controllers/devise/passwords_with_policy_controller.rb +55 -14
- data/app/views/devise/passwords_with_policy/edit.html.erb +5 -1
- data/config/locales/en.yml +51 -0
- data/devise-secure_password.gemspec +22 -23
- data/gemfiles/rails_6_0.gemfile +57 -0
- data/gemfiles/rails_6_0.gemfile.lock +347 -0
- data/gemfiles/rails_6_1.gemfile +57 -0
- data/gemfiles/rails_6_1.gemfile.lock +352 -0
- data/lib/devise/secure_password.rb +4 -9
- data/lib/devise/secure_password/controllers/devise_helpers.rb +4 -50
- data/lib/devise/secure_password/controllers/helpers.rb +58 -0
- data/lib/devise/secure_password/grammar.rb +13 -0
- data/lib/devise/secure_password/models/password_disallows_frequent_changes.rb +3 -1
- data/lib/devise/secure_password/models/password_disallows_frequent_reuse.rb +1 -0
- data/lib/devise/secure_password/models/password_has_required_content.rb +53 -15
- data/lib/devise/secure_password/models/password_requires_regular_updates.rb +0 -2
- data/lib/devise/secure_password/version.rb +1 -1
- data/lib/support/string/character_counter.rb +3 -1
- data/pkg/devise-secure_password-2.0.0.gem +0 -0
- data/pkg/devise-secure_password-2.0.1.gem +0 -0
- metadata +67 -169
- data/coverage/assets/0.10.2/application.css +0 -799
- data/coverage/assets/0.10.2/application.js +0 -1707
- data/coverage/assets/0.10.2/colorbox/border.png +0 -0
- data/coverage/assets/0.10.2/colorbox/controls.png +0 -0
- data/coverage/assets/0.10.2/colorbox/loading.gif +0 -0
- data/coverage/assets/0.10.2/colorbox/loading_background.png +0 -0
- data/coverage/assets/0.10.2/favicon_green.png +0 -0
- data/coverage/assets/0.10.2/favicon_red.png +0 -0
- data/coverage/assets/0.10.2/favicon_yellow.png +0 -0
- data/coverage/assets/0.10.2/loading.gif +0 -0
- data/coverage/assets/0.10.2/magnify.png +0 -0
- data/coverage/assets/0.10.2/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- data/coverage/assets/0.10.2/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
- data/coverage/assets/0.10.2/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
- data/coverage/assets/0.10.2/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/coverage/assets/0.10.2/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
- data/coverage/assets/0.10.2/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
- data/coverage/assets/0.10.2/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- data/coverage/assets/0.10.2/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
- data/coverage/assets/0.10.2/smoothness/images/ui-icons_222222_256x240.png +0 -0
- data/coverage/assets/0.10.2/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
- data/coverage/assets/0.10.2/smoothness/images/ui-icons_454545_256x240.png +0 -0
- data/coverage/assets/0.10.2/smoothness/images/ui-icons_888888_256x240.png +0 -0
- data/coverage/assets/0.10.2/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
- data/coverage/index.html +0 -4115
- data/devise-secure_password-1.0.0.gem +0 -0
- data/gemfiles/rails-5_0_6.gemfile +0 -17
- data/gemfiles/rails-5_0_6.gemfile.lock +0 -286
- data/gemfiles/rails-5_1_4.gemfile +0 -16
- data/gemfiles/rails-5_1_4.gemfile.lock +0 -282
- data/lib/devise/secure_password/controllers/active_helpers.rb +0 -45
- data/lib/devise/secure_password/hooks/password_requires_regular_updates.rb +0 -5
- data/pkg/devise-secure_password-1.0.3.gem +0 -0
- data/pkg/devise-secure_password-1.0.4.gem +0 -0
- data/pkg/devise-secure_password-1.0.5.gem +0 -0
@@ -0,0 +1,58 @@
|
|
1
|
+
module Devise
|
2
|
+
module SecurePassword
|
3
|
+
module Controllers
|
4
|
+
module Helpers
|
5
|
+
extend ActiveSupport::Concern
|
6
|
+
|
7
|
+
included do
|
8
|
+
include Devise::SecurePassword::Grammar
|
9
|
+
|
10
|
+
before_action :authenticate_secure_password!, unless: :devise_controller?
|
11
|
+
end
|
12
|
+
|
13
|
+
def authenticate_secure_password_expired?
|
14
|
+
return false if devise_controller?
|
15
|
+
|
16
|
+
session[:devise_secure_password_expired] == true
|
17
|
+
end
|
18
|
+
|
19
|
+
def authenticate_secure_password!
|
20
|
+
return unless authenticate_secure_password_expired?
|
21
|
+
|
22
|
+
redirect_to authenticate_secure_password_path, alert: "#{error_string_for_password_expired}."
|
23
|
+
end
|
24
|
+
|
25
|
+
def authenticate_secure_password_path
|
26
|
+
return unless warden.user
|
27
|
+
|
28
|
+
:"edit_#{devise_secure_password_scope}_password_with_policy"
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def devise_secure_password_scope
|
34
|
+
Devise::Mapping.find_scope!(warden.user)
|
35
|
+
end
|
36
|
+
|
37
|
+
def error_string_for_password_expired
|
38
|
+
I18n.t(
|
39
|
+
'secure_password.password_requires_regular_updates.errors.messages.password_expired',
|
40
|
+
timeframe: precise_distance_of_time_in_words(warden.user.class.password_maximum_age)
|
41
|
+
)
|
42
|
+
end
|
43
|
+
|
44
|
+
def set_devise_secure_password_expired!
|
45
|
+
session[:devise_secure_password_expired] = warden.user.password_expired?
|
46
|
+
end
|
47
|
+
|
48
|
+
def unset_devise_secure_password_expired!
|
49
|
+
session.delete(:devise_secure_password_expired)
|
50
|
+
end
|
51
|
+
|
52
|
+
def warden_user_has_password_expiration?
|
53
|
+
warden&.user&.respond_to?(:password_expired?)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# lib/support/string/grammar.rb
|
2
|
+
#
|
3
|
+
module Devise
|
4
|
+
module SecurePassword
|
5
|
+
module Grammar
|
6
|
+
# distance_in_words without determiner words: about, almost, over, etc.
|
7
|
+
def precise_distance_of_time_in_words(from_time, to_time = 0, options = {})
|
8
|
+
precise_options = { scope: :'secure_password.datetime.precise_distance_in_words' }
|
9
|
+
distance_of_time_in_words(from_time, to_time, options.merge!(precise_options))
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -7,6 +7,8 @@ module Devise
|
|
7
7
|
|
8
8
|
included do
|
9
9
|
include ActionView::Helpers::DateHelper
|
10
|
+
include Devise::SecurePassword::Grammar
|
11
|
+
|
10
12
|
validate :validate_password_frequent_change, if: :password_required?
|
11
13
|
|
12
14
|
set_callback(:initialize, :before, :before_resource_initialized)
|
@@ -17,7 +19,7 @@ module Devise
|
|
17
19
|
if encrypted_password_changed? && password_recent?
|
18
20
|
error_string = I18n.t(
|
19
21
|
'secure_password.password_disallows_frequent_changes.errors.messages.password_is_recent',
|
20
|
-
timeframe:
|
22
|
+
timeframe: precise_distance_of_time_in_words(self.class.password_minimum_age)
|
21
23
|
)
|
22
24
|
errors.add(:base, error_string)
|
23
25
|
end
|
@@ -10,24 +10,40 @@ module Devise
|
|
10
10
|
included do
|
11
11
|
validate :validate_password_content, if: :password_required?
|
12
12
|
validate :validate_password_confirmation_content, if: :password_required?
|
13
|
+
validate :validate_password_confirmation, if: :password_required?
|
13
14
|
end
|
14
15
|
|
15
16
|
def validate_password_content
|
16
17
|
self.password ||= ''
|
18
|
+
errors.delete(:password)
|
17
19
|
validate_password_content_for(:password)
|
18
20
|
errors[:password].count.zero?
|
19
21
|
end
|
20
22
|
|
21
23
|
def validate_password_confirmation_content
|
22
|
-
|
24
|
+
return true if password_confirmation.nil? # rails skips password_confirmation validation if nil!
|
25
|
+
|
26
|
+
errors.delete(:password_confirmation)
|
23
27
|
validate_password_content_for(:password_confirmation)
|
24
28
|
errors[:password_confirmation].count.zero?
|
25
29
|
end
|
26
30
|
|
31
|
+
def validate_password_confirmation
|
32
|
+
return true if password_confirmation.nil? # rails skips password_confirmation validation if nil!
|
33
|
+
|
34
|
+
unless password == password_confirmation
|
35
|
+
human_attribute_name = self.class.human_attribute_name(:password)
|
36
|
+
errors.add(:password_confirmation, :confirmation, attribute: human_attribute_name)
|
37
|
+
end
|
38
|
+
errors[:password_confirmation].count.zero?
|
39
|
+
end
|
40
|
+
|
27
41
|
def validate_password_content_for(attr)
|
28
42
|
return unless respond_to?(attr) && !(password_obj = send(attr)).nil?
|
43
|
+
|
29
44
|
::Support::String::CharacterCounter.new.count(password_obj).each do |type, dict|
|
30
45
|
error_string = case type
|
46
|
+
when :length then validate_length(dict[:count])
|
31
47
|
when :unknown then validate_unknown(dict)
|
32
48
|
else validate_type(type, dict)
|
33
49
|
end
|
@@ -46,15 +62,33 @@ module Devise
|
|
46
62
|
|
47
63
|
def validate_type(type, dict)
|
48
64
|
type_total = dict.values.reduce(0, :+)
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
65
|
+
if type_total < required_char_counts_for_type(type)[:min]
|
66
|
+
error_string_for_type_length(type, :min)
|
67
|
+
elsif type_total > required_char_counts_for_type(type)[:max]
|
68
|
+
error_string_for_type_length(type, :max)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def validate_length(dict)
|
73
|
+
if dict < Devise.password_length.min
|
74
|
+
error_string_for_length(:min)
|
75
|
+
elsif dict > Devise.password_length.max
|
76
|
+
error_string_for_length(:max)
|
77
|
+
end
|
55
78
|
end
|
56
79
|
|
57
|
-
def error_string_for_length(
|
80
|
+
def error_string_for_length(threshold = :min)
|
81
|
+
lang_key = case threshold
|
82
|
+
when :min then 'secure_password.password_has_required_content.errors.messages.minimum_length'
|
83
|
+
when :max then 'secure_password.password_has_required_content.errors.messages.maximum_length'
|
84
|
+
else return ''
|
85
|
+
end
|
86
|
+
|
87
|
+
count = required_char_counts_for_type(:length)[threshold]
|
88
|
+
I18n.t(lang_key, count: count, subject: I18n.t('secure_password.character', count: count))
|
89
|
+
end
|
90
|
+
|
91
|
+
def error_string_for_type_length(type, threshold = :min)
|
58
92
|
lang_key = case threshold
|
59
93
|
when :min then 'secure_password.password_has_required_content.errors.messages.minimum_characters'
|
60
94
|
when :max then 'secure_password.password_has_required_content.errors.messages.maximum_characters'
|
@@ -62,23 +96,23 @@ module Devise
|
|
62
96
|
end
|
63
97
|
|
64
98
|
count = required_char_counts_for_type(type)[threshold]
|
65
|
-
error_string = I18n.t(lang_key, count: count, type: type
|
66
|
-
error_string
|
99
|
+
error_string = I18n.t(lang_key, count: count, type: I18n.t("secure_password.types.#{type}"), subject: I18n.t('secure_password.character', count: count))
|
100
|
+
"#{error_string} #{dict_for_type(type)}"
|
67
101
|
end
|
68
102
|
|
69
|
-
def error_string_for_unknown_chars(
|
103
|
+
def error_string_for_unknown_chars(count, chars = [])
|
70
104
|
I18n.t(
|
71
105
|
'secure_password.password_has_required_content.errors.messages.unknown_characters',
|
72
|
-
count:
|
73
|
-
subject: 'character'
|
74
|
-
) + " (#{chars.join
|
106
|
+
count: count,
|
107
|
+
subject: I18n.t('secure_password.character', count: count)
|
108
|
+
) + " (#{chars.join})"
|
75
109
|
end
|
76
110
|
|
77
111
|
def dict_for_type(type)
|
78
112
|
character_counter = ::Support::String::CharacterCounter.new
|
79
113
|
|
80
114
|
case type
|
81
|
-
when :special, :unknown then "(#{character_counter.count_hash[type].keys.join
|
115
|
+
when :special, :unknown then "(#{character_counter.count_hash[type].keys.join})"
|
82
116
|
else
|
83
117
|
"(#{character_counter.count_hash[type].keys.first}..#{character_counter.count_hash[type].keys.last})"
|
84
118
|
end
|
@@ -101,6 +135,10 @@ module Devise
|
|
101
135
|
def config
|
102
136
|
{
|
103
137
|
REQUIRED_CHAR_COUNTS: {
|
138
|
+
length: {
|
139
|
+
min: Devise.password_length.min,
|
140
|
+
max: Devise.password_length.max
|
141
|
+
},
|
104
142
|
uppercase: {
|
105
143
|
min: password_required_uppercase_count,
|
106
144
|
max: LENGTH_MAX
|
@@ -7,6 +7,7 @@ module Support
|
|
7
7
|
|
8
8
|
def initialize
|
9
9
|
@count_hash = {
|
10
|
+
length: { count: 0 },
|
10
11
|
uppercase: characters_to_dictionary(('A'..'Z').to_a),
|
11
12
|
lowercase: characters_to_dictionary(('a'..'z').to_a),
|
12
13
|
number: characters_to_dictionary(('0'..'9').to_a),
|
@@ -18,7 +19,8 @@ module Support
|
|
18
19
|
def count(string)
|
19
20
|
raise ArgumentError, "Invalid value for string: #{string}" if string.nil?
|
20
21
|
|
21
|
-
string.
|
22
|
+
string.chars.each { |c| tally_character(c) }
|
23
|
+
@count_hash[:length][:count] = string.length
|
22
24
|
|
23
25
|
@count_hash
|
24
26
|
end
|
Binary file
|
Binary file
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: devise-secure_password
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mark Eissler
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-05-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: devise
|
@@ -39,7 +39,7 @@ dependencies:
|
|
39
39
|
version: 5.0.0
|
40
40
|
- - "<"
|
41
41
|
- !ruby/object:Gem::Version
|
42
|
-
version:
|
42
|
+
version: 7.0.0
|
43
43
|
type: :runtime
|
44
44
|
prerelease: false
|
45
45
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -49,54 +49,39 @@ dependencies:
|
|
49
49
|
version: 5.0.0
|
50
50
|
- - "<"
|
51
51
|
- !ruby/object:Gem::Version
|
52
|
-
version:
|
52
|
+
version: 7.0.0
|
53
53
|
- !ruby/object:Gem::Dependency
|
54
54
|
name: bundler
|
55
55
|
requirement: !ruby/object:Gem::Requirement
|
56
56
|
requirements:
|
57
|
-
- - "~>"
|
58
|
-
- !ruby/object:Gem::Version
|
59
|
-
version: '1.16'
|
60
57
|
- - ">="
|
61
58
|
- !ruby/object:Gem::Version
|
62
|
-
version:
|
59
|
+
version: 2.2.14
|
63
60
|
type: :development
|
64
61
|
prerelease: false
|
65
62
|
version_requirements: !ruby/object:Gem::Requirement
|
66
63
|
requirements:
|
67
|
-
- - "~>"
|
68
|
-
- !ruby/object:Gem::Version
|
69
|
-
version: '1.16'
|
70
64
|
- - ">="
|
71
65
|
- !ruby/object:Gem::Version
|
72
|
-
version:
|
66
|
+
version: 2.2.14
|
73
67
|
- !ruby/object:Gem::Dependency
|
74
68
|
name: capybara
|
75
69
|
requirement: !ruby/object:Gem::Requirement
|
76
70
|
requirements:
|
77
|
-
- - "~>"
|
78
|
-
- !ruby/object:Gem::Version
|
79
|
-
version: '2.16'
|
80
71
|
- - ">="
|
81
72
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
73
|
+
version: 3.35.3
|
83
74
|
type: :development
|
84
75
|
prerelease: false
|
85
76
|
version_requirements: !ruby/object:Gem::Requirement
|
86
77
|
requirements:
|
87
|
-
- - "~>"
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: '2.16'
|
90
78
|
- - ">="
|
91
79
|
- !ruby/object:Gem::Version
|
92
|
-
version:
|
80
|
+
version: 3.35.3
|
93
81
|
- !ruby/object:Gem::Dependency
|
94
82
|
name: capybara-screenshot
|
95
83
|
requirement: !ruby/object:Gem::Requirement
|
96
84
|
requirements:
|
97
|
-
- - "~>"
|
98
|
-
- !ruby/object:Gem::Version
|
99
|
-
version: '1.0'
|
100
85
|
- - ">="
|
101
86
|
- !ruby/object:Gem::Version
|
102
87
|
version: 1.0.18
|
@@ -104,46 +89,23 @@ dependencies:
|
|
104
89
|
prerelease: false
|
105
90
|
version_requirements: !ruby/object:Gem::Requirement
|
106
91
|
requirements:
|
107
|
-
- - "~>"
|
108
|
-
- !ruby/object:Gem::Version
|
109
|
-
version: '1.0'
|
110
92
|
- - ">="
|
111
93
|
- !ruby/object:Gem::Version
|
112
94
|
version: 1.0.18
|
113
|
-
- !ruby/object:Gem::Dependency
|
114
|
-
name: coffee-rails
|
115
|
-
requirement: !ruby/object:Gem::Requirement
|
116
|
-
requirements:
|
117
|
-
- - "~>"
|
118
|
-
- !ruby/object:Gem::Version
|
119
|
-
version: '4.2'
|
120
|
-
type: :development
|
121
|
-
prerelease: false
|
122
|
-
version_requirements: !ruby/object:Gem::Requirement
|
123
|
-
requirements:
|
124
|
-
- - "~>"
|
125
|
-
- !ruby/object:Gem::Version
|
126
|
-
version: '4.2'
|
127
95
|
- !ruby/object:Gem::Dependency
|
128
96
|
name: database_cleaner
|
129
97
|
requirement: !ruby/object:Gem::Requirement
|
130
98
|
requirements:
|
131
|
-
- - "~>"
|
132
|
-
- !ruby/object:Gem::Version
|
133
|
-
version: '1.6'
|
134
99
|
- - ">="
|
135
100
|
- !ruby/object:Gem::Version
|
136
|
-
version:
|
101
|
+
version: 2.0.1
|
137
102
|
type: :development
|
138
103
|
prerelease: false
|
139
104
|
version_requirements: !ruby/object:Gem::Requirement
|
140
105
|
requirements:
|
141
|
-
- - "~>"
|
142
|
-
- !ruby/object:Gem::Version
|
143
|
-
version: '1.6'
|
144
106
|
- - ">="
|
145
107
|
- !ruby/object:Gem::Version
|
146
|
-
version:
|
108
|
+
version: 2.0.1
|
147
109
|
- !ruby/object:Gem::Dependency
|
148
110
|
name: devise
|
149
111
|
requirement: !ruby/object:Gem::Requirement
|
@@ -162,9 +124,6 @@ dependencies:
|
|
162
124
|
name: flay
|
163
125
|
requirement: !ruby/object:Gem::Requirement
|
164
126
|
requirements:
|
165
|
-
- - "~>"
|
166
|
-
- !ruby/object:Gem::Version
|
167
|
-
version: '2.10'
|
168
127
|
- - ">="
|
169
128
|
- !ruby/object:Gem::Version
|
170
129
|
version: 2.10.0
|
@@ -172,9 +131,6 @@ dependencies:
|
|
172
131
|
prerelease: false
|
173
132
|
version_requirements: !ruby/object:Gem::Requirement
|
174
133
|
requirements:
|
175
|
-
- - "~>"
|
176
|
-
- !ruby/object:Gem::Version
|
177
|
-
version: '2.10'
|
178
134
|
- - ">="
|
179
135
|
- !ruby/object:Gem::Version
|
180
136
|
version: 2.10.0
|
@@ -182,9 +138,6 @@ dependencies:
|
|
182
138
|
name: launchy
|
183
139
|
requirement: !ruby/object:Gem::Requirement
|
184
140
|
requirements:
|
185
|
-
- - "~>"
|
186
|
-
- !ruby/object:Gem::Version
|
187
|
-
version: '2.4'
|
188
141
|
- - ">="
|
189
142
|
- !ruby/object:Gem::Version
|
190
143
|
version: 2.4.3
|
@@ -192,9 +145,6 @@ dependencies:
|
|
192
145
|
prerelease: false
|
193
146
|
version_requirements: !ruby/object:Gem::Requirement
|
194
147
|
requirements:
|
195
|
-
- - "~>"
|
196
|
-
- !ruby/object:Gem::Version
|
197
|
-
version: '2.4'
|
198
148
|
- - ">="
|
199
149
|
- !ruby/object:Gem::Version
|
200
150
|
version: 2.4.3
|
@@ -202,133 +152,132 @@ dependencies:
|
|
202
152
|
name: rails
|
203
153
|
requirement: !ruby/object:Gem::Requirement
|
204
154
|
requirements:
|
205
|
-
- - "~>"
|
206
|
-
- !ruby/object:Gem::Version
|
207
|
-
version: '5.1'
|
208
155
|
- - ">="
|
209
156
|
- !ruby/object:Gem::Version
|
210
|
-
version: 5.
|
157
|
+
version: 5.2.0
|
211
158
|
type: :development
|
212
159
|
prerelease: false
|
213
160
|
version_requirements: !ruby/object:Gem::Requirement
|
214
161
|
requirements:
|
215
|
-
- - "~>"
|
216
|
-
- !ruby/object:Gem::Version
|
217
|
-
version: '5.1'
|
218
162
|
- - ">="
|
219
163
|
- !ruby/object:Gem::Version
|
220
|
-
version: 5.
|
164
|
+
version: 5.2.0
|
221
165
|
- !ruby/object:Gem::Dependency
|
222
166
|
name: rake
|
223
167
|
requirement: !ruby/object:Gem::Requirement
|
224
168
|
requirements:
|
225
|
-
- - "
|
169
|
+
- - ">="
|
226
170
|
- !ruby/object:Gem::Version
|
227
171
|
version: '12.3'
|
228
172
|
type: :development
|
229
173
|
prerelease: false
|
230
174
|
version_requirements: !ruby/object:Gem::Requirement
|
231
175
|
requirements:
|
232
|
-
- - "
|
176
|
+
- - ">="
|
233
177
|
- !ruby/object:Gem::Version
|
234
178
|
version: '12.3'
|
235
179
|
- !ruby/object:Gem::Dependency
|
236
180
|
name: rspec
|
237
181
|
requirement: !ruby/object:Gem::Requirement
|
238
182
|
requirements:
|
239
|
-
- - "
|
183
|
+
- - ">="
|
240
184
|
- !ruby/object:Gem::Version
|
241
185
|
version: '3.7'
|
242
186
|
type: :development
|
243
187
|
prerelease: false
|
244
188
|
version_requirements: !ruby/object:Gem::Requirement
|
245
189
|
requirements:
|
246
|
-
- - "
|
190
|
+
- - ">="
|
247
191
|
- !ruby/object:Gem::Version
|
248
192
|
version: '3.7'
|
193
|
+
- !ruby/object:Gem::Dependency
|
194
|
+
name: rspec_junit_formatter
|
195
|
+
requirement: !ruby/object:Gem::Requirement
|
196
|
+
requirements:
|
197
|
+
- - ">="
|
198
|
+
- !ruby/object:Gem::Version
|
199
|
+
version: '0.3'
|
200
|
+
type: :development
|
201
|
+
prerelease: false
|
202
|
+
version_requirements: !ruby/object:Gem::Requirement
|
203
|
+
requirements:
|
204
|
+
- - ">="
|
205
|
+
- !ruby/object:Gem::Version
|
206
|
+
version: '0.3'
|
249
207
|
- !ruby/object:Gem::Dependency
|
250
208
|
name: rspec-rails
|
251
209
|
requirement: !ruby/object:Gem::Requirement
|
252
210
|
requirements:
|
253
|
-
- - "
|
211
|
+
- - ">="
|
254
212
|
- !ruby/object:Gem::Version
|
255
213
|
version: '3.7'
|
256
214
|
type: :development
|
257
215
|
prerelease: false
|
258
216
|
version_requirements: !ruby/object:Gem::Requirement
|
259
217
|
requirements:
|
260
|
-
- - "
|
218
|
+
- - ">="
|
261
219
|
- !ruby/object:Gem::Version
|
262
220
|
version: '3.7'
|
263
221
|
- !ruby/object:Gem::Dependency
|
264
|
-
name:
|
222
|
+
name: rubocop
|
265
223
|
requirement: !ruby/object:Gem::Requirement
|
266
224
|
requirements:
|
267
|
-
- - "
|
225
|
+
- - ">="
|
268
226
|
- !ruby/object:Gem::Version
|
269
|
-
version:
|
227
|
+
version: 1.0.0
|
270
228
|
type: :development
|
271
229
|
prerelease: false
|
272
230
|
version_requirements: !ruby/object:Gem::Requirement
|
273
231
|
requirements:
|
274
|
-
- - "
|
232
|
+
- - ">="
|
275
233
|
- !ruby/object:Gem::Version
|
276
|
-
version:
|
234
|
+
version: 1.0.0
|
277
235
|
- !ruby/object:Gem::Dependency
|
278
|
-
name: rubocop
|
236
|
+
name: rubocop-rails
|
279
237
|
requirement: !ruby/object:Gem::Requirement
|
280
238
|
requirements:
|
281
239
|
- - ">="
|
282
240
|
- !ruby/object:Gem::Version
|
283
|
-
version:
|
241
|
+
version: 2.3.2
|
284
242
|
type: :development
|
285
243
|
prerelease: false
|
286
244
|
version_requirements: !ruby/object:Gem::Requirement
|
287
245
|
requirements:
|
288
246
|
- - ">="
|
289
247
|
- !ruby/object:Gem::Version
|
290
|
-
version:
|
248
|
+
version: 2.3.2
|
291
249
|
- !ruby/object:Gem::Dependency
|
292
|
-
name:
|
250
|
+
name: rubocop-rspec
|
293
251
|
requirement: !ruby/object:Gem::Requirement
|
294
252
|
requirements:
|
295
|
-
- - "~>"
|
296
|
-
- !ruby/object:Gem::Version
|
297
|
-
version: '2.4'
|
298
253
|
- - ">="
|
299
254
|
- !ruby/object:Gem::Version
|
300
|
-
version:
|
255
|
+
version: 1.35.0
|
301
256
|
type: :development
|
302
257
|
prerelease: false
|
303
258
|
version_requirements: !ruby/object:Gem::Requirement
|
304
259
|
requirements:
|
305
|
-
- - "~>"
|
306
|
-
- !ruby/object:Gem::Version
|
307
|
-
version: '2.4'
|
308
260
|
- - ">="
|
309
261
|
- !ruby/object:Gem::Version
|
310
|
-
version:
|
262
|
+
version: 1.35.0
|
311
263
|
- !ruby/object:Gem::Dependency
|
312
|
-
name:
|
264
|
+
name: ruby2ruby
|
313
265
|
requirement: !ruby/object:Gem::Requirement
|
314
266
|
requirements:
|
315
|
-
- - "
|
267
|
+
- - ">="
|
316
268
|
- !ruby/object:Gem::Version
|
317
|
-
version:
|
269
|
+
version: 2.4.0
|
318
270
|
type: :development
|
319
271
|
prerelease: false
|
320
272
|
version_requirements: !ruby/object:Gem::Requirement
|
321
273
|
requirements:
|
322
|
-
- - "
|
274
|
+
- - ">="
|
323
275
|
- !ruby/object:Gem::Version
|
324
|
-
version:
|
276
|
+
version: 2.4.0
|
325
277
|
- !ruby/object:Gem::Dependency
|
326
278
|
name: selenium-webdriver
|
327
279
|
requirement: !ruby/object:Gem::Requirement
|
328
280
|
requirements:
|
329
|
-
- - "~>"
|
330
|
-
- !ruby/object:Gem::Version
|
331
|
-
version: '3.7'
|
332
281
|
- - ">="
|
333
282
|
- !ruby/object:Gem::Version
|
334
283
|
version: 3.7.0
|
@@ -336,9 +285,6 @@ dependencies:
|
|
336
285
|
prerelease: false
|
337
286
|
version_requirements: !ruby/object:Gem::Requirement
|
338
287
|
requirements:
|
339
|
-
- - "~>"
|
340
|
-
- !ruby/object:Gem::Version
|
341
|
-
version: '3.7'
|
342
288
|
- - ">="
|
343
289
|
- !ruby/object:Gem::Version
|
344
290
|
version: 3.7.0
|
@@ -346,37 +292,34 @@ dependencies:
|
|
346
292
|
name: simplecov
|
347
293
|
requirement: !ruby/object:Gem::Requirement
|
348
294
|
requirements:
|
349
|
-
- - "
|
295
|
+
- - ">="
|
350
296
|
- !ruby/object:Gem::Version
|
351
|
-
version: 0.
|
297
|
+
version: 0.18.2
|
352
298
|
type: :development
|
353
299
|
prerelease: false
|
354
300
|
version_requirements: !ruby/object:Gem::Requirement
|
355
301
|
requirements:
|
356
|
-
- - "
|
302
|
+
- - ">="
|
357
303
|
- !ruby/object:Gem::Version
|
358
|
-
version: 0.
|
304
|
+
version: 0.18.2
|
359
305
|
- !ruby/object:Gem::Dependency
|
360
306
|
name: simplecov-console
|
361
307
|
requirement: !ruby/object:Gem::Requirement
|
362
308
|
requirements:
|
363
|
-
- - "
|
309
|
+
- - ">="
|
364
310
|
- !ruby/object:Gem::Version
|
365
311
|
version: 0.4.2
|
366
312
|
type: :development
|
367
313
|
prerelease: false
|
368
314
|
version_requirements: !ruby/object:Gem::Requirement
|
369
315
|
requirements:
|
370
|
-
- - "
|
316
|
+
- - ">="
|
371
317
|
- !ruby/object:Gem::Version
|
372
318
|
version: 0.4.2
|
373
319
|
- !ruby/object:Gem::Dependency
|
374
320
|
name: sqlite3
|
375
321
|
requirement: !ruby/object:Gem::Requirement
|
376
322
|
requirements:
|
377
|
-
- - "~>"
|
378
|
-
- !ruby/object:Gem::Version
|
379
|
-
version: '1.3'
|
380
323
|
- - ">="
|
381
324
|
- !ruby/object:Gem::Version
|
382
325
|
version: 1.3.13
|
@@ -384,26 +327,9 @@ dependencies:
|
|
384
327
|
prerelease: false
|
385
328
|
version_requirements: !ruby/object:Gem::Requirement
|
386
329
|
requirements:
|
387
|
-
- - "~>"
|
388
|
-
- !ruby/object:Gem::Version
|
389
|
-
version: '1.3'
|
390
330
|
- - ">="
|
391
331
|
- !ruby/object:Gem::Version
|
392
332
|
version: 1.3.13
|
393
|
-
- !ruby/object:Gem::Dependency
|
394
|
-
name: therubyracer
|
395
|
-
requirement: !ruby/object:Gem::Requirement
|
396
|
-
requirements:
|
397
|
-
- - "~>"
|
398
|
-
- !ruby/object:Gem::Version
|
399
|
-
version: 0.12.3
|
400
|
-
type: :development
|
401
|
-
prerelease: false
|
402
|
-
version_requirements: !ruby/object:Gem::Requirement
|
403
|
-
requirements:
|
404
|
-
- - "~>"
|
405
|
-
- !ruby/object:Gem::Version
|
406
|
-
version: 0.12.3
|
407
333
|
description: Adds configurable password policy enforcement to devise.
|
408
334
|
email:
|
409
335
|
- mark.eissler@valimail.com
|
@@ -425,42 +351,16 @@ files:
|
|
425
351
|
- "./bin/console"
|
426
352
|
- "./bin/setup"
|
427
353
|
- "./config/locales/en.yml"
|
428
|
-
- "./coverage/assets/0.10.2/application.css"
|
429
|
-
- "./coverage/assets/0.10.2/application.js"
|
430
|
-
- "./coverage/assets/0.10.2/colorbox/border.png"
|
431
|
-
- "./coverage/assets/0.10.2/colorbox/controls.png"
|
432
|
-
- "./coverage/assets/0.10.2/colorbox/loading.gif"
|
433
|
-
- "./coverage/assets/0.10.2/colorbox/loading_background.png"
|
434
|
-
- "./coverage/assets/0.10.2/favicon_green.png"
|
435
|
-
- "./coverage/assets/0.10.2/favicon_red.png"
|
436
|
-
- "./coverage/assets/0.10.2/favicon_yellow.png"
|
437
|
-
- "./coverage/assets/0.10.2/loading.gif"
|
438
|
-
- "./coverage/assets/0.10.2/magnify.png"
|
439
|
-
- "./coverage/assets/0.10.2/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png"
|
440
|
-
- "./coverage/assets/0.10.2/smoothness/images/ui-bg_flat_75_ffffff_40x100.png"
|
441
|
-
- "./coverage/assets/0.10.2/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png"
|
442
|
-
- "./coverage/assets/0.10.2/smoothness/images/ui-bg_glass_65_ffffff_1x400.png"
|
443
|
-
- "./coverage/assets/0.10.2/smoothness/images/ui-bg_glass_75_dadada_1x400.png"
|
444
|
-
- "./coverage/assets/0.10.2/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png"
|
445
|
-
- "./coverage/assets/0.10.2/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png"
|
446
|
-
- "./coverage/assets/0.10.2/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
|
447
|
-
- "./coverage/assets/0.10.2/smoothness/images/ui-icons_222222_256x240.png"
|
448
|
-
- "./coverage/assets/0.10.2/smoothness/images/ui-icons_2e83ff_256x240.png"
|
449
|
-
- "./coverage/assets/0.10.2/smoothness/images/ui-icons_454545_256x240.png"
|
450
|
-
- "./coverage/assets/0.10.2/smoothness/images/ui-icons_888888_256x240.png"
|
451
|
-
- "./coverage/assets/0.10.2/smoothness/images/ui-icons_cd0a0a_256x240.png"
|
452
|
-
- "./coverage/index.html"
|
453
|
-
- "./devise-secure_password-1.0.0.gem"
|
454
354
|
- "./devise-secure_password.gemspec"
|
455
355
|
- "./docker-entrypoint.sh"
|
456
|
-
- "./gemfiles/
|
457
|
-
- "./gemfiles/
|
458
|
-
- "./gemfiles/
|
459
|
-
- "./gemfiles/
|
356
|
+
- "./gemfiles/rails_6_0.gemfile"
|
357
|
+
- "./gemfiles/rails_6_0.gemfile.lock"
|
358
|
+
- "./gemfiles/rails_6_1.gemfile"
|
359
|
+
- "./gemfiles/rails_6_1.gemfile.lock"
|
460
360
|
- "./lib/devise/secure_password.rb"
|
461
|
-
- "./lib/devise/secure_password/controllers/active_helpers.rb"
|
462
361
|
- "./lib/devise/secure_password/controllers/devise_helpers.rb"
|
463
|
-
- "./lib/devise/secure_password/
|
362
|
+
- "./lib/devise/secure_password/controllers/helpers.rb"
|
363
|
+
- "./lib/devise/secure_password/grammar.rb"
|
464
364
|
- "./lib/devise/secure_password/models/password_disallows_frequent_changes.rb"
|
465
365
|
- "./lib/devise/secure_password/models/password_disallows_frequent_reuse.rb"
|
466
366
|
- "./lib/devise/secure_password/models/password_has_required_content.rb"
|
@@ -472,14 +372,13 @@ files:
|
|
472
372
|
- "./lib/generators/devise/templates/README.txt"
|
473
373
|
- "./lib/generators/devise/templates/secure_password.rb"
|
474
374
|
- "./lib/support/string/character_counter.rb"
|
475
|
-
- "./pkg/devise-secure_password-
|
476
|
-
- "./pkg/devise-secure_password-
|
477
|
-
- "./pkg/devise-secure_password-1.0.5.gem"
|
375
|
+
- "./pkg/devise-secure_password-2.0.0.gem"
|
376
|
+
- "./pkg/devise-secure_password-2.0.1.gem"
|
478
377
|
homepage: https://github.com/valimail/devise-secure_password
|
479
378
|
licenses:
|
480
379
|
- MIT
|
481
380
|
metadata: {}
|
482
|
-
post_install_message:
|
381
|
+
post_install_message:
|
483
382
|
rdoc_options: []
|
484
383
|
require_paths:
|
485
384
|
- lib
|
@@ -487,16 +386,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
487
386
|
requirements:
|
488
387
|
- - ">="
|
489
388
|
- !ruby/object:Gem::Version
|
490
|
-
version: '2.
|
389
|
+
version: '2.7'
|
491
390
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
492
391
|
requirements:
|
493
392
|
- - ">="
|
494
393
|
- !ruby/object:Gem::Version
|
495
394
|
version: '0'
|
496
395
|
requirements: []
|
497
|
-
|
498
|
-
|
499
|
-
signing_key:
|
396
|
+
rubygems_version: 3.2.16
|
397
|
+
signing_key:
|
500
398
|
specification_version: 4
|
501
399
|
summary: A devise password policy enforcement extension.
|
502
400
|
test_files: []
|