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
|
# File 'lib/httpx/plugins/proxy/ssh.rb', line 22
def request(*args, **options)
raise ArgumentError, "must perform at least one request" if args.empty?
requests = args.first.is_a?(Request) ? args : build_requests(*args, options)
request = requests.first or return super
request_options = request.options
return super unless request_options.proxy
ssh_options = request_options.proxy
ssh_uris = ssh_options.delete(:uri)
ssh_uri = URI.parse(ssh_uris.shift)
return super unless ssh_uri.scheme == "ssh"
ssh_username = ssh_options.delete(:username)
ssh_options[:port] ||= ssh_uri.port || 22
if request_options.debug
ssh_options[:verbose] = request_options.debug_level == 2 ? :debug : :info
end
request_uri = URI(requests.first.uri)
@_gateway = Net::SSH::Gateway.new(ssh_uri.host, ssh_username, ssh_options)
begin
@_gateway.open(request_uri.host, request_uri.port) do |local_port|
io = build_gateway_socket(local_port, request_uri, request_options)
super(*args, **options.merge(io: io))
end
ensure
@_gateway.shutdown!
end
end
|