diff options
Diffstat (limited to 'actionpack/lib/action_controller/vendor/rack-0.4.0/rack/file.rb')
-rw-r--r-- | actionpack/lib/action_controller/vendor/rack-0.4.0/rack/file.rb | 116 |
1 files changed, 0 insertions, 116 deletions
diff --git a/actionpack/lib/action_controller/vendor/rack-0.4.0/rack/file.rb b/actionpack/lib/action_controller/vendor/rack-0.4.0/rack/file.rb deleted file mode 100644 index afb213836c..0000000000 --- a/actionpack/lib/action_controller/vendor/rack-0.4.0/rack/file.rb +++ /dev/null @@ -1,116 +0,0 @@ -require 'time' - -module Rack - # Rack::File serves files below the +root+ given, according to the - # path info of the Rack request. - # - # Handlers can detect if bodies are a Rack::File, and use mechanisms - # like sendfile on the +path+. - - class File - attr_accessor :root - attr_accessor :path - - def initialize(root) - @root = root - end - - def call(env) - dup._call(env) - end - - F = ::File - - def _call(env) - if env["PATH_INFO"].include? ".." - body = "Forbidden\n" - size = body.respond_to?(:bytesize) ? body.bytesize : body.size - return [403, {"Content-Type" => "text/plain","Content-Length" => size.to_s}, [body]] - end - - @path = F.join(@root, Utils.unescape(env["PATH_INFO"])) - ext = F.extname(@path)[1..-1] - - if F.file?(@path) && F.readable?(@path) - [200, { - "Last-Modified" => F.mtime(@path).httpdate, - "Content-Type" => MIME_TYPES[ext] || "text/plain", - "Content-Length" => F.size(@path).to_s - }, self] - else - body = "File not found: #{env["PATH_INFO"]}\n" - size = body.respond_to?(:bytesize) ? body.bytesize : body.size - [404, {"Content-Type" => "text/plain", "Content-Length" => size.to_s}, [body]] - end - end - - def each - F.open(@path, "rb") { |file| - while part = file.read(8192) - yield part - end - } - end - - # :stopdoc: - # From WEBrick with some additions. - MIME_TYPES = { - "ai" => "application/postscript", - "asc" => "text/plain", - "avi" => "video/x-msvideo", - "bin" => "application/octet-stream", - "bmp" => "image/bmp", - "class" => "application/octet-stream", - "cer" => "application/pkix-cert", - "crl" => "application/pkix-crl", - "crt" => "application/x-x509-ca-cert", - #"crl" => "application/x-pkcs7-crl", - "css" => "text/css", - "dms" => "application/octet-stream", - "doc" => "application/msword", - "dvi" => "application/x-dvi", - "eps" => "application/postscript", - "etx" => "text/x-setext", - "exe" => "application/octet-stream", - "gif" => "image/gif", - "htm" => "text/html", - "html" => "text/html", - "jpe" => "image/jpeg", - "jpeg" => "image/jpeg", - "jpg" => "image/jpeg", - "js" => "text/javascript", - "lha" => "application/octet-stream", - "lzh" => "application/octet-stream", - "mov" => "video/quicktime", - "mp3" => "audio/mpeg", - "mpe" => "video/mpeg", - "mpeg" => "video/mpeg", - "mpg" => "video/mpeg", - "pbm" => "image/x-portable-bitmap", - "pdf" => "application/pdf", - "pgm" => "image/x-portable-graymap", - "png" => "image/png", - "pnm" => "image/x-portable-anymap", - "ppm" => "image/x-portable-pixmap", - "ppt" => "application/vnd.ms-powerpoint", - "ps" => "application/postscript", - "qt" => "video/quicktime", - "ras" => "image/x-cmu-raster", - "rb" => "text/plain", - "rd" => "text/plain", - "rtf" => "application/rtf", - "sgm" => "text/sgml", - "sgml" => "text/sgml", - "tif" => "image/tiff", - "tiff" => "image/tiff", - "txt" => "text/plain", - "xbm" => "image/x-xbitmap", - "xls" => "application/vnd.ms-excel", - "xml" => "text/xml", - "xpm" => "image/x-xpixmap", - "xwd" => "image/x-xwindowdump", - "zip" => "application/zip", - } - # :startdoc: - end -end |