mini_defender 0.7.0 → 0.7.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c72fe66d029b23db90c463a27a4ac69547465047620687c4d4da4f40e1471230
4
- data.tar.gz: 2dde879487e7f23b65f59ba8b3b3527490f15db79f9101cb523691e2ad532aae
3
+ metadata.gz: 6087ba7e6d274900a3564cb78628663c85d939a49622e267c53209025dab1be4
4
+ data.tar.gz: d5d62574de9aeb2e6f085169c0d4a438e309620ee1491e852f10768729e14926
5
5
  SHA512:
6
- metadata.gz: 864b6c2ad31fa2df0a9651e0e27907912f68a3b888afadc410e53ccca6604acc6f06ff9e6bbf1e1676d40cee7fd7dbcfa6e45c0d197861b8b11cd50be866a071
7
- data.tar.gz: ce39dd86774e6387d06e1e17a9584c43928b0069ec349d5392de19f2dd7e3afc42ee7f3c65761fa2d49037a30382691b5afd861628b7ac478a4fab92e16c09a4
6
+ metadata.gz: 6ff3182f0ab0b224c4d73ab417317602a7e1d42957a1c0daec63045970023620756cd38cde36dcc72fa96a374b04998690dda677a156e70cc2853330970b044a
7
+ data.tar.gz: f981f8b9eb2b9f8d7ed05e904f1ab3fdccff6a3beb93e20e14378399d65c61c863b16e1cfd534d18321cdae98c1ed7990f5e9f60c4b8085a2771914e836d1e15
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  ## [Unreleased]
2
2
 
3
+ ## [0.7.1] - 2025-09-07
4
+
5
+ - Add password rule
6
+
3
7
  ## [0.3.0] - 2023-04-05
4
8
 
5
9
  - Add cleansing for data before validation
@@ -1,19 +1,24 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class MiniDefender::Rules::Hostname < MiniDefender::Rule
4
- HOSTNAME_REGEX = /\A[a-zA-Z0-9][a-zA-Z0-9\-]{1,63}(\.[a-zA-Z0-9][a-zA-Z0-9\-]{1,63})+\.?\z/
4
+ HOSTNAME_REGEX = /\A([a-zA-Z0-9][a-zA-Z0-9\-]{,62})(\.[a-zA-Z0-9][a-zA-Z0-9\-]{0,62})+\.?\z/
5
5
 
6
6
  def self.signature
7
7
  'hostname'
8
8
  end
9
9
 
10
10
  def coerce(value)
11
- value.to_s.downcase.strip
11
+ value.to_s
12
+ .downcase
13
+ .strip
14
+ .gsub(/.\z/, '')
12
15
  end
13
16
 
14
17
  def passes?(attribute, value, validator)
15
18
  value = value.to_s.downcase.strip
16
- return false if value.length > 255
19
+ if value.length > 255
20
+ return false
21
+ end
17
22
 
18
23
  value.match?(HOSTNAME_REGEX)
19
24
  end
@@ -0,0 +1,70 @@
1
+ # frozen_string_literal: true
2
+
3
+ class MiniDefender::Rules::Password < MiniDefender::Rule
4
+ SPECIAL_CHARS = '!@#$%^&*()_+-=[]{}|;:,.<>?'.freeze
5
+ MIN_LENGTH = 8
6
+
7
+ def self.signature
8
+ 'password'
9
+ end
10
+
11
+ def passes?(attribute, value, validator)
12
+ unless value.is_a?(String)
13
+ return false
14
+ end
15
+
16
+ @missing_requirements = []
17
+
18
+ check_length(value)
19
+ check_lowercase(value)
20
+ check_uppercase(value)
21
+ check_digit(value)
22
+ check_special_char(value)
23
+
24
+ @missing_requirements.empty?
25
+ end
26
+
27
+ def message(attribute, value, validator)
28
+ unless value.is_a?(String)
29
+ return 'Password must be a string.'
30
+ end
31
+
32
+ if @missing_requirements.nil? || @missing_requirements.empty?
33
+ return 'Password is valid.'
34
+ end
35
+
36
+ "Password is missing: #{@missing_requirements.join(', ')}."
37
+ end
38
+
39
+ private
40
+
41
+ def check_length(value)
42
+ if value.length < MIN_LENGTH
43
+ @missing_requirements << "at least #{MIN_LENGTH} characters"
44
+ end
45
+ end
46
+
47
+ def check_lowercase(value)
48
+ unless value.match?(/[a-z]/)
49
+ @missing_requirements << 'at least one lowercase letter'
50
+ end
51
+ end
52
+
53
+ def check_uppercase(value)
54
+ unless value.match?(/[A-Z]/)
55
+ @missing_requirements << 'at least one uppercase letter'
56
+ end
57
+ end
58
+
59
+ def check_digit(value)
60
+ unless value.match?(/\d/)
61
+ @missing_requirements << 'at least one digit'
62
+ end
63
+ end
64
+
65
+ def check_special_char(value)
66
+ unless value.chars.any? { |char| SPECIAL_CHARS.include?(char) }
67
+ @missing_requirements << 'at least one special character'
68
+ end
69
+ end
70
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module MiniDefender
4
- VERSION = "0.7.0"
4
+ VERSION = "0.7.2"
5
5
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mini_defender
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.7.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ali Alhoshaiyan
8
8
  bindir: exe
9
9
  cert_chain: []
10
- date: 2025-07-17 00:00:00.000000000 Z
10
+ date: 2025-09-09 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: activesupport
@@ -211,6 +211,7 @@ files:
211
211
  - lib/mini_defender/rules/not_regex.rb
212
212
  - lib/mini_defender/rules/not_starting_with.rb
213
213
  - lib/mini_defender/rules/numeric.rb
214
+ - lib/mini_defender/rules/password.rb
214
215
  - lib/mini_defender/rules/present.rb
215
216
  - lib/mini_defender/rules/prohibited.rb
216
217
  - lib/mini_defender/rules/prohibited_if.rb