class Dizby::Access::ControlList

Public Class Methods

new(order = :deny_allow) click to toggle source

:allow_deny if denied, deny else if allowed, allow else, deny

# File lib/dizby/access/control_list.rb, line 23
def initialize(order = :deny_allow)
  @order = order
  @deny = List.new
  @allow = List.new
end

Public Instance Methods

allow_addr?(addr) click to toggle source
# File lib/dizby/access/control_list.rb, line 33
def allow_addr?(addr)
  case @order
  when :deny_allow
    deny_allow?(addr)
  when :allow_deny
    allow_deny?(addr)
  else
    false
  end
end
allow_socket?(soc) click to toggle source
# File lib/dizby/access/control_list.rb, line 29
def allow_socket?(soc)
  allow_addr?(soc.peeraddr)
end
install_list(list) click to toggle source
# File lib/dizby/access/control_list.rb, line 44
def install_list(list)
  Hash[*list].each do |permission, domain|
    domain = Entry.new(domain)
    case permission.downcase
    when 'allow'
      @allow.push(domain)
    when 'deny'
      @deny.push(domain)
    else
      raise ArgumentError, "Invalid ACL entry #{list}"
    end
  end
end

Private Instance Methods

allow_deny?(addr) click to toggle source
# File lib/dizby/access/control_list.rb, line 66
def allow_deny?(addr)
  return false if @deny.matches?(addr)
  return true if @allow.matches?(addr)
  false
end
deny_allow?(addr) click to toggle source
# File lib/dizby/access/control_list.rb, line 60
def deny_allow?(addr)
  return true if @allow.matches?(addr)
  return false if @deny.matches?(addr)
  true
end