Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions src/http/client.zig
Original file line number Diff line number Diff line change
Expand Up @@ -236,7 +236,7 @@ pub const Client = struct {
return proxy_type == .connect;
}

fn isSimpleProxy(self: *const Client) bool {
fn isForwardProxy(self: *const Client) bool {
const proxy_type = self.proxy_type orelse return false;
return proxy_type == .forward;
}
Expand Down Expand Up @@ -711,7 +711,7 @@ pub const Request = struct {
}
}
}
if (self._request_secure and !self._proxy_secure) {
if (self._request_secure and !self._proxy_secure and !self._client.isForwardProxy()) {
Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is the only real change.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe we would need this to support a secure forward proxy (proxy_tls_config need to be put in scope)

Suggested change
if (self._request_secure and !self._proxy_secure and !self._client.isForwardProxy()) {
if (self._client.isForwardProxy()) {
if (self._proxy_secure) {
self._connection.?.tls = .{
.blocking = try tls.client(std.net.Stream{ .handle = socket }, proxy_tls_config),
};
}
} else if (self._request_secure and !self._proxy_secure) { // handles both insecure connect proxy and no proxy case
self._connection.?.tls = .{
.blocking = try tls.client(std.net.Stream{ .handle = socket }, tls_config),
};
}

Starting to think the refactored version would have been better here anyway.
#815 (comment)

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

now it's:

if (
    (self._request_secure and !self._proxy_secure) and
    (!self._client.isForwardProxy() or self._proxy_secure)
) {

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should the tls_config be changed to point to the right endpoint? if it is the tls for the proxy?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

or self._proxy_secure can never make the whole statement true since and !self._proxy_secure is also part of it

self._connection.?.tls = .{
.blocking = try tls.client(std.net.Stream{ .handle = socket }, tls_config),
};
Expand Down Expand Up @@ -851,7 +851,7 @@ pub const Request = struct {
try self.headers.append(arena, .{ .name = "User-Agent", .value = "Lightpanda/1.0" });
try self.headers.append(arena, .{ .name = "Accept", .value = "*/*" });

if (self._client.isSimpleProxy()) {
if (self._client.isForwardProxy()) {
if (self._client.proxy_auth) |proxy_auth| {
try self.headers.append(arena, .{ .name = "Proxy-Authorization", .value = proxy_auth });
}
Expand Down Expand Up @@ -934,7 +934,7 @@ pub const Request = struct {
}

// A simple http proxy to an https destination is made into tls by the proxy, we see it as a plain connection
const expect_tls = self._proxy_secure or (self._request_secure and !self._client.isSimpleProxy());
const expect_tls = self._proxy_secure or (self._request_secure and !self._client.isForwardProxy());
return self._client.connection_manager.get(expect_tls, self._connect_host, self._connect_port, blocking);
}

Expand All @@ -958,7 +958,7 @@ pub const Request = struct {
}

fn buildHeader(self: *Request) ![]const u8 {
const proxied = self._client.isSimpleProxy();
const proxied = self._client.isForwardProxy();

const buf = self._state.header_buf;
var fbs = std.io.fixedBufferStream(buf);
Expand Down