# File webrick/httpservlet/filehandler.rb, line 131
def self.add_handler(suffix, handler)
HandlerTable[suffix] = handler
end
# File webrick/httpservlet/filehandler.rb, line 139
def initialize(server, root, options={}, default=Config::FileHandler)
@config = server.config
@logger = @config[:Logger]
@root = File.expand_path(root)
if options == true || options == false
options = { :FancyIndexing => options }
end
@options = default.dup.update(options)
end
# File webrick/httpservlet/filehandler.rb, line 170
def do_GET(req, res)
unless exec_handler(req, res)
set_dir_list(req, res)
end
end
# File webrick/httpservlet/filehandler.rb, line 182
def do_OPTIONS(req, res)
unless exec_handler(req, res)
super(req, res)
end
end
# File webrick/httpservlet/filehandler.rb, line 176
def do_POST(req, res)
unless exec_handler(req, res)
raise HTTPStatus::NotFound, "`#{req.path}' not found."
end
end
# File webrick/httpservlet/filehandler.rb, line 149
def service(req, res)
# if this class is mounted on "/" and /~username is requested.
# we're going to override path informations before invoking service.
if defined?(Etc) && @options[:UserDir] && req.script_name.empty?
if %^(/~([^/]+))| =~ req.path_info
script_name, user = $1, $2
path_info = $'
begin
passwd = Etc::getpwnam(user)
@root = File::join(passwd.dir, @options[:UserDir])
req.script_name = script_name
req.path_info = path_info
rescue
@logger.debug "#{self.class}#do_GET: getpwnam(#{user}) failed"
end
end
end
prevent_directory_traversal(req, res)
super(req, res)
end