Commit 34490217 authored by Honfika's avatar Honfika

ArgumentException fix when proxy dll is loaded dynamically

parent 5bef0390
...@@ -34,6 +34,7 @@ namespace Titanium.Web.Proxy.Network ...@@ -34,6 +34,7 @@ namespace Titanium.Web.Proxy.Network
private readonly ICertificateMaker certEngine; private readonly ICertificateMaker certEngine;
private bool clearCertificates { get; set; } private bool clearCertificates { get; set; }
/// <summary> /// <summary>
/// Cache dictionary /// Cache dictionary
/// </summary> /// </summary>
...@@ -70,17 +71,29 @@ namespace Titanium.Web.Proxy.Network ...@@ -70,17 +71,29 @@ namespace Titanium.Web.Proxy.Network
certificateCache = new ConcurrentDictionary<string, CachedCertificate>(); certificateCache = new ConcurrentDictionary<string, CachedCertificate>();
} }
internal X509Certificate2 GetRootCertificate() private string GetRootCertificatePath()
{ {
var path = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location); var assemblyLocation = System.Reflection.Assembly.GetExecutingAssembly().Location;
// dynamically loaded assemblies returns string.Empty location
if (assemblyLocation == string.Empty)
{
assemblyLocation = System.Reflection.Assembly.GetEntryAssembly().Location;
}
var path = Path.GetDirectoryName(assemblyLocation);
if (null == path) throw new NullReferenceException(); if (null == path) throw new NullReferenceException();
var fileName = Path.Combine(path, "rootCert.pfx"); var fileName = Path.Combine(path, "rootCert.pfx");
return fileName;
}
internal X509Certificate2 GetRootCertificate()
{
var fileName = GetRootCertificatePath();
if (!File.Exists(fileName)) return null; if (!File.Exists(fileName)) return null;
try try
{ {
return new X509Certificate2(fileName, string.Empty, X509KeyStorageFlags.Exportable); return new X509Certificate2(fileName, string.Empty, X509KeyStorageFlags.Exportable);
} }
catch (Exception e) catch (Exception e)
{ {
...@@ -94,7 +107,6 @@ namespace Titanium.Web.Proxy.Network ...@@ -94,7 +107,6 @@ namespace Titanium.Web.Proxy.Network
/// <returns>true if succeeded, else false</returns> /// <returns>true if succeeded, else false</returns>
internal bool CreateTrustedRootCertificate() internal bool CreateTrustedRootCertificate()
{ {
rootCertificate = GetRootCertificate(); rootCertificate = GetRootCertificate();
if (rootCertificate != null) if (rootCertificate != null)
{ {
...@@ -112,9 +124,7 @@ namespace Titanium.Web.Proxy.Network ...@@ -112,9 +124,7 @@ namespace Titanium.Web.Proxy.Network
{ {
try try
{ {
var path = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location); var fileName = GetRootCertificatePath();
if (null == path) throw new NullReferenceException();
var fileName = Path.Combine(path, "rootCert.pfx");
File.WriteAllBytes(fileName, rootCertificate.Export(X509ContentType.Pkcs12)); File.WriteAllBytes(fileName, rootCertificate.Export(X509ContentType.Pkcs12));
} }
catch (Exception e) catch (Exception e)
......
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