X7ROOT File Manager
Current Path:
/opt/alt/ruby33/share/gems/gems/rack-3.0.8/lib/rack
opt
/
alt
/
ruby33
/
share
/
gems
/
gems
/
rack-3.0.8
/
lib
/
rack
/
ðŸ“
..
ðŸ“
auth
📄
body_proxy.rb
(1.3 KB)
📄
builder.rb
(8.56 KB)
📄
cascade.rb
(2.25 KB)
📄
chunked.rb
(3.3 KB)
📄
common_logger.rb
(3.12 KB)
📄
conditional_get.rb
(2.99 KB)
📄
config.rb
(410 B)
📄
constants.rb
(2.47 KB)
📄
content_length.rb
(806 B)
📄
content_type.rb
(695 B)
📄
deflater.rb
(5.51 KB)
📄
directory.rb
(6.02 KB)
📄
etag.rb
(1.87 KB)
📄
events.rb
(4.8 KB)
📄
file.rb
(167 B)
📄
files.rb
(5.66 KB)
📄
head.rb
(524 B)
📄
headers.rb
(2.96 KB)
📄
lint.rb
(36.09 KB)
📄
lock.rb
(573 B)
📄
logger.rb
(414 B)
📄
media_type.rb
(1.4 KB)
📄
method_override.rb
(1.45 KB)
📄
mime.rb
(32.69 KB)
📄
mock.rb
(63 B)
📄
mock_request.rb
(5.37 KB)
📄
mock_response.rb
(3.28 KB)
ðŸ“
multipart
📄
multipart.rb
(1.17 KB)
📄
null_logger.rb
(1.18 KB)
📄
query_parser.rb
(8.37 KB)
📄
recursive.rb
(1.78 KB)
📄
reloader.rb
(3.02 KB)
📄
request.rb
(24.57 KB)
📄
response.rb
(10.72 KB)
📄
rewindable_input.rb
(3.12 KB)
📄
runtime.rb
(870 B)
📄
sendfile.rb
(5.55 KB)
📄
show_exceptions.rb
(13.73 KB)
📄
show_status.rb
(3.58 KB)
📄
static.rb
(6 KB)
📄
tempfile_reaper.rb
(778 B)
📄
urlmap.rb
(2.81 KB)
📄
utils.rb
(21.1 KB)
📄
version.rb
(958 B)
Editing: etag.rb
# frozen_string_literal: true require 'digest/sha2' require_relative 'constants' require_relative 'utils' module Rack # Automatically sets the etag header on all String bodies. # # The etag header is skipped if etag or last-modified headers are sent or if # a sendfile body (body.responds_to :to_path) is given (since such cases # should be handled by apache/nginx). # # On initialization, you can pass two parameters: a cache-control directive # used when etag is absent and a directive when it is present. The first # defaults to nil, while the second defaults to "max-age=0, private, must-revalidate" class ETag ETAG_STRING = Rack::ETAG DEFAULT_CACHE_CONTROL = "max-age=0, private, must-revalidate" def initialize(app, no_cache_control = nil, cache_control = DEFAULT_CACHE_CONTROL) @app = app @cache_control = cache_control @no_cache_control = no_cache_control end def call(env) status, headers, body = response = @app.call(env) if etag_status?(status) && body.respond_to?(:to_ary) && !skip_caching?(headers) body = body.to_ary digest = digest_body(body) headers[ETAG_STRING] = %(W/"#{digest}") if digest end unless headers[CACHE_CONTROL] if digest headers[CACHE_CONTROL] = @cache_control if @cache_control else headers[CACHE_CONTROL] = @no_cache_control if @no_cache_control end end response end private def etag_status?(status) status == 200 || status == 201 end def skip_caching?(headers) headers.key?(ETAG_STRING) || headers.key?('last-modified') end def digest_body(body) digest = nil body.each do |part| (digest ||= Digest::SHA256.new) << part unless part.empty? end digest && digest.hexdigest.byteslice(0,32) end end end
Upload File
Create Folder