Skip to content

Commit

Permalink
Automatically initialize proxy via stdlib override
Browse files Browse the repository at this point in the history
  • Loading branch information
syeopite committed Apr 29, 2024
1 parent eb8fcc9 commit 3b471ae
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 4 deletions.
34 changes: 34 additions & 0 deletions src/invidious/helpers/crystal_class_overrides.cr
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,40 @@ end
class HTTP::Client
property family : Socket::Family = Socket::Family::UNSPEC

# Override stdlib to automatically initialize proxy if configured
#
# Accurate as of crystal 1.10.1

def initialize(@host : String, port = nil, tls : TLSContext = nil)
check_host_only(@host)

{% if flag?(:without_openssl) %}
if tls
raise "HTTP::Client TLS is disabled because `-D without_openssl` was passed at compile time"
end
@tls = nil
{% else %}
@tls = case tls
when true
OpenSSL::SSL::Context::Client.new
when OpenSSL::SSL::Context::Client
tls
when false, nil
nil
end
{% end %}

@port = (port || (@tls ? 443 : 80)).to_i

self.proxy = make_configured_http_proxy_client() if CONFIG.http_proxy
end

def initialize(@io : IO, @host = "", @port = 80)
@reconnect = false

self.proxy = make_configured_http_proxy_client() if CONFIG.http_proxy
end

private def io
io = @io
return io if io
Expand Down
7 changes: 3 additions & 4 deletions src/invidious/yt_backend/connection_pool.cr
Original file line number Diff line number Diff line change
Expand Up @@ -26,13 +26,15 @@ struct YoutubeConnectionPool

def client(&block)
conn = pool.checkout
# Proxy needs to be reinstated every time we get a client from the pool
conn.proxy = make_configured_http_proxy_client() if CONFIG.http_proxy

begin
response = yield conn
rescue ex
conn.close
conn = HTTP::Client.new(url)

conn = HTTP::Client.new(url)
conn.proxy = make_configured_http_proxy_client() if CONFIG.http_proxy
conn.family = CONFIG.force_resolve
conn.family = Socket::Family::INET if conn.family == Socket::Family::UNSPEC
Expand All @@ -48,7 +50,6 @@ struct YoutubeConnectionPool
private def build_pool
DB::Pool(HTTP::Client).new(initial_pool_size: 0, max_pool_size: capacity, max_idle_pool_size: capacity, checkout_timeout: timeout) do
conn = HTTP::Client.new(url)

Check failure on line 52 in src/invidious/yt_backend/connection_pool.cr

View workflow job for this annotation

GitHub Actions / build - crystal: nightly, stable: false

instantiating 'HTTP::Client.new(URI)'
conn.proxy = make_configured_http_proxy_client() if CONFIG.http_proxy
conn.family = CONFIG.force_resolve
conn.family = Socket::Family::INET if conn.family == Socket::Family::UNSPEC
conn.before_request { |r| add_yt_headers(r) } if url.host == "www.youtube.com"
Expand All @@ -69,8 +70,6 @@ def make_client(url : URI, region = nil, force_resolve : Bool = false)
client.read_timeout = 10.seconds
client.connect_timeout = 10.seconds

client.proxy = make_configured_http_proxy_client() if CONFIG.http_proxy

return client
end

Expand Down

0 comments on commit 3b471ae

Please sign in to comment.