Module: Itsi::Server::CidrToRegex
- Included in:
- Config, Itsi::Server::Config::AllowList
- Defined in:
- lib/itsi/server/config/middleware/cidr_to_regex.rb
Instance Method Summary collapse
- #build_regex_from_parts(start_parts, end_parts) ⇒ Object
- #cidr_to_regex(cidr) ⇒ Object
- #part_to_range_regex(start_val, end_val) ⇒ Object
- #range_to_regex(range) ⇒ Object
Instance Method Details
#build_regex_from_parts(start_parts, end_parts) ⇒ Object
29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/itsi/server/config/middleware/cidr_to_regex.rb', line 29 def build_regex_from_parts(start_parts, end_parts) # Build regex for each octet parts = [] (0..3).each do |i| if start_parts[i] == end_parts[i] parts << Regexp.escape(start_parts[i].to_s) else parts << part_to_range_regex(start_parts[i], end_parts[i]) end end /^#{parts.join('\.')}$/ end |
#cidr_to_regex(cidr) ⇒ Object
43 44 45 46 |
# File 'lib/itsi/server/config/middleware/cidr_to_regex.rb', line 43 def cidr_to_regex(cidr) ip_range = IPAddr.new(cidr).to_range range_to_regex(ip_range) end |
#part_to_range_regex(start_val, end_val) ⇒ Object
16 17 18 19 20 21 22 23 24 25 26 27 |
# File 'lib/itsi/server/config/middleware/cidr_to_regex.rb', line 16 def part_to_range_regex(start_val, end_val) return start_val.to_s if start_val == end_val ranges = [] (start_val..end_val).each do |val| ranges << val.to_s end # Group similar patterns for compact regex ranges.map! { |v| Regexp.escape(v) } "(#{ranges.join('|')})" end |
#range_to_regex(range) ⇒ Object
6 7 8 9 10 11 12 13 14 |
# File 'lib/itsi/server/config/middleware/cidr_to_regex.rb', line 6 def range_to_regex(range) # Convert an IP range to regex by component start_ip, end_ip = range.begin, range.end start_parts = start_ip.to_s.split('.').map(&:to_i) end_parts = end_ip.to_s.split('.').map(&:to_i) build_regex_from_parts(start_parts, end_parts) end |