@@ -59,15 +59,15 @@ pub const ProxyAuth = union(enum) {
5959 var encoder = std .base64 .standard .Encoder ;
6060 const size = encoder .calcSize (auth .user_pass .len );
6161 var buffer = try allocator .alloc (u8 , size + prefix .len );
62- std . mem . copyForwards ( u8 , buffer , prefix );
62+ @memcpy ( buffer [0 .. prefix . len ] , prefix );
6363 _ = std .base64 .standard .Encoder .encode (buffer [prefix .len .. ], auth .user_pass );
6464 return buffer ;
6565 },
6666 .bearer = > | * auth | {
6767 const prefix = "Bearer " ;
6868 var buffer = try allocator .alloc (u8 , auth .token .len + prefix .len );
69- std . mem . copyForwards ( u8 , buffer , prefix );
70- std . mem . copyForwards ( u8 , buffer [prefix .len .. ], auth .token );
69+ @memcpy ( buffer [0 .. prefix . len ] , prefix );
70+ @memcpy ( buffer [prefix .len .. ], auth .token );
7171 return buffer ;
7272 },
7373 }
@@ -3078,15 +3078,56 @@ test "HttpClient: sync with body proxy CONNECT" {
30783078 }
30793079 try testing .expectEqual ("over 9000!" , try res .next ());
30803080 try testing .expectEqual (201 , res .header .status );
3081- try testing .expectEqual (5 , res .header .count ());
3081+ try testing .expectEqual (6 , res .header .count ());
30823082 try testing .expectEqual ("Close" , res .header .get ("connection" ));
30833083 try testing .expectEqual ("10" , res .header .get ("content-length" ));
30843084 try testing .expectEqual ("127.0.0.1" , res .header .get ("_host" ));
30853085 try testing .expectEqual ("Lightpanda/1.0" , res .header .get ("_user-agent" ));
30863086 try testing .expectEqual ("*/*" , res .header .get ("_accept" ));
3087+ // Proxy headers
3088+ try testing .expectEqual ("127.0.0.1:9582" , res .header .get ("__host" ));
30873089 }
30883090}
30893091
3092+ test "HttpClient: basic authentication CONNECT" {
3093+ const proxy_uri = try Uri .parse ("http://127.0.0.1:9582/" );
3094+ var client = try testClient (.{ .proxy_type = .connect , .http_proxy = proxy_uri , .proxy_auth = .{ .basic = .{ .user_pass = "user:pass" } } });
3095+ defer client .deinit ();
3096+
3097+ const uri = try Uri .parse ("http://127.0.0.1:9582/http_client/echo" );
3098+ var req = try client .request (.GET , & uri );
3099+ defer req .deinit ();
3100+
3101+ var res = try req .sendSync (.{});
3102+
3103+ try testing .expectEqual (201 , res .header .status );
3104+ // Destination headers
3105+ try testing .expectEqual (null , res .header .get ("_authorization" ));
3106+ try testing .expectEqual (null , res .header .get ("_proxy-authorization" ));
3107+ // Proxy headers
3108+ try testing .expectEqual (null , res .header .get ("__authorization" ));
3109+ try testing .expectEqual ("Basic dXNlcjpwYXNz" , res .header .get ("__proxy-authorization" ));
3110+ }
3111+ test "HttpClient: bearer authentication CONNECT" {
3112+ const proxy_uri = try Uri .parse ("http://127.0.0.1:9582/" );
3113+ var client = try testClient (.{ .proxy_type = .connect , .http_proxy = proxy_uri , .proxy_auth = .{ .bearer = .{ .token = "fruitsalad" } } });
3114+ defer client .deinit ();
3115+
3116+ const uri = try Uri .parse ("http://127.0.0.1:9582/http_client/echo" );
3117+ var req = try client .request (.GET , & uri );
3118+ defer req .deinit ();
3119+
3120+ var res = try req .sendSync (.{});
3121+
3122+ try testing .expectEqual (201 , res .header .status );
3123+ // Destination headers
3124+ try testing .expectEqual (null , res .header .get ("_authorization" ));
3125+ try testing .expectEqual (null , res .header .get ("_proxy-authorization" ));
3126+ // Proxy headers
3127+ try testing .expectEqual (null , res .header .get ("__authorization" ));
3128+ try testing .expectEqual ("Bearer fruitsalad" , res .header .get ("__proxy-authorization" ));
3129+ }
3130+
30903131test "HttpClient: sync with gzip body" {
30913132 for (0.. 2) | i | {
30923133 var client = try testClient (.{});
0 commit comments