File: constants.rb

package info (click to toggle)
ruby-excon 0.112.0-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,232 kB
  • sloc: ruby: 7,855; makefile: 5
file content (177 lines) | stat: -rw-r--r-- 4,633 bytes parent folder | download
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