/usr/lib/ruby/vendor_ruby/merb-core/rack/middleware/static.rb is in ruby-merb-core 1.1.3+dfsg-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | module Merb
module Rack
class Static < Merb::Rack::Middleware
# :api: private
def initialize(app,directory)
super(app)
@static_server = ::Rack::File.new(directory)
end
# :api: plugin
def call(env)
path = if env[Merb::Const::PATH_INFO]
env[Merb::Const::PATH_INFO].chomp(Merb::Const::SLASH)
else
Merb::Const::EMPTY_STRING
end
cached_path = (path.empty? ? 'index' : path) + '.html'
if file_exist?(path) && env[Merb::Const::REQUEST_METHOD] =~ /GET|HEAD/ # Serve the file if it's there and the request method is GET or HEAD
serve_static(env)
elsif file_exist?(cached_path) && env[Merb::Const::REQUEST_METHOD] =~ /GET|HEAD/ # Serve the page cache if it's there and the request method is GET or HEAD
env[Merb::Const::PATH_INFO] = cached_path
serve_static(env)
elsif path =~ /favicon\.ico/
return [404, { Merb::Const::CONTENT_TYPE => Merb::Const::TEXT_SLASH_HTML }, "404 Not Found."]
else
@app.call(env)
end
end
# ==== Parameters
# path<String>:: The path to the file relative to the server root.
#
# ==== Returns
# Boolean:: True if file exists under the server root and is readable.
#
# :api: private
def file_exist?(path)
full_path = ::File.join(@static_server.root, ::Merb::Parse.unescape(path))
::File.file?(full_path) && ::File.readable?(full_path)
end
# ==== Parameters
# env<Hash>:: Environment variables to pass on to the server.
#
# :api: private
def serve_static(env)
env[Merb::Const::PATH_INFO] = ::Merb::Parse.unescape(env[Merb::Const::PATH_INFO])
@static_server.call(env)
end
end
end
end
|