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 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177
|
# frozen_string_literal: true
module Excon
CR_NL = "\r\n"
DEFAULT_CA_FILE = '/etc/ssl/certs/ca-certificates.crt'
DEFAULT_CHUNK_SIZE = 1_048_576 # 1 megabyte
# avoid overwrite if somebody has redefined
CHUNK_SIZE = DEFAULT_CHUNK_SIZE unless const_defined?(:CHUNK_SIZE)
DEFAULT_REDIRECT_LIMIT = 10
DEFAULT_RETRY_LIMIT = 4
DEFAULT_RETRY_ERRORS = [
Excon::Error::Timeout,
Excon::Error::Socket,
Excon::Error::HTTPStatus
].freeze
FORCE_ENC = CR_NL.respond_to?(:force_encoding)
HTTP_1_1 = " HTTP/1.1\r\n"
HTTP_VERBS = %w[connect delete get head options patch post put trace].freeze
HTTPS = 'https'
NO_ENTITY = [204, 205, 304].freeze
REDACTED = 'REDACTED'
UNIX = 'unix'
USER_AGENT = "excon/#{VERSION}"
VERSIONS = "#{USER_AGENT} (#{RUBY_PLATFORM}) ruby/#{RUBY_VERSION}"
VALID_REQUEST_KEYS = %i[
allow_unstubbed_requests
body
chunk_size
debug_request
debug_response
dns_timeouts
headers
instrumentor
logger
method
middlewares
password
path
persistent
pipeline
query
read_timeout
request_block
resolv_resolver
response_block
stubs
timeout
user
versions
write_timeout
].freeze
VALID_CONNECTION_KEYS = VALID_REQUEST_KEYS + %i[
ciphers
client_key
client_key_data
client_key_pass
client_cert
client_cert_data
client_chain
client_chain_data
certificate
certificate_path
disable_proxy
private_key
private_key_path
connect_timeout
family
keepalive
host
hostname
omit_default_port
nonblock
reuseaddr
port
proxy
scheme
socket
ssl_ca_file
ssl_ca_path
ssl_cert_store
ssl_verify_callback
ssl_verify_peer
ssl_verify_peer_host
ssl_verify_hostname
ssl_version
ssl_min_version
ssl_max_version
ssl_security_level
ssl_proxy_headers
ssl_uri_schemes
tcp_nodelay
thread_safe_sockets
uri_parser
]
DEPRECATED_VALID_REQUEST_KEYS = {
captures: 'Mock',
expects: 'Expects',
idempotent: 'Idempotent',
instrumentor_name: 'Instrumentor',
mock: 'Mock',
retries_remaining: 'Idempotent', # referenced in Instrumentor, but only relevant with Idempotent
retry_errors: 'Idempotent',
retry_interval: 'Idempotent',
retry_limit: 'Idempotent' # referenced in Instrumentor, but only relevant with Idempotent
}.freeze
unless ::IO.const_defined?(:WaitReadable)
class ::IO
module WaitReadable; end
end
end
unless ::IO.const_defined?(:WaitWritable)
class ::IO
module WaitWritable; end
end
end
# these come last as they rely on the above
DEFAULTS = {
chunk_size: CHUNK_SIZE || DEFAULT_CHUNK_SIZE,
# see https://wiki.mozilla.org/Security/Server_Side_TLS#Intermediate_compatibility_.28default.29
# list provided then had DES related things sorted to the end
ciphers: 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:DES-CBC3-SHA:!DSS',
connect_timeout: 60,
debug_request: false,
debug_response: false,
dns_timeouts: nil, # nil allows Resolv::DNS default timeout value (see https://ruby-doc.org/3.2.2/stdlibs/resolv/Resolv/DNS.html#method-i-timeouts-3D)
headers: {
'User-Agent' => USER_AGENT,
'Accept' => '*/*'
},
idempotent: false,
instrumentor_name: 'excon',
middlewares: [
Excon::Middleware::ResponseParser,
Excon::Middleware::Expects,
Excon::Middleware::Idempotent,
Excon::Middleware::Instrumentor,
Excon::Middleware::Mock
],
mock: false,
nonblock: true,
omit_default_port: false,
persistent: false,
read_timeout: 60,
resolv_resolver: nil,
retry_errors: DEFAULT_RETRY_ERRORS,
retry_limit: DEFAULT_RETRY_LIMIT,
ssl_verify_peer: true,
ssl_uri_schemes: [HTTPS],
stubs: :global,
tcp_nodelay: false,
thread_safe_sockets: true,
timeout: nil,
uri_parser: URI,
versions: VERSIONS,
write_timeout: 60
}
end
|