Sha256: dae17095e5d93126991369af758545a28ac2b20fc4da06c55ae9688d345844eb
Contents?: true
Size: 976 Bytes
Versions: 6
Compression:
Stored size: 976 Bytes
Contents
# frozen_string_literal: true require "ipaddr" module WebConsole class Permissions # IPv4 and IPv6 localhost should be always allowed. ALWAYS_PERMITTED_NETWORKS = %w( 127.0.0.0/8 ::1 ) def initialize(networks = nil) @networks = normalize_networks(networks).map(&method(:coerce_network_to_ipaddr)).uniq end def include?(network) @networks.any? { |permission| permission.include?(network.to_s) } rescue IPAddr::InvalidAddressError false end def to_s @networks.map(&method(:human_readable_ipaddr)).join(", ") end private def normalize_networks(networks) Array(networks).concat(ALWAYS_PERMITTED_NETWORKS) end def coerce_network_to_ipaddr(network) if network.is_a?(IPAddr) network else IPAddr.new(network) end end def human_readable_ipaddr(ipaddr) ipaddr.to_range.to_s.split("..").uniq.join("/") end end end
Version data entries
6 entries across 6 versions & 2 rubygems