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.
Files changed (79) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +7 -0
  3. data/lib/homura/runtime/version.rb +1 -1
  4. data/vendor/rack/auth/abstract/handler.rb +41 -0
  5. data/vendor/rack/auth/abstract/request.rb +51 -0
  6. data/vendor/rack/auth/basic.rb +58 -0
  7. data/vendor/rack/bad_request.rb +8 -0
  8. data/vendor/rack/body_proxy.rb +63 -0
  9. data/vendor/rack/builder.rb +315 -0
  10. data/vendor/rack/cascade.rb +67 -0
  11. data/vendor/rack/common_logger.rb +94 -0
  12. data/vendor/rack/conditional_get.rb +87 -0
  13. data/vendor/rack/config.rb +22 -0
  14. data/vendor/rack/constants.rb +68 -0
  15. data/vendor/rack/content_length.rb +34 -0
  16. data/vendor/rack/content_type.rb +33 -0
  17. data/vendor/rack/deflater.rb +159 -0
  18. data/vendor/rack/directory.rb +210 -0
  19. data/vendor/rack/etag.rb +71 -0
  20. data/vendor/rack/events.rb +172 -0
  21. data/vendor/rack/files.rb +224 -0
  22. data/vendor/rack/head.rb +25 -0
  23. data/vendor/rack/headers.rb +238 -0
  24. data/vendor/rack/lint.rb +1000 -0
  25. data/vendor/rack/lock.rb +29 -0
  26. data/vendor/rack/media_type.rb +42 -0
  27. data/vendor/rack/method_override.rb +56 -0
  28. data/vendor/rack/mime.rb +694 -0
  29. data/vendor/rack/mock.rb +3 -0
  30. data/vendor/rack/mock_request.rb +161 -0
  31. data/vendor/rack/mock_response.rb +147 -0
  32. data/vendor/rack/multipart/generator.rb +99 -0
  33. data/vendor/rack/multipart/parser.rb +586 -0
  34. data/vendor/rack/multipart/uploaded_file.rb +82 -0
  35. data/vendor/rack/multipart.rb +77 -0
  36. data/vendor/rack/null_logger.rb +48 -0
  37. data/vendor/rack/protection/authenticity_token.rb +256 -0
  38. data/vendor/rack/protection/base.rb +140 -0
  39. data/vendor/rack/protection/content_security_policy.rb +80 -0
  40. data/vendor/rack/protection/cookie_tossing.rb +77 -0
  41. data/vendor/rack/protection/escaped_params.rb +93 -0
  42. data/vendor/rack/protection/form_token.rb +25 -0
  43. data/vendor/rack/protection/frame_options.rb +39 -0
  44. data/vendor/rack/protection/http_origin.rb +43 -0
  45. data/vendor/rack/protection/ip_spoofing.rb +27 -0
  46. data/vendor/rack/protection/json_csrf.rb +60 -0
  47. data/vendor/rack/protection/path_traversal.rb +45 -0
  48. data/vendor/rack/protection/referrer_policy.rb +27 -0
  49. data/vendor/rack/protection/remote_referrer.rb +22 -0
  50. data/vendor/rack/protection/remote_token.rb +24 -0
  51. data/vendor/rack/protection/session_hijacking.rb +37 -0
  52. data/vendor/rack/protection/strict_transport.rb +41 -0
  53. data/vendor/rack/protection/version.rb +7 -0
  54. data/vendor/rack/protection/xss_header.rb +27 -0
  55. data/vendor/rack/protection.rb +58 -0
  56. data/vendor/rack/query_parser.rb +261 -0
  57. data/vendor/rack/recursive.rb +66 -0
  58. data/vendor/rack/reloader.rb +112 -0
  59. data/vendor/rack/request.rb +818 -0
  60. data/vendor/rack/response.rb +403 -0
  61. data/vendor/rack/rewindable_input.rb +116 -0
  62. data/vendor/rack/runtime.rb +35 -0
  63. data/vendor/rack/sendfile.rb +197 -0
  64. data/vendor/rack/session/abstract/id.rb +533 -0
  65. data/vendor/rack/session/constants.rb +13 -0
  66. data/vendor/rack/session/cookie.rb +292 -0
  67. data/vendor/rack/session/encryptor.rb +415 -0
  68. data/vendor/rack/session/pool.rb +76 -0
  69. data/vendor/rack/session/version.rb +10 -0
  70. data/vendor/rack/session.rb +12 -0
  71. data/vendor/rack/show_exceptions.rb +433 -0
  72. data/vendor/rack/show_status.rb +121 -0
  73. data/vendor/rack/static.rb +188 -0
  74. data/vendor/rack/tempfile_reaper.rb +44 -0
  75. data/vendor/rack/urlmap.rb +99 -0
  76. data/vendor/rack/utils.rb +631 -0
  77. data/vendor/rack/version.rb +17 -0
  78. data/vendor/rack.rb +66 -0
  79. metadata +76 -1
@@ -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