WEBrickでファイル公開+IPアドレスでアクセス制限

↑これにアクセス制限を付けたい。

#!/usr/bin/env ruby
# -*- coding: utf-8 -*-

require "webrick"

def hostname_white? hostname
  /^white_hostname_pattern$/ =~ hostname
end

def address_white? address
  /^127.0.0.1$/ =~ address or
  /^192\.168\..+/ =~ address
end


document_root = ARGV[0] || "./"

server = WEBrick::HTTPServer.new(
  # :DoNotReverseLookup => true,
  :DocumentRoot => document_root,
  :BindAddress => '0.0.0.0',
  :Port => 10081
)

server.mount_proc('/') do |req, res|
  peer_hostname = req.peeraddr[2] #=> "localhost"
  peer_address  = req.peeraddr[3] #=> "127.0.0.1"

  if not address_white?(peer_address)
  # IPアドレスが不正な場合アクセス拒否
    $stderr.puts "access denied address=#{peer_address}"
    raise WEBrick::HTTPStatus::Forbidden
  end

  if peer_hostname != peer_address
    # ホスト名が不正な場合アクセス拒否
    if not hostname_white?(peer_hostname)
      $stderr.puts "access denied hostname=#{peer_hostname}"
      raise WEBrick::HTTPStatus::Forbidden
    end
  end

  WEBrick::HTTPServlet::FileHandler.
    new(server, document_root, { :FancyIndexing => true }).
    service(req, res)
end

Signal.trap(:INT){ server.shutdown }
server.start