Unverified Commit 8cbf0f43 authored by honfika's avatar honfika Committed by GitHub

Merge pull request #710 from justcoding121/master

beta
parents 312dca6c d21ea354
......@@ -207,6 +207,17 @@ namespace Titanium.Web.Proxy.Examples.Basic
{
e.GetState().PipelineInfo.AppendLine(nameof(onRequest) + ":" + e.HttpClient.Request.RequestUri);
var clientLocalIp = e.ClientLocalEndPoint.Address;
if (!clientLocalIp.Equals(IPAddress.Loopback) && !clientLocalIp.Equals(IPAddress.IPv6Loopback))
{
e.HttpClient.UpStreamEndPoint = new IPEndPoint(clientLocalIp, 0);
}
if (e.HttpClient.Request.Url.Contains("yahoo.com"))
{
e.CustomUpStreamProxy = new ExternalProxy("localhost", 8888);
}
await writeToConsole("Active Client Connections:" + ((ProxyServer)sender).ClientConnectionCount);
await writeToConsole(e.HttpClient.Request.Url);
......
......@@ -59,7 +59,7 @@ namespace Titanium.Web.Proxy.EventArguments
ClientStream = clientStream;
HttpClient = new HttpWebClient(connectRequest, request, new Lazy<int>(() => clientStream.Connection.GetProcessId(endPoint)));
LocalEndPoint = endPoint;
ProxyEndPoint = endPoint;
EnableWinAuth = server.EnableWinAuth && isWindowsAuthenticationSupported;
}
......@@ -103,6 +103,9 @@ namespace Titanium.Web.Proxy.EventArguments
/// </summary>
public IPEndPoint ClientRemoteEndPoint => (IPEndPoint)ClientConnection.RemoteEndPoint;
[Obsolete("Use ClientRemoteEndPoint instead.")]
public IPEndPoint ClientEndPoint => ClientRemoteEndPoint;
/// <summary>
/// The web client used to communicate with server for this session.
/// </summary>
......@@ -111,6 +114,14 @@ namespace Titanium.Web.Proxy.EventArguments
[Obsolete("Use HttpClient instead.")]
public HttpWebClient WebSession => HttpClient;
/// <summary>
/// Gets or sets the custom up stream proxy.
/// </summary>
/// <value>
/// The custom up stream proxy.
/// </value>
public IExternalProxy? CustomUpStreamProxy { get; set; }
/// <summary>
/// Are we using a custom upstream HTTP(S) proxy?
/// </summary>
......@@ -119,12 +130,15 @@ namespace Titanium.Web.Proxy.EventArguments
/// <summary>
/// Local endpoint via which we make the request.
/// </summary>
public ProxyEndPoint LocalEndPoint { get; }
public ProxyEndPoint ProxyEndPoint { get; }
[Obsolete("Use ProxyEndPoint instead.")]
public ProxyEndPoint LocalEndPoint => ProxyEndPoint;
/// <summary>
/// Is this a transparent endpoint?
/// </summary>
public bool IsTransparent => LocalEndPoint is TransparentProxyEndPoint;
public bool IsTransparent => ProxyEndPoint is TransparentProxyEndPoint;
/// <summary>
/// The last exception that happened.
......
......@@ -114,11 +114,7 @@ namespace Titanium.Web.Proxy.Helpers.WinHttp
}
// TODO: Apply authorization
var systemProxy = new ExternalProxy
{
HostName = proxyStr,
Port = port
};
var systemProxy = new ExternalProxy(proxyStr, port);
return systemProxy;
}
......@@ -134,12 +130,7 @@ namespace Titanium.Web.Proxy.Helpers.WinHttp
HttpSystemProxyValue? value = null;
if (ProxyInfo?.Proxies?.TryGetValue(protocolType.Value, out value) == true)
{
var systemProxy = new ExternalProxy
{
HostName = value!.HostName,
Port = value.Port
};
var systemProxy = new ExternalProxy(value!.HostName, value.Port);
return systemProxy;
}
}
......
......@@ -69,6 +69,39 @@ namespace Titanium.Web.Proxy.Models
/// </summary>
public int Port { get; set; }
/// <summary>
/// Initializes a new instance of the <see cref="ExternalProxy"/> class.
/// </summary>
public ExternalProxy()
{
}
/// <summary>
/// Initializes a new instance of the <see cref="ExternalProxy"/> class.
/// </summary>
/// <param name="hostName">Name of the host.</param>
/// <param name="port">The port.</param>
public ExternalProxy(string hostName, int port)
{
HostName = hostName;
Port = port;
}
/// <summary>
/// Initializes a new instance of the <see cref="ExternalProxy"/> class.
/// </summary>
/// <param name="hostName">Name of the host.</param>
/// <param name="port">The port.</param>
/// <param name="userName">Name of the user.</param>
/// <param name="password">The password.</param>
public ExternalProxy(string hostName, int port, string userName, string password)
{
HostName = hostName;
Port = port;
UserName = userName;
Password = password;
}
/// <summary>
/// returns data in Hostname:port format.
/// </summary>
......@@ -77,6 +110,5 @@ namespace Titanium.Web.Proxy.Models
{
return $"{HostName}:{Port}";
}
}
}
......@@ -114,10 +114,10 @@ namespace Titanium.Web.Proxy.Network.Tcp
applicationProtocols = new List<SslApplicationProtocol> { applicationProtocol };
}
IExternalProxy? customUpStreamProxy = null;
IExternalProxy? customUpStreamProxy = session.CustomUpStreamProxy;
bool isHttps = session.IsHttps;
if (server.GetCustomUpStreamProxyFunc != null)
if (customUpStreamProxy == null && server.GetCustomUpStreamProxyFunc != null)
{
customUpStreamProxy = await server.GetCustomUpStreamProxyFunc(session);
}
......@@ -169,10 +169,10 @@ namespace Titanium.Web.Proxy.Network.Tcp
internal async Task<TcpServerConnection> GetServerConnection(ProxyServer proxyServer, SessionEventArgsBase session, bool isConnect,
List<SslApplicationProtocol>? applicationProtocols, bool noCache, CancellationToken cancellationToken)
{
IExternalProxy? customUpStreamProxy = null;
IExternalProxy? customUpStreamProxy = session.CustomUpStreamProxy;
bool isHttps = session.IsHttps;
if (proxyServer.GetCustomUpStreamProxyFunc != null)
if (customUpStreamProxy == null && proxyServer.GetCustomUpStreamProxyFunc != null)
{
customUpStreamProxy = await proxyServer.GetCustomUpStreamProxyFunc(session);
}
......
......@@ -175,7 +175,7 @@ namespace Titanium.Web.Proxy
// Add custom div to body to clarify that the proxy (not the client browser) failed authentication
string authErrorMessage =
"<div class=\"inserted-by-proxy\"><h2>NTLM authentication through Titanium.Web.Proxy (" +
args.ClientConnection.LocalEndPoint +
args.ClientLocalEndPoint +
") failed. Please check credentials.</h2></div>";
string originalErrorMessage =
"<div class=\"inserted-by-proxy\"><h3>Response from remote web server below.</h3></div><br/>";
......
......@@ -59,11 +59,7 @@ namespace Titanium.Web.Proxy.IntegrationTests
{
Assert.AreEqual("Test", session.UserData);
return await Task.FromResult(new Models.ExternalProxy
{
HostName = "localhost",
Port = proxy2.ProxyEndPoints[0].Port
});
return await Task.FromResult(new Models.ExternalProxy("localhost", proxy2.ProxyEndPoints[0].Port));
};
var client = testSuite.GetClient(proxy1, true);
......
......@@ -22,17 +22,8 @@ namespace Titanium.Web.Proxy.IntegrationTests.Setup
if (upStreamProxy != null)
{
ProxyServer.UpStreamHttpProxy = new ExternalProxy
{
HostName = "localhost",
Port = upStreamProxy.ProxyEndPoints[0].Port
};
ProxyServer.UpStreamHttpsProxy = new ExternalProxy
{
HostName = "localhost",
Port = upStreamProxy.ProxyEndPoints[0].Port
};
ProxyServer.UpStreamHttpProxy = new ExternalProxy("localhost", upStreamProxy.ProxyEndPoints[0].Port);
ProxyServer.UpStreamHttpsProxy = new ExternalProxy("localhost", upStreamProxy.ProxyEndPoints[0].Port);
}
ProxyServer.Start();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment