homura-runtime 0.3.3 → 0.3.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +7 -0
- data/lib/homura/runtime/version.rb +1 -1
- data/vendor/rack/auth/abstract/handler.rb +41 -0
- data/vendor/rack/auth/abstract/request.rb +51 -0
- data/vendor/rack/auth/basic.rb +58 -0
- data/vendor/rack/bad_request.rb +8 -0
- data/vendor/rack/body_proxy.rb +63 -0
- data/vendor/rack/builder.rb +315 -0
- data/vendor/rack/cascade.rb +67 -0
- data/vendor/rack/common_logger.rb +94 -0
- data/vendor/rack/conditional_get.rb +87 -0
- data/vendor/rack/config.rb +22 -0
- data/vendor/rack/constants.rb +68 -0
- data/vendor/rack/content_length.rb +34 -0
- data/vendor/rack/content_type.rb +33 -0
- data/vendor/rack/deflater.rb +159 -0
- data/vendor/rack/directory.rb +210 -0
- data/vendor/rack/etag.rb +71 -0
- data/vendor/rack/events.rb +172 -0
- data/vendor/rack/files.rb +224 -0
- data/vendor/rack/head.rb +25 -0
- data/vendor/rack/headers.rb +238 -0
- data/vendor/rack/lint.rb +1000 -0
- data/vendor/rack/lock.rb +29 -0
- data/vendor/rack/media_type.rb +42 -0
- data/vendor/rack/method_override.rb +56 -0
- data/vendor/rack/mime.rb +694 -0
- data/vendor/rack/mock.rb +3 -0
- data/vendor/rack/mock_request.rb +161 -0
- data/vendor/rack/mock_response.rb +147 -0
- data/vendor/rack/multipart/generator.rb +99 -0
- data/vendor/rack/multipart/parser.rb +586 -0
- data/vendor/rack/multipart/uploaded_file.rb +82 -0
- data/vendor/rack/multipart.rb +77 -0
- data/vendor/rack/null_logger.rb +48 -0
- data/vendor/rack/protection/authenticity_token.rb +256 -0
- data/vendor/rack/protection/base.rb +140 -0
- data/vendor/rack/protection/content_security_policy.rb +80 -0
- data/vendor/rack/protection/cookie_tossing.rb +77 -0
- data/vendor/rack/protection/escaped_params.rb +93 -0
- data/vendor/rack/protection/form_token.rb +25 -0
- data/vendor/rack/protection/frame_options.rb +39 -0
- data/vendor/rack/protection/http_origin.rb +43 -0
- data/vendor/rack/protection/ip_spoofing.rb +27 -0
- data/vendor/rack/protection/json_csrf.rb +60 -0
- data/vendor/rack/protection/path_traversal.rb +45 -0
- data/vendor/rack/protection/referrer_policy.rb +27 -0
- data/vendor/rack/protection/remote_referrer.rb +22 -0
- data/vendor/rack/protection/remote_token.rb +24 -0
- data/vendor/rack/protection/session_hijacking.rb +37 -0
- data/vendor/rack/protection/strict_transport.rb +41 -0
- data/vendor/rack/protection/version.rb +7 -0
- data/vendor/rack/protection/xss_header.rb +27 -0
- data/vendor/rack/protection.rb +58 -0
- data/vendor/rack/query_parser.rb +261 -0
- data/vendor/rack/recursive.rb +66 -0
- data/vendor/rack/reloader.rb +112 -0
- data/vendor/rack/request.rb +818 -0
- data/vendor/rack/response.rb +403 -0
- data/vendor/rack/rewindable_input.rb +116 -0
- data/vendor/rack/runtime.rb +35 -0
- data/vendor/rack/sendfile.rb +197 -0
- data/vendor/rack/session/abstract/id.rb +533 -0
- data/vendor/rack/session/constants.rb +13 -0
- data/vendor/rack/session/cookie.rb +292 -0
- data/vendor/rack/session/encryptor.rb +415 -0
- data/vendor/rack/session/pool.rb +76 -0
- data/vendor/rack/session/version.rb +10 -0
- data/vendor/rack/session.rb +12 -0
- data/vendor/rack/show_exceptions.rb +433 -0
- data/vendor/rack/show_status.rb +121 -0
- data/vendor/rack/static.rb +188 -0
- data/vendor/rack/tempfile_reaper.rb +44 -0
- data/vendor/rack/urlmap.rb +99 -0
- data/vendor/rack/utils.rb +631 -0
- data/vendor/rack/version.rb +17 -0
- data/vendor/rack.rb +66 -0
- metadata +76 -1
data/vendor/rack/lock.rb
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'body_proxy'
|
|
4
|
+
|
|
5
|
+
module Rack
|
|
6
|
+
# Rack::Lock locks every request inside a mutex, so that every request
|
|
7
|
+
# will effectively be executed synchronously.
|
|
8
|
+
class Lock
|
|
9
|
+
def initialize(app, mutex = Mutex.new)
|
|
10
|
+
@app, @mutex = app, mutex
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def call(env)
|
|
14
|
+
@mutex.lock
|
|
15
|
+
begin
|
|
16
|
+
response = @app.call(env)
|
|
17
|
+
returned = response << BodyProxy.new(response.pop) { unlock }
|
|
18
|
+
ensure
|
|
19
|
+
unlock unless returned
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
private
|
|
24
|
+
|
|
25
|
+
def unlock
|
|
26
|
+
@mutex.unlock
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Rack
|
|
4
|
+
# Rack::MediaType parse media type and parameters out of content_type string
|
|
5
|
+
|
|
6
|
+
class MediaType
|
|
7
|
+
SPLIT_PATTERN = /[;,]/
|
|
8
|
+
|
|
9
|
+
class << self
|
|
10
|
+
# The media type (type/subtype) portion of the CONTENT_TYPE header
|
|
11
|
+
# without any media type parameters. e.g., when CONTENT_TYPE is
|
|
12
|
+
# "text/plain;charset=utf-8", the media-type is "text/plain".
|
|
13
|
+
#
|
|
14
|
+
# For more information on the use of media types in HTTP, see:
|
|
15
|
+
# http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.7
|
|
16
|
+
# homura patch: Opal Strings are immutable, so #rstrip!/#downcase!/
|
|
17
|
+
# #strip! all raise. Rewritten to use non-mutating String forms.
|
|
18
|
+
def type(content_type)
|
|
19
|
+
return nil unless content_type && !content_type.empty?
|
|
20
|
+
type = content_type.split(SPLIT_PATTERN, 2).first
|
|
21
|
+
type.rstrip.downcase
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def params(content_type)
|
|
25
|
+
return {} if content_type.nil? || content_type.empty?
|
|
26
|
+
|
|
27
|
+
content_type.split(SPLIT_PATTERN)[1..-1].each_with_object({}) do |s, hsh|
|
|
28
|
+
s = s.strip
|
|
29
|
+
k, v = s.split('=', 2)
|
|
30
|
+
k = k.downcase
|
|
31
|
+
hsh[k] = strip_doublequotes(v)
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
private
|
|
36
|
+
|
|
37
|
+
def strip_doublequotes(str)
|
|
38
|
+
(str && str.start_with?('"') && str.end_with?('"')) ? str[1..-2] : str || ''
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative 'constants'
|
|
4
|
+
require_relative 'request'
|
|
5
|
+
require_relative 'utils'
|
|
6
|
+
|
|
7
|
+
module Rack
|
|
8
|
+
class MethodOverride
|
|
9
|
+
HTTP_METHODS = %w[GET HEAD PUT POST DELETE OPTIONS PATCH LINK UNLINK]
|
|
10
|
+
|
|
11
|
+
METHOD_OVERRIDE_PARAM_KEY = "_method"
|
|
12
|
+
HTTP_METHOD_OVERRIDE_HEADER = "HTTP_X_HTTP_METHOD_OVERRIDE"
|
|
13
|
+
ALLOWED_METHODS = %w[POST]
|
|
14
|
+
|
|
15
|
+
def initialize(app)
|
|
16
|
+
@app = app
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def call(env)
|
|
20
|
+
if allowed_methods.include?(env[REQUEST_METHOD])
|
|
21
|
+
method = method_override(env)
|
|
22
|
+
if HTTP_METHODS.include?(method)
|
|
23
|
+
env[RACK_METHODOVERRIDE_ORIGINAL_METHOD] = env[REQUEST_METHOD]
|
|
24
|
+
env[REQUEST_METHOD] = method
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
@app.call(env)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def method_override(env)
|
|
32
|
+
req = Request.new(env)
|
|
33
|
+
method = method_override_param(req) ||
|
|
34
|
+
env[HTTP_METHOD_OVERRIDE_HEADER]
|
|
35
|
+
begin
|
|
36
|
+
method.to_s.upcase
|
|
37
|
+
rescue ArgumentError
|
|
38
|
+
env[RACK_ERRORS].puts "Invalid string for method"
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
private
|
|
43
|
+
|
|
44
|
+
def allowed_methods
|
|
45
|
+
ALLOWED_METHODS
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def method_override_param(req)
|
|
49
|
+
req.POST[METHOD_OVERRIDE_PARAM_KEY] if req.form_data? || req.parseable_data?
|
|
50
|
+
rescue Utils::InvalidParameterError, Utils::ParameterTypeError, QueryParser::ParamsTooDeepError
|
|
51
|
+
req.get_header(RACK_ERRORS).puts "Invalid or incomplete POST params"
|
|
52
|
+
rescue EOFError
|
|
53
|
+
req.get_header(RACK_ERRORS).puts "Bad request content body"
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|