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.
Files changed (63) hide show
  1. checksums.yaml +5 -5
  2. data/Changelog.md +39 -4
  3. data/Dockerfile +1 -1
  4. data/Dockerfile.prev +3 -3
  5. data/Gemfile +2 -1
  6. data/Gemfile.lock +218 -214
  7. data/README.md +33 -10
  8. data/app/controllers/devise/passwords_with_policy_controller.rb +55 -14
  9. data/app/views/devise/passwords_with_policy/edit.html.erb +5 -1
  10. data/config/locales/en.yml +51 -0
  11. data/devise-secure_password.gemspec +22 -23
  12. data/gemfiles/rails_6_0.gemfile +57 -0
  13. data/gemfiles/rails_6_0.gemfile.lock +347 -0
  14. data/gemfiles/rails_6_1.gemfile +57 -0
  15. data/gemfiles/rails_6_1.gemfile.lock +352 -0
  16. data/lib/devise/secure_password.rb +4 -9
  17. data/lib/devise/secure_password/controllers/devise_helpers.rb +4 -50
  18. data/lib/devise/secure_password/controllers/helpers.rb +58 -0
  19. data/lib/devise/secure_password/grammar.rb +13 -0
  20. data/lib/devise/secure_password/models/password_disallows_frequent_changes.rb +3 -1
  21. data/lib/devise/secure_password/models/password_disallows_frequent_reuse.rb +1 -0
  22. data/lib/devise/secure_password/models/password_has_required_content.rb +53 -15
  23. data/lib/devise/secure_password/models/password_requires_regular_updates.rb +0 -2
  24. data/lib/devise/secure_password/version.rb +1 -1
  25. data/lib/support/string/character_counter.rb +3 -1
  26. data/pkg/devise-secure_password-2.0.0.gem +0 -0
  27. data/pkg/devise-secure_password-2.0.1.gem +0 -0
  28. metadata +67 -169
  29. data/coverage/assets/0.10.2/application.css +0 -799
  30. data/coverage/assets/0.10.2/application.js +0 -1707
  31. data/coverage/assets/0.10.2/colorbox/border.png +0 -0
  32. data/coverage/assets/0.10.2/colorbox/controls.png +0 -0
  33. data/coverage/assets/0.10.2/colorbox/loading.gif +0 -0
  34. data/coverage/assets/0.10.2/colorbox/loading_background.png +0 -0
  35. data/coverage/assets/0.10.2/favicon_green.png +0 -0
  36. data/coverage/assets/0.10.2/favicon_red.png +0 -0
  37. data/coverage/assets/0.10.2/favicon_yellow.png +0 -0
  38. data/coverage/assets/0.10.2/loading.gif +0 -0
  39. data/coverage/assets/0.10.2/magnify.png +0 -0
  40. data/coverage/assets/0.10.2/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  41. data/coverage/assets/0.10.2/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  42. data/coverage/assets/0.10.2/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  43. data/coverage/assets/0.10.2/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  44. data/coverage/assets/0.10.2/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  45. data/coverage/assets/0.10.2/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  46. data/coverage/assets/0.10.2/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  47. data/coverage/assets/0.10.2/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  48. data/coverage/assets/0.10.2/smoothness/images/ui-icons_222222_256x240.png +0 -0
  49. data/coverage/assets/0.10.2/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  50. data/coverage/assets/0.10.2/smoothness/images/ui-icons_454545_256x240.png +0 -0
  51. data/coverage/assets/0.10.2/smoothness/images/ui-icons_888888_256x240.png +0 -0
  52. data/coverage/assets/0.10.2/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  53. data/coverage/index.html +0 -4115
  54. data/devise-secure_password-1.0.0.gem +0 -0
  55. data/gemfiles/rails-5_0_6.gemfile +0 -17
  56. data/gemfiles/rails-5_0_6.gemfile.lock +0 -286
  57. data/gemfiles/rails-5_1_4.gemfile +0 -16
  58. data/gemfiles/rails-5_1_4.gemfile.lock +0 -282
  59. data/lib/devise/secure_password/controllers/active_helpers.rb +0 -45
  60. data/lib/devise/secure_password/hooks/password_requires_regular_updates.rb +0 -5
  61. data/pkg/devise-secure_password-1.0.3.gem +0 -0
  62. data/pkg/devise-secure_password-1.0.4.gem +0 -0
  63. 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: distance_of_time_in_words(self.class.password_minimum_age)
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
@@ -54,6 +54,7 @@ module Devise
54
54
 
