/usr/lib/ruby/vendor_ruby/rack/cache/key.rb is in ruby-rack-cache 1.2-4.
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 | require 'rack/utils'
module Rack::Cache
class Key
include Rack::Utils
# Implement .call, since it seems like the "Rack-y" thing to do. Plus, it
# opens the door for cache key generators to just be blocks.
def self.call(request)
new(request).generate
end
def initialize(request)
@request = request
end
# Generate a normalized cache key for the request.
def generate
parts = []
parts << @request.scheme << "://"
parts << @request.host
if @request.scheme == "https" && @request.port != 443 ||
@request.scheme == "http" && @request.port != 80
parts << ":" << @request.port.to_s
end
parts << @request.script_name
parts << @request.path_info
if qs = query_string
parts << "?"
parts << qs
end
parts.join
end
private
# Build a normalized query string by alphabetizing all keys/values
# and applying consistent escaping.
def query_string
return nil if @request.query_string.nil?
@request.query_string.split(/[&;] */n).
map { |p| unescape(p).split('=', 2) }.
sort.
map { |k,v| "#{escape(k)}=#{escape(v)}" }.
join('&')
end
end
end
|