In Files

  • webrick/httpservlet/filehandler.rb

WEBrick::HTTPServlet::FileHandler

Serves files from a directory

Constants

HandlerTable

Public Class Methods

add_handler(suffix, handler) click to toggle source

Allow custom handling of requests for files with suffix by class handler

 
               # File webrick/httpservlet/filehandler.rb, line 138
def self.add_handler(suffix, handler)
  HandlerTable[suffix] = handler
end
            
new(server, root, options={}, default=Config::FileHandler) click to toggle source

Creates a FileHandler servlet on server that serves files starting at directory root

If options is a Hash the following keys are allowed:

:AcceptableLanguages

Array of languages allowed for accept-language

:DirectoryCallback

Allows preprocessing of directory requests

:FancyIndexing

If true, show an index for directories

:FileCallback

Allows preprocessing of file requests

:HandlerCallback

Allows preprocessing of requests

:HandlerTable

Maps file suffixes to file handlers. DefaultFileHandler is used by default but any servlet can be used.

:NondisclosureName

Do not show files matching this array of globs

:UserDir

Directory inside ~user to serve content from for /~user requests. Only works if mounted on /

If options is true or false then :FancyIndexing is enabled or disabled respectively.

 
               # File webrick/httpservlet/filehandler.rb, line 170
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
            
remove_handler(suffix) click to toggle source

Remove custom handling of requests for files with suffix

 
               # File webrick/httpservlet/filehandler.rb, line 145
def self.remove_handler(suffix)
  HandlerTable.delete(suffix)
end
            

Public Instance Methods

do_GET(req, res) click to toggle source
 
               # File webrick/httpservlet/filehandler.rb, line 201
def do_GET(req, res)
  unless exec_handler(req, res)
    set_dir_list(req, res)
  end
end
            
do_OPTIONS(req, res) click to toggle source
 
               # File webrick/httpservlet/filehandler.rb, line 213
def do_OPTIONS(req, res)
  unless exec_handler(req, res)
    super(req, res)
  end
end
            
do_POST(req, res) click to toggle source
 
               # File webrick/httpservlet/filehandler.rb, line 207
def do_POST(req, res)
  unless exec_handler(req, res)
    raise HTTPStatus::NotFound, "`#{req.path}' not found."
  end
end
            
service(req, res) click to toggle source
 
               # File webrick/httpservlet/filehandler.rb, line 180
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
            

Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.

If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.

If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.

If you want to help improve the Ruby documentation, please visit Documenting-ruby.org.

blog comments powered by Disqus