Class: WEBrick::HTTPServlet::FileHandler
- Inherits:
 - 
      AbstractServlet
      
        
- Object
 - AbstractServlet
 - WEBrick::HTTPServlet::FileHandler
 
 
- Defined in:
 - lib/webrick/httpservlet/filehandler.rb
 
Overview
Serves a directory including fancy indexing and a variety of other options.
Example:
server.mount('/assets', WEBrick::HTTPServlet::FileHandler,
             '/path/to/assets')
  Constant Summary collapse
- HandlerTable =
          
:nodoc:
 Hash.new
Class Method Summary collapse
- 
  
    
      .add_handler(suffix, handler)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
Allow custom handling of requests for files with
suffixby classhandler. - 
  
    
      .remove_handler(suffix)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
Remove custom handling of requests for files with
suffix. 
Instance Method Summary collapse
- #do_GET(req, res) ⇒ Object
 - #do_OPTIONS(req, res) ⇒ Object
 - #do_POST(req, res) ⇒ Object
 - 
  
    
      #initialize(server, root, options = {}, default = Config::FileHandler)  ⇒ FileHandler 
    
    
  
  
  
    constructor
  
  
  
  
  
  
  
    
Creates a FileHandler servlet on
serverthat serves files starting at directoryroot. - 
  
    
      #service(req, res)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
:stopdoc:.
 
Methods inherited from AbstractServlet
Constructor Details
#initialize(server, root, options = {}, default = Config::FileHandler) ⇒ FileHandler
Creates a FileHandler servlet on server that serves files starting at directory root
options may be a Hash containing keys from WEBrick::Config::FileHandler or true or false.
If options is true or false then :FancyIndexing is enabled or disabled respectively.
      203 204 205 206 207 208 209 210 211  | 
    
      # File 'lib/webrick/httpservlet/filehandler.rb', line 203 def initialize(server, root, ={}, default=Config::FileHandler) @config = server.config @logger = @config[:Logger] @root = File.(root) if == true || == false = { :FancyIndexing => } end @options = default.dup.update() end  | 
  
Class Method Details
.add_handler(suffix, handler) ⇒ Object
Allow custom handling of requests for files with suffix by class handler
      182 183 184  | 
    
      # File 'lib/webrick/httpservlet/filehandler.rb', line 182 def self.add_handler(suffix, handler) HandlerTable[suffix] = handler end  | 
  
.remove_handler(suffix) ⇒ Object
Remove custom handling of requests for files with suffix
      189 190 191  | 
    
      # File 'lib/webrick/httpservlet/filehandler.rb', line 189 def self.remove_handler(suffix) HandlerTable.delete(suffix) end  | 
  
Instance Method Details
#do_GET(req, res) ⇒ Object
      236 237 238 239 240  | 
    
      # File 'lib/webrick/httpservlet/filehandler.rb', line 236 def do_GET(req, res) unless exec_handler(req, res) set_dir_list(req, res) end end  | 
  
#do_OPTIONS(req, res) ⇒ Object
      248 249 250 251 252  | 
    
      # File 'lib/webrick/httpservlet/filehandler.rb', line 248 def do_OPTIONS(req, res) unless exec_handler(req, res) super(req, res) end end  | 
  
#do_POST(req, res) ⇒ Object
      242 243 244 245 246  | 
    
      # File 'lib/webrick/httpservlet/filehandler.rb', line 242 def do_POST(req, res) unless exec_handler(req, res) raise HTTPStatus::NotFound, "`#{req.path}' not found." end end  | 
  
#service(req, res) ⇒ Object
:stopdoc:
      215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234  | 
    
      # File 'lib/webrick/httpservlet/filehandler.rb', line 215 def service(req, res) # if this class is mounted on "/" and /~username is requested. # we're going to override path information 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  |