55
55
  def dirty_password?
56
56
  return false unless password_required?
57
+
57
58
  if Rails.version > '5.1'
58
59
  saved_change_to_encrypted_password?
59
60
  else
@@ -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
- self.password_confirmation ||= ''
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
- error_string = if type_total < required_char_counts_for_type(type)[:min]
50
- error_string_for_length(type, :min)
51
- elsif type_total > required_char_counts_for_type(type)[:max]
52
- error_string_for_length(type, :max)
53
- end
54
- error_string
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(type, threshold = :min)
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.to_s, subject: 'character'.pluralize(count))
66
- error_string + ' ' + dict_for_type(type)
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(total, 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: total,
73
- subject: 'character'.pluralize(total)
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
@@ -3,8 +3,6 @@ module Devise
3
3
  module PasswordRequiresRegularUpdates
4
4
  extend ActiveSupport::Concern
5
5
 
6
- require 'devise/secure_password/hooks/password_requires_regular_updates'
7
-
8
6
  class ConfigurationError < RuntimeError; end
9
7
 
10
8
  included do
@@ -1,5 +1,5 @@
1
1
  module Devise
2
2
  module SecurePassword
3
- VERSION = '1.0.6'.freeze
3
+ VERSION = '2.0.1'.freeze
4
4
  end
5
5
  end
@@ -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.split('').each { |c| tally_character(c) }
22
+ string.chars.each { |c| tally_character(c) }
23
+ @count_hash[:length][:count] = string.length
22
24
 
23
25
  @count_hash
24
26
  end
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: 1.0.6
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: 2018-05-04 00:00:00.000000000 Z
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: 6.0.0
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: 6.0.0
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: 1.16.1
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: 1.16.1
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: 2.16.1
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: 2.16.1
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: 1.6.2
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: 1.6.2
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.1.4
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.1.4
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: rspec_junit_formatter
222
+ name: rubocop
265
223
  requirement: !ruby/object:Gem::Requirement
266
224
  requirements:
267
- - - "~>"
225
+ - - ">="
268
226
  - !ruby/object:Gem::Version
269
- version: '0.3'
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: '0.3'
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: 0.49.0
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: 0.49.0
248
+ version: 2.3.2
291
249
  - !ruby/object:Gem::Dependency
292
- name: ruby2ruby
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: 2.4.0
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: 2.4.0
262
+ version: 1.35.0
311
263
  - !ruby/object:Gem::Dependency
312
- name: sass-rails
264
+ name: ruby2ruby
313
265
  requirement: !ruby/object:Gem::Requirement
314
266
  requirements:
315
- - - "~>"
267
+ - - ">="
316
268
  - !ruby/object:Gem::Version
317
- version: '5.0'
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: '5.0'
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.15.1
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.15.1
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/rails-5_0_6.gemfile"
457
- - "./gemfiles/rails-5_0_6.gemfile.lock"
458
- - "./gemfiles/rails-5_1_4.gemfile"
459
- - "./gemfiles/rails-5_1_4.gemfile.lock"
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/hooks/password_requires_regular_updates.rb"
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-1.0.3.gem"
476
- - "./pkg/devise-secure_password-1.0.4.gem"
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.4'
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
- rubyforge_project:
498
- rubygems_version: 2.6.14
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: []