diff --git a/examples/Titanium.Web.Proxy.Examples.Basic/ProxyTestController.cs b/examples/Titanium.Web.Proxy.Examples.Basic/ProxyTestController.cs index ec3077823..943ea3cc7 100644 --- a/examples/Titanium.Web.Proxy.Examples.Basic/ProxyTestController.cs +++ b/examples/Titanium.Web.Proxy.Examples.Basic/ProxyTestController.cs @@ -16,9 +16,7 @@ namespace Titanium.Web.Proxy.Examples.Basic public class ProxyTestController { private readonly SemaphoreSlim @lock = new SemaphoreSlim(1); - private readonly ProxyServer proxyServer; - private ExplicitProxyEndPoint explicitEndPoint; public ProxyTestController() @@ -32,27 +30,13 @@ public ProxyTestController() proxyServer.ExceptionFunc = async exception => { - await @lock.WaitAsync(); - - try + if (exception is ProxyHttpException phex) { - var color = Console.ForegroundColor; - Console.ForegroundColor = ConsoleColor.Red; - if (exception is ProxyHttpException phex) - { - Console.WriteLine(exception.Message + ": " + phex.InnerException?.Message); - } - else - { - Console.WriteLine(exception.Message); - } - - Console.ForegroundColor = color; - + await WriteToConsole(exception.Message + ": " + phex.InnerException?.Message, true); } - finally + else { - @lock.Release(); + await WriteToConsole(exception.Message, true); } }; proxyServer.ForwardToUpstreamGateway = true; @@ -110,7 +94,7 @@ public void StartProxy() // Only explicit proxies can be set as system proxy! //proxyServer.SetAsSystemHttpProxy(explicitEndPoint); //proxyServer.SetAsSystemHttpsProxy(explicitEndPoint); - if(RunTime.IsWindows) + if (RunTime.IsWindows) { proxyServer.SetAsSystemProxy(explicitEndPoint, ProxyProtocolType.AllHttp); } @@ -277,18 +261,24 @@ public Task OnCertificateSelection(object sender, CertificateSelectionEventArgs return Task.FromResult(0); } - private async Task WriteToConsole(string message) + private async Task WriteToConsole(string message, bool useRedColor = false) { await @lock.WaitAsync(); - try + if (useRedColor) { + ConsoleColor existing = Console.ForegroundColor; + Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine(message); + Console.ForegroundColor = existing; } - finally + else { - @lock.Release(); + Console.WriteLine(message); } + + @lock.Release(); + } ///// diff --git a/examples/Titanium.Web.Proxy.Examples.Basic/Titanium.Web.Proxy.Examples.Basic.csproj b/examples/Titanium.Web.Proxy.Examples.Basic/Titanium.Web.Proxy.Examples.Basic.csproj index 86c0c0f31..871cc90e7 100644 --- a/examples/Titanium.Web.Proxy.Examples.Basic/Titanium.Web.Proxy.Examples.Basic.csproj +++ b/examples/Titanium.Web.Proxy.Examples.Basic/Titanium.Web.Proxy.Examples.Basic.csproj @@ -2,7 +2,7 @@ Exe - net45;netcoreapp2.0 + net45;netcoreapp2.1 false 7.1 AnyCPU;x64 diff --git a/src/Titanium.Web.Proxy/Network/CertificateManager.cs b/src/Titanium.Web.Proxy/Network/CertificateManager.cs index 4fad840a2..a940ed8b4 100644 --- a/src/Titanium.Web.Proxy/Network/CertificateManager.cs +++ b/src/Titanium.Web.Proxy/Network/CertificateManager.cs @@ -60,7 +60,7 @@ public sealed class CertificateManager : IDisposable private X509Certificate2 rootCertificate; private string rootCertificateName; - + /// /// Initializes a new instance of the class. /// @@ -242,7 +242,7 @@ public X509Certificate2 RootCertificate public void Dispose() { } - + private string getRootCertificateDirectory() { string assemblyLocation = Assembly.GetExecutingAssembly().Location; @@ -427,17 +427,16 @@ internal X509Certificate2 CreateCertificate(string certificateName, bool isRootC certificate = makeCertificate(certificateName, false); // store as cache - Task.Run(() => + try + { + var exported = certificate.Export(X509ContentType.Pkcs12); + File.WriteAllBytes(certificatePath, exported); + } + catch (Exception e) { - try - { - File.WriteAllBytes(certificatePath, certificate.Export(X509ContentType.Pkcs12)); - } - catch (Exception e) - { - ExceptionFunc(new Exception("Failed to save fake certificate.", e)); - } - }); + ExceptionFunc(new Exception("Failed to save fake certificate.", e)); + } + } else { @@ -530,7 +529,7 @@ internal async void ClearIdleCertificates() await Task.Delay(1000 * 60); } } - + /// /// Stops the certificate cache clear process /// @@ -776,7 +775,7 @@ public void EnsureRootCertificate(bool userTrustRootCertificate, EnsureRootCertificate(); } - + /// /// Determines whether the root certificate is trusted. ///