# 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 %r|^(/~([^/]+))| =~ 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