Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
T
Titanium-Web-Proxy
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Administrator
Titanium-Web-Proxy
Commits
a87024a3
Commit
a87024a3
authored
Sep 30, 2017
by
Jehonathan Thomas
Committed by
GitHub
Sep 30, 2017
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #320 from justcoding121/develop
Beta
parents
b64e703c
bf5d53aa
Show whitespace changes
Inline
Side-by-side
Showing
36 changed files
with
94 additions
and
544 deletions
+94
-544
ConsoleHelper.cs
...eb.Proxy.Examples.Basic.Standard/Helpers/ConsoleHelper.cs
+0
-51
Program.cs
...les/Titanium.Web.Proxy.Examples.Basic.Standard/Program.cs
+0
-25
ProxyTestController.cs
....Web.Proxy.Examples.Basic.Standard/ProxyTestController.cs
+0
-231
Titanium.Web.Proxy.Examples.Basic.Standard.csproj
...tandard/Titanium.Web.Proxy.Examples.Basic.Standard.csproj
+0
-12
App.config
Examples/Titanium.Web.Proxy.Examples.Basic/App.config
+4
-17
AssemblyInfo.cs
...anium.Web.Proxy.Examples.Basic/Properties/AssemblyInfo.cs
+10
-13
ProxyTestController.cs
.../Titanium.Web.Proxy.Examples.Basic/ProxyTestController.cs
+3
-1
Titanium.Web.Proxy.Examples.Basic.csproj
...y.Examples.Basic/Titanium.Web.Proxy.Examples.Basic.csproj
+8
-77
Titanium.Web.Proxy.Examples.Wpf.csproj
...Proxy.Examples.Wpf/Titanium.Web.Proxy.Examples.Wpf.csproj
+2
-3
packages.config
Examples/Titanium.Web.Proxy.Examples.Wpf/packages.config
+1
-1
Titanium.Web.Proxy.sln
Titanium.Web.Proxy.sln
+8
-15
SessionEventArgs.cs
Titanium.Web.Proxy/EventArguments/SessionEventArgs.cs
+11
-10
DotNet45Extensions.cs
Titanium.Web.Proxy/Extensions/DotNet45Extensions.cs
+3
-3
TcpExtensions.cs
Titanium.Web.Proxy/Extensions/TcpExtensions.cs
+0
-2
NativeMethods.Tcp.cs
Titanium.Web.Proxy/Helpers/NativeMethods.Tcp.cs
+0
-2
Network.cs
Titanium.Web.Proxy/Helpers/Network.cs
+1
-1
RunTime.cs
Titanium.Web.Proxy/Helpers/RunTime.cs
+16
-3
Tcp.cs
Titanium.Web.Proxy/Helpers/Tcp.cs
+0
-2
WinCertificateMaker.cs
...nium.Web.Proxy/Network/Certificate/WinCertificateMaker.cs
+1
-3
CertificateManager.cs
Titanium.Web.Proxy/Network/CertificateManager.cs
+4
-23
TcpRow.cs
Titanium.Web.Proxy/Network/Tcp/TcpRow.cs
+1
-3
TcpTable.cs
Titanium.Web.Proxy/Network/Tcp/TcpTable.cs
+1
-3
Common.cs
Titanium.Web.Proxy/Network/WinAuth/Security/Common.cs
+1
-3
LittleEndian.cs
Titanium.Web.Proxy/Network/WinAuth/Security/LittleEndian.cs
+0
-2
Message.cs
Titanium.Web.Proxy/Network/WinAuth/Security/Message.cs
+0
-2
State.cs
Titanium.Web.Proxy/Network/WinAuth/Security/State.cs
+1
-3
WinAuthEndPoint.cs
...ium.Web.Proxy/Network/WinAuth/Security/WinAuthEndPoint.cs
+2
-3
WinAuthHandler.cs
Titanium.Web.Proxy/Network/WinAuth/WinAuthHandler.cs
+1
-3
ProxyServer.cs
Titanium.Web.Proxy/ProxyServer.cs
+1
-5
RequestHandler.cs
Titanium.Web.Proxy/RequestHandler.cs
+3
-3
ResponseHandler.cs
Titanium.Web.Proxy/ResponseHandler.cs
+1
-5
Titanium.Web.Proxy.csproj
Titanium.Web.Proxy/Titanium.Web.Proxy.csproj
+7
-1
Titanium.Web.Proxy.nuspec
Titanium.Web.Proxy/Titanium.Web.Proxy.nuspec
+1
-1
WinAuthHandler.cs
Titanium.Web.Proxy/WinAuthHandler.cs
+1
-3
app.config
Titanium.Web.Proxy/app.config
+0
-8
packages.config
Titanium.Web.Proxy/packages.config
+1
-1
No files found.
Examples/Titanium.Web.Proxy.Examples.Basic.Standard/Helpers/ConsoleHelper.cs
deleted
100644 → 0
View file @
b64e703c
using
System
;
using
System.Runtime.InteropServices
;
namespace
Titanium.Web.Proxy.Examples.Basic.Helpers
{
/// <summary>
/// Adapated from
/// http://stackoverflow.com/questions/13656846/how-to-programmatic-disable-c-sharp-console-applications-quick-edit-mode
/// </summary>
internal
static
class
ConsoleHelper
{
const
uint
ENABLE_QUICK_EDIT
=
0x0040
;
// STD_INPUT_HANDLE (DWORD): -10 is the standard input device.
const
int
STD_INPUT_HANDLE
=
-
10
;
[
DllImport
(
"kernel32.dll"
,
SetLastError
=
true
)]
static
extern
IntPtr
GetStdHandle
(
int
nStdHandle
);
[
DllImport
(
"kernel32.dll"
)]
static
extern
bool
GetConsoleMode
(
IntPtr
hConsoleHandle
,
out
uint
lpMode
);
[
DllImport
(
"kernel32.dll"
)]
static
extern
bool
SetConsoleMode
(
IntPtr
hConsoleHandle
,
uint
dwMode
);
internal
static
bool
DisableQuickEditMode
()
{
var
consoleHandle
=
GetStdHandle
(
STD_INPUT_HANDLE
);
// get current console mode
uint
consoleMode
;
if
(!
GetConsoleMode
(
consoleHandle
,
out
consoleMode
))
{
// ERROR: Unable to get console mode.
return
false
;
}
// Clear the quick edit bit in the mode flags
consoleMode
&=
~
ENABLE_QUICK_EDIT
;
// set the new mode
if
(!
SetConsoleMode
(
consoleHandle
,
consoleMode
))
{
// ERROR: Unable to set console mode
return
false
;
}
return
true
;
}
}
}
Examples/Titanium.Web.Proxy.Examples.Basic.Standard/Program.cs
deleted
100644 → 0
View file @
b64e703c
using
System
;
using
Titanium.Web.Proxy.Examples.Basic.Helpers
;
namespace
Titanium.Web.Proxy.Examples.Basic.Standard
{
class
Program
{
private
static
readonly
ProxyTestController
controller
=
new
ProxyTestController
();
static
void
Main
(
string
[]
args
)
{
//fix console hang due to QuickEdit mode
ConsoleHelper
.
DisableQuickEditMode
();
//Start proxy controller
controller
.
StartProxy
();
Console
.
WriteLine
(
"Hit any key to exit.."
);
Console
.
WriteLine
();
Console
.
Read
();
controller
.
Stop
();
}
}
}
\ No newline at end of file
Examples/Titanium.Web.Proxy.Examples.Basic.Standard/ProxyTestController.cs
deleted
100644 → 0
View file @
b64e703c
using
System
;
using
System.Collections.Generic
;
using
System.Net
;
using
System.Net.Security
;
using
System.Threading.Tasks
;
using
Titanium.Web.Proxy.EventArguments
;
using
Titanium.Web.Proxy.Helpers
;
using
Titanium.Web.Proxy.Models
;
namespace
Titanium.Web.Proxy.Examples.Basic
{
public
class
ProxyTestController
{
private
readonly
ProxyServer
proxyServer
;
//share requestBody outside handlers
//Using a dictionary is not a good idea since it can cause memory overflow
//ideally the data should be moved out of memory
//private readonly IDictionary<Guid, string> requestBodyHistory = new ConcurrentDictionary<Guid, string>();
public
ProxyTestController
()
{
proxyServer
=
new
ProxyServer
();
//generate root certificate without storing it in file system
//proxyServer.CertificateEngine = Network.CertificateEngine.BouncyCastle;
//proxyServer.CertificateManager.CreateTrustedRootCertificate(false);
//proxyServer.CertificateManager.TrustRootCertificate();
proxyServer
.
ExceptionFunc
=
exception
=>
Console
.
WriteLine
(
exception
.
Message
);
proxyServer
.
TrustRootCertificate
=
true
;
proxyServer
.
ForwardToUpstreamGateway
=
true
;
//optionally set the Certificate Engine
//Under Mono only BouncyCastle will be supported
//proxyServer.CertificateEngine = Network.CertificateEngine.BouncyCastle;
//optionally set the Root Certificate
//proxyServer.RootCertificate = new X509Certificate2("myCert.pfx", string.Empty, X509KeyStorageFlags.Exportable);
}
public
void
StartProxy
()
{
proxyServer
.
BeforeRequest
+=
OnRequest
;
proxyServer
.
BeforeResponse
+=
OnResponse
;
proxyServer
.
TunnelConnectRequest
+=
OnTunnelConnectRequest
;
proxyServer
.
TunnelConnectResponse
+=
OnTunnelConnectResponse
;
proxyServer
.
ServerCertificateValidationCallback
+=
OnCertificateValidation
;
proxyServer
.
ClientCertificateSelectionCallback
+=
OnCertificateSelection
;
//proxyServer.EnableWinAuth = true;
var
explicitEndPoint
=
new
ExplicitProxyEndPoint
(
IPAddress
.
Any
,
8000
,
true
)
{
//Exclude Https addresses you don't want to proxy
//Useful for clients that use certificate pinning
//for example google.com and dropbox.com
ExcludedHttpsHostNameRegex
=
new
List
<
string
>
{
"dropbox.com"
},
//Include Https addresses you want to proxy (others will be excluded)
//for example github.com
//IncludedHttpsHostNameRegex = new List<string>
//{
// "github.com"
//},
//You can set only one of the ExcludedHttpsHostNameRegex and IncludedHttpsHostNameRegex properties, otherwise ArgumentException will be thrown
//Use self-issued generic certificate on all https requests
//Optimizes performance by not creating a certificate for each https-enabled domain
//Useful when certificate trust is not required by proxy clients
//GenericCertificate = new X509Certificate2(Path.Combine(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location), "genericcert.pfx"), "password")
};
//An explicit endpoint is where the client knows about the existence of a proxy
//So client sends request in a proxy friendly manner
proxyServer
.
AddEndPoint
(
explicitEndPoint
);
proxyServer
.
Start
();
//Transparent endpoint is useful for reverse proxy (client is not aware of the existence of proxy)
//A transparent endpoint usually requires a network router port forwarding HTTP(S) packets or DNS
//to send data to this endPoint
//var transparentEndPoint = new TransparentProxyEndPoint(IPAddress.Any, 443, true)
//{
// //Generic Certificate hostname to use
// //When SNI is disabled by client
// GenericCertificateName = "google.com"
//};
//proxyServer.AddEndPoint(transparentEndPoint);
//proxyServer.UpStreamHttpProxy = new ExternalProxy() { HostName = "localhost", Port = 8888 };
//proxyServer.UpStreamHttpsProxy = new ExternalProxy() { HostName = "localhost", Port = 8888 };
foreach
(
var
endPoint
in
proxyServer
.
ProxyEndPoints
)
Console
.
WriteLine
(
"Listening on '{0}' endpoint at Ip {1} and port: {2} "
,
endPoint
.
GetType
().
Name
,
endPoint
.
IpAddress
,
endPoint
.
Port
);
}
public
void
Stop
()
{
proxyServer
.
TunnelConnectRequest
-=
OnTunnelConnectRequest
;
proxyServer
.
TunnelConnectResponse
-=
OnTunnelConnectResponse
;
proxyServer
.
BeforeRequest
-=
OnRequest
;
proxyServer
.
BeforeResponse
-=
OnResponse
;
proxyServer
.
ServerCertificateValidationCallback
-=
OnCertificateValidation
;
proxyServer
.
ClientCertificateSelectionCallback
-=
OnCertificateSelection
;
proxyServer
.
Stop
();
//remove the generated certificates
//proxyServer.CertificateManager.RemoveTrustedRootCertificates();
}
private
async
Task
OnTunnelConnectRequest
(
object
sender
,
TunnelConnectSessionEventArgs
e
)
{
Console
.
WriteLine
(
"Tunnel to: "
+
e
.
WebSession
.
Request
.
Host
);
}
private
async
Task
OnTunnelConnectResponse
(
object
sender
,
TunnelConnectSessionEventArgs
e
)
{
}
//intecept & cancel redirect or update requests
public
async
Task
OnRequest
(
object
sender
,
SessionEventArgs
e
)
{
Console
.
WriteLine
(
"Active Client Connections:"
+
((
ProxyServer
)
sender
).
ClientConnectionCount
);
Console
.
WriteLine
(
e
.
WebSession
.
Request
.
Url
);
//read request headers
var
requestHeaders
=
e
.
WebSession
.
Request
.
RequestHeaders
;
if
(
e
.
WebSession
.
Request
.
HasBody
)
{
//Get/Set request body bytes
var
bodyBytes
=
await
e
.
GetRequestBody
();
await
e
.
SetRequestBody
(
bodyBytes
);
//Get/Set request body as string
string
bodyString
=
await
e
.
GetRequestBodyAsString
();
await
e
.
SetRequestBodyString
(
bodyString
);
//requestBodyHistory[e.Id] = bodyString;
}
////To cancel a request with a custom HTML content
////Filter URL
//if (e.WebSession.Request.RequestUri.AbsoluteUri.Contains("google.com"))
//{
// await e.Ok("<!DOCTYPE html>" +
// "<html><body><h1>" +
// "Website Blocked" +
// "</h1>" +
// "<p>Blocked by titanium web proxy.</p>" +
// "</body>" +
// "</html>");
//}
////Redirect example
//if (e.WebSession.Request.RequestUri.AbsoluteUri.Contains("wikipedia.org"))
//{
// await e.Redirect("https://www.paypal.com");
//}
}
//Modify response
public
async
Task
OnResponse
(
object
sender
,
SessionEventArgs
e
)
{
Console
.
WriteLine
(
"Active Server Connections:"
+
((
ProxyServer
)
sender
).
ServerConnectionCount
);
//if (requestBodyHistory.ContainsKey(e.Id))
//{
// //access request body by looking up the shared dictionary using requestId
// var requestBody = requestBodyHistory[e.Id];
//}
//read response headers
var
responseHeaders
=
e
.
WebSession
.
Response
.
ResponseHeaders
;
// print out process id of current session
//Console.WriteLine($"PID: {e.WebSession.ProcessId.Value}");
//if (!e.ProxySession.Request.Host.Equals("medeczane.sgk.gov.tr")) return;
if
(
e
.
WebSession
.
Request
.
Method
==
"GET"
||
e
.
WebSession
.
Request
.
Method
==
"POST"
)
{
if
(
e
.
WebSession
.
Response
.
ResponseStatusCode
==
(
int
)
HttpStatusCode
.
OK
)
{
if
(
e
.
WebSession
.
Response
.
ContentType
!=
null
&&
e
.
WebSession
.
Response
.
ContentType
.
Trim
().
ToLower
().
Contains
(
"text/html"
))
{
var
bodyBytes
=
await
e
.
GetResponseBody
();
await
e
.
SetResponseBody
(
bodyBytes
);
string
body
=
await
e
.
GetResponseBodyAsString
();
await
e
.
SetResponseBodyString
(
body
);
}
}
}
}
/// <summary>
/// Allows overriding default certificate validation logic
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public
Task
OnCertificateValidation
(
object
sender
,
CertificateValidationEventArgs
e
)
{
//set IsValid to true/false based on Certificate Errors
if
(
e
.
SslPolicyErrors
==
SslPolicyErrors
.
None
)
{
e
.
IsValid
=
true
;
}
return
Task
.
FromResult
(
0
);
}
/// <summary>
/// Allows overriding default client certificate selection logic during mutual authentication
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public
Task
OnCertificateSelection
(
object
sender
,
CertificateSelectionEventArgs
e
)
{
//set e.clientCertificate to override
return
Task
.
FromResult
(
0
);
}
}
}
Examples/Titanium.Web.Proxy.Examples.Basic.Standard/Titanium.Web.Proxy.Examples.Basic.Standard.csproj
deleted
100644 → 0
View file @
b64e703c
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\..\Titanium.Web.Proxy\Titanium.Web.Proxy.csproj" />
</ItemGroup>
</Project>
\ No newline at end of file
Examples/Titanium.Web.Proxy.Examples.Basic/App.config
View file @
a87024a3
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
<
configuration
>
<
startup
>
<
supportedRuntime
version
=
"v4.0"
sku
=
".NETFramework,Version=v4.5"
/>
<
supportedRuntime
version
=
"v4.0"
sku
=
".NETFramework,Version=v4.5"
/>
</
startup
>
<
runtime
>
<
assemblyBinding
xmlns
=
"urn:schemas-microsoft-com:asm.v1"
>
<
dependentAssembly
>
<
assemblyIdentity
name
=
"System.Runtime"
publicKeyToken
=
"b03f5f7f11d50a3a"
culture
=
"neutral"
/>
<
bindingRedirect
oldVersion
=
"0.0.0.0-2.6.10.0"
newVersion
=
"2.6.10.0"
/>
</
dependentAssembly
>
<
dependentAssembly
>
<
assemblyIdentity
name
=
"System.Threading.Tasks"
publicKeyToken
=
"b03f5f7f11d50a3a"
culture
=
"neutral"
/>
<
bindingRedirect
oldVersion
=
"0.0.0.0-2.6.10.0"
newVersion
=
"2.6.10.0"
/>
</
dependentAssembly
>
</
assemblyBinding
>
</
runtime
>
</
configuration
>
Examples/Titanium.Web.Proxy.Examples.Basic/Properties/AssemblyInfo.cs
View file @
a87024a3
using
System.Reflection
;
using
System.Runtime.CompilerServices
;
using
System.Runtime.InteropServices
;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("Demo")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
...
...
@@ -17,12 +17,10 @@ using System.Runtime.InteropServices;
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("33a2109d-0312-4c94-aa51-fbb2a83e63ab")]
[assembly: Guid("9a2c6980-90d1-4082-ad60-b2428f3d6197")]
// Version information for an assembly consists of the following four values:
//
...
...
@@ -33,7 +31,6 @@ using System.Runtime.InteropServices;
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.1")]
[assembly: AssemblyVersion("1.0.1")]
[assembly: AssemblyFileVersion("1.0.1")]
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
Examples/Titanium.Web.Proxy.Examples.Basic/ProxyTestController.cs
View file @
a87024a3
...
...
@@ -41,7 +41,7 @@ namespace Titanium.Web.Proxy.Examples.Basic
proxyServer
.
ForwardToUpstreamGateway
=
true
;
//optionally set the Certificate Engine
//Under Mono only BouncyCastle will be supported
//Under Mono o
r Non-Windows runtimes o
nly BouncyCastle will be supported
//proxyServer.CertificateEngine = Network.CertificateEngine.DefaultWindows;
//optionally set the Root Certificate
...
...
@@ -108,10 +108,12 @@ namespace Titanium.Web.Proxy.Examples.Basic
foreach
(
var
endPoint
in
proxyServer
.
ProxyEndPoints
)
Console
.
WriteLine
(
"Listening on '{0}' endpoint at Ip {1} and port: {2} "
,
endPoint
.
GetType
().
Name
,
endPoint
.
IpAddress
,
endPoint
.
Port
);
#if NET45
//Only explicit proxies can be set as system proxy!
//proxyServer.SetAsSystemHttpProxy(explicitEndPoint);
//proxyServer.SetAsSystemHttpsProxy(explicitEndPoint);
proxyServer
.
SetAsSystemProxy
(
explicitEndPoint
,
ProxyProtocolType
.
AllHttp
);
#endif
}
public
void
Stop
()
...
...
Examples/Titanium.Web.Proxy.Examples.Basic/Titanium.Web.Proxy.Examples.Basic.csproj
View file @
a87024a3
<
?xml version="1.0" encoding="utf-8"?
>
<Project
ToolsVersion=
"14.0"
DefaultTargets=
"Build"
xmlns=
"http://schemas.microsoft.com/developer/msbuild/2003"
>
<
Project Sdk="Microsoft.NET.Sdk"
>
<PropertyGroup>
<Configuration
Condition=
" '$(Configuration)' == '' "
>
Debug
</Configuration>
<Platform
Condition=
" '$(Platform)' == '' "
>
AnyCPU
</Platform>
<ProductVersion>
8.0.30703
</ProductVersion>
<SchemaVersion>
2.0
</SchemaVersion>
<ProjectGuid>
{F3B7E553-1904-4E80-BDC7-212342B5C952}
</ProjectGuid>
<OutputType>Exe</OutputType>
<AppDesignerFolder>
Properties
</AppDesignerFolder>
<RootNamespace>
Titanium.Web.Proxy.Examples.Basic
</RootNamespace>
<AssemblyName>
Titanium.Web.Proxy.Examples.Basic
</AssemblyName>
<FileAlignment>
512
</FileAlignment>
<TargetFrameworkProfile
/>
</PropertyGroup>
<PropertyGroup
Condition=
" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "
>
<DebugSymbols>
true
</DebugSymbols>
<DebugType>
full
</DebugType>
<Optimize>
false
</Optimize>
<OutputPath>
bin\Debug\
</OutputPath>
<DefineConstants>
TRACE;DEBUG;NET45
</DefineConstants>
<ErrorReport>
prompt
</ErrorReport>
<WarningLevel>
4
</WarningLevel>
<TargetFrameworkVersion>
v4.5
</TargetFrameworkVersion>
<Prefer32Bit>
false
</Prefer32Bit>
</PropertyGroup>
<PropertyGroup
Condition=
" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "
>
<DebugType>
none
</DebugType>
<Optimize>
true
</Optimize>
<OutputPath>
bin\Release\
</OutputPath>
<DefineConstants>
TRACE;NET45
</DefineConstants>
<ErrorReport>
prompt
</ErrorReport>
<WarningLevel>
4
</WarningLevel>
<TargetFrameworkVersion>
v4.5
</TargetFrameworkVersion>
<Prefer32Bit>
false
</Prefer32Bit>
<DebugSymbols>
false
</DebugSymbols>
<TargetFrameworks>net45;netcoreapp2.0</TargetFrameworks>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
</PropertyGroup>
<PropertyGroup>
<StartupObject />
</PropertyGroup>
<ItemGroup>
<Reference
Include=
"System"
/>
<Reference
Include=
"System.ComponentModel.DataAnnotations"
/>
<Reference
Include=
"System.configuration"
/>
<Reference
Include=
"System.Core"
/>
<Reference
Include=
"System.DirectoryServices"
/>
<Reference
Include=
"System.DirectoryServices.AccountManagement"
/>
<Reference
Include=
"System.DirectoryServices.Protocols"
/>
<Reference
Include=
"System.ServiceModel"
/>
<Reference
Include=
"System.ServiceModel.Discovery"
/>
<Reference
Include=
"System.Xml.Linq"
/>
<Reference
Include=
"System.Data.DataSetExtensions"
/>
<Reference
Include=
"Microsoft.CSharp"
/>
<Reference
Include=
"System.Data"
/>
<Reference
Include=
"System.Xml"
/>
</ItemGroup>
<ItemGroup>
<Compile
Include=
"Helpers\ConsoleHelper.cs"
/>
<Compile
Include=
"Program.cs"
/>
<Compile
Include=
"Properties\AssemblyInfo.cs"
/>
<Compile
Include=
"ProxyTestController.cs"
/>
</ItemGroup>
<ItemGroup>
<Content
Include=
"Capture.PNG"
/>
<ProjectReference Include="..\..\Titanium.Web.Proxy\Titanium.Web.Proxy.csproj" />
</ItemGroup>
<ItemGroup>
<None
Include=
"App.config"
/>
</ItemGroup>
<ItemGroup>
<ProjectReference
Include=
"..\..\Titanium.Web.Proxy\Titanium.Web.Proxy.csproj"
>
<Project>
{8d73a1be-868c-42d2-9ece-f32cc1a02906}
</Project>
<Name>
Titanium.Web.Proxy
</Name>
</ProjectReference>
</ItemGroup>
<Import
Project=
"$(MSBuildToolsPath)\Microsoft.CSharp.targets"
/>
<PropertyGroup>
</PropertyGroup>
<Import
Project=
"..\..\..\lib\packages\AutoMapper.3.3.0\tools\AutoMapper.targets"
Condition=
"Exists('..\..\..\lib\packages\AutoMapper.3.3.0\tools\AutoMapper.targets')"
/>
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>
\ No newline at end of file
Examples/Titanium.Web.Proxy.Examples.Wpf/Titanium.Web.Proxy.Examples.Wpf.csproj
View file @
a87024a3
...
...
@@ -51,9 +51,8 @@
<WarningLevel>
4
</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference
Include=
"StreamExtended, Version=1.0.1.0, Culture=neutral, PublicKeyToken=bbfa0f1d54f50043, processorArchitecture=MSIL"
>
<HintPath>
..\..\packages\StreamExtended.1.0.18\lib\net45\StreamExtended.dll
</HintPath>
<Private>
True
</Private>
<Reference
Include=
"StreamExtended, Version=1.0.81.0, Culture=neutral, PublicKeyToken=bbfa0f1d54f50043, processorArchitecture=MSIL"
>
<HintPath>
..\..\packages\StreamExtended.1.0.81\lib\net45\StreamExtended.dll
</HintPath>
</Reference>
<Reference
Include=
"System"
/>
<Reference
Include=
"System.Data"
/>
...
...
Examples/Titanium.Web.Proxy.Examples.Wpf/packages.config
View file @
a87024a3
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
<
packages
>
<
package
id
=
"StreamExtended"
version
=
"1.0.
18
"
targetFramework
=
"net45"
/>
<
package
id
=
"StreamExtended"
version
=
"1.0.
81
"
targetFramework
=
"net45"
/>
</
packages
>
\ No newline at end of file
Titanium.Web.Proxy.sln
View file @
a87024a3
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.26
730.16
VisualStudioVersion = 15.0.26
906.1
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Examples", "Examples", "{B6DBABDC-C985-4872-9C38-B4E5079CBC4B}"
EndProject
Project("{
FAE04EC0-301F-11D3-BF4B-00C04F79EFBC
}") = "Titanium.Web.Proxy", "Titanium.Web.Proxy\Titanium.Web.Proxy.csproj", "{8D73A1BE-868C-42D2-9ECE-F32CC1A02906}"
Project("{
9A19103F-16F7-4668-BE54-9A1E7A4F7556
}") = "Titanium.Web.Proxy", "Titanium.Web.Proxy\Titanium.Web.Proxy.csproj", "{8D73A1BE-868C-42D2-9ECE-F32CC1A02906}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{6FD3B84B-9283-4E9C-8C43-A234E9AA3EAA}"
ProjectSection(SolutionItems) = preProject
...
...
@@ -14,8 +14,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{6FD3B8
.nuget\NuGet.targets = .nuget\NuGet.targets
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Titanium.Web.Proxy.Examples.Basic", "Examples\Titanium.Web.Proxy.Examples.Basic\Titanium.Web.Proxy.Examples.Basic.csproj", "{F3B7E553-1904-4E80-BDC7-212342B5C952}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Documentation", "Documentation", "{38EA62D0-D2CB-465D-AF4F-407C5B4D4A1E}"
ProjectSection(SolutionItems) = preProject
LICENSE = LICENSE
...
...
@@ -37,7 +35,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Titanium.Web.Proxy.Integrat
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Titanium.Web.Proxy.Examples.Wpf", "Examples\Titanium.Web.Proxy.Examples.Wpf\Titanium.Web.Proxy.Examples.Wpf.csproj", "{4406CE17-9A39-4F28-8363-6169A4F799C1}"
EndProject
Project("{
9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Titanium.Web.Proxy.Examples.Basic.Standard", "Examples\Titanium.Web.Proxy.Examples.Basic.Standard\Titanium.Web.Proxy.Examples.Basic.Standard.csproj", "{75AEF54F-C3B7-43A8-8ECA-561FB21BC6AD
}"
Project("{
FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Titanium.Web.Proxy.Examples.Basic", "Examples\Titanium.Web.Proxy.Examples.Basic\Titanium.Web.Proxy.Examples.Basic.csproj", "{9A2C6980-90D1-4082-AD60-B2428F3D6197
}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
...
...
@@ -49,10 +47,6 @@ Global
{8D73A1BE-868C-42D2-9ECE-F32CC1A02906}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8D73A1BE-868C-42D2-9ECE-F32CC1A02906}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8D73A1BE-868C-42D2-9ECE-F32CC1A02906}.Release|Any CPU.Build.0 = Release|Any CPU
{F3B7E553-1904-4E80-BDC7-212342B5C952}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F3B7E553-1904-4E80-BDC7-212342B5C952}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F3B7E553-1904-4E80-BDC7-212342B5C952}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F3B7E553-1904-4E80-BDC7-212342B5C952}.Release|Any CPU.Build.0 = Release|Any CPU
{B517E3D0-D03B-436F-AB03-34BA0D5321AF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B517E3D0-D03B-436F-AB03-34BA0D5321AF}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B517E3D0-D03B-436F-AB03-34BA0D5321AF}.Release|Any CPU.ActiveCfg = Release|Any CPU
...
...
@@ -65,20 +59,19 @@ Global
{4406CE17-9A39-4F28-8363-6169A4F799C1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4406CE17-9A39-4F28-8363-6169A4F799C1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4406CE17-9A39-4F28-8363-6169A4F799C1}.Release|Any CPU.Build.0 = Release|Any CPU
{
75AEF54F-C3B7-43A8-8ECA-561FB21BC6AD
}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{
75AEF54F-C3B7-43A8-8ECA-561FB21BC6AD
}.Debug|Any CPU.Build.0 = Debug|Any CPU
{
75AEF54F-C3B7-43A8-8ECA-561FB21BC6AD
}.Release|Any CPU.ActiveCfg = Release|Any CPU
{
75AEF54F-C3B7-43A8-8ECA-561FB21BC6AD
}.Release|Any CPU.Build.0 = Release|Any CPU
{
9A2C6980-90D1-4082-AD60-B2428F3D6197
}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{
9A2C6980-90D1-4082-AD60-B2428F3D6197
}.Debug|Any CPU.Build.0 = Debug|Any CPU
{
9A2C6980-90D1-4082-AD60-B2428F3D6197
}.Release|Any CPU.ActiveCfg = Release|Any CPU
{
9A2C6980-90D1-4082-AD60-B2428F3D6197
}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{F3B7E553-1904-4E80-BDC7-212342B5C952} = {B6DBABDC-C985-4872-9C38-B4E5079CBC4B}
{B517E3D0-D03B-436F-AB03-34BA0D5321AF} = {BC1E0789-D348-49CF-8B67-5E99D50EDF64}
{32231301-B0FB-4F9E-98DF-B3E8A88F4C16} = {BC1E0789-D348-49CF-8B67-5E99D50EDF64}
{4406CE17-9A39-4F28-8363-6169A4F799C1} = {B6DBABDC-C985-4872-9C38-B4E5079CBC4B}
{
75AEF54F-C3B7-43A8-8ECA-561FB21BC6AD
} = {B6DBABDC-C985-4872-9C38-B4E5079CBC4B}
{
9A2C6980-90D1-4082-AD60-B2428F3D6197
} = {B6DBABDC-C985-4872-9C38-B4E5079CBC4B}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
EnterpriseLibraryConfigurationToolBinariesPath = .1.505.2\lib\NET35
...
...
Titanium.Web.Proxy/EventArguments/SessionEventArgs.cs
View file @
a87024a3
...
...
@@ -110,7 +110,8 @@ namespace Titanium.Web.Proxy.EventArguments
WebSession
.
ProcessId
=
new
Lazy
<
int
>(()
=>
{
#if NET45
if
(
RunTime
.
IsWindows
)
{
var
remoteEndPoint
=
(
IPEndPoint
)
ProxyClient
.
TcpClient
.
Client
.
RemoteEndPoint
;
//If client is localhost get the process id
...
...
@@ -121,9 +122,9 @@ namespace Titanium.Web.Proxy.EventArguments
//can't access process Id of remote request from remote machine
return
-
1
;
#else
}
throw
new
PlatformNotSupportedException
();
#endif
});
}
...
...
Titanium.Web.Proxy/Extensions/DotNet45Extensions.cs
View file @
a87024a3
using
System.Net.Sockets
;
#
if
NET45
using
System.Net.Sockets
;
using
System.Security.Cryptography.X509Certificates
;
namespace
Titanium.Web.Proxy.Extensions
{
internal
static
class
DotNet45Extensions
{
#if NET45
/// <summary>
/// Disposes the specified client.
/// Int .NET framework 4.5 the TcpClient class has no Dispose method,
...
...
@@ -30,6 +30,6 @@ namespace Titanium.Web.Proxy.Extensions
{
store
.
Close
();
}
#endif
}
}
#endif
Titanium.Web.Proxy/Extensions/TcpExtensions.cs
View file @
a87024a3
...
...
@@ -6,7 +6,6 @@ namespace Titanium.Web.Proxy.Extensions
internal
static
class
TcpExtensions
{
#if NET45
/// <summary>
/// Gets the local port from a native TCP row object.
/// </summary>
...
...
@@ -26,6 +25,5 @@ namespace Titanium.Web.Proxy.Extensions
{
return
(
tcpRow
.
remotePort1
<<
8
)
+
tcpRow
.
remotePort2
+
(
tcpRow
.
remotePort3
<<
24
)
+
(
tcpRow
.
remotePort4
<<
16
);
}
#endif
}
}
Titanium.Web.Proxy/Helpers/NativeMethods.Tcp.cs
View file @
a87024a3
#if NET45
using
System
;
using
System.Net.NetworkInformation
;
using
System.Runtime.InteropServices
;
...
...
@@ -60,4 +59,3 @@ namespace Titanium.Web.Proxy.Helpers
internal
static
extern
uint
GetExtendedTcpTable
(
IntPtr
tcpTable
,
ref
int
size
,
bool
sort
,
int
ipVersion
,
int
tableClass
,
int
reserved
);
}
}
#endif
Titanium.Web.Proxy/Helpers/Network.cs
View file @
a87024a3
...
...
@@ -6,7 +6,6 @@ namespace Titanium.Web.Proxy.Helpers
{
internal
class
NetworkHelper
{
#if NET45
private
static
int
FindProcessIdFromLocalPort
(
int
port
,
IpVersion
ipVersion
)
{
var
tcpRow
=
TcpHelper
.
GetTcpRowByLocalPort
(
ipVersion
,
port
);
...
...
@@ -26,6 +25,7 @@ namespace Titanium.Web.Proxy.Helpers
return
FindProcessIdFromLocalPort
(
port
,
IpVersion
.
Ipv6
);
}
#if NET45
/// <summary>
/// Adapated from below link
/// http://stackoverflow.com/questions/11834091/how-to-check-if-localhost
...
...
Titanium.Web.Proxy/Helpers/RunTime.cs
View file @
a87024a3
#
if
NET45
using
System
;
using
System
;
using
System
.Runtime.InteropServices
;
namespace
Titanium.Web.Proxy.Helpers
{
...
...
@@ -14,10 +14,23 @@ namespace Titanium.Web.Proxy.Helpers
/// <returns></returns>
private
static
readonly
Lazy
<
bool
>
isRunningOnMono
=
new
Lazy
<
bool
>(()
=>
Type
.
GetType
(
"Mono.Runtime"
)
!=
null
);
#if NETSTANDARD2_0
/// <summary>
/// cache for Windows platform check
/// </summary>
/// <returns></returns>
private
static
readonly
Lazy
<
bool
>
isRunningOnWindows
=
new
Lazy
<
bool
>(()
=>
RuntimeInformation
.
IsOSPlatform
(
OSPlatform
.
Windows
));
#endif
/// <summary>
/// Is running on Mono?
/// </summary>
internal
static
bool
IsRunningOnMono
=>
isRunningOnMono
.
Value
;
#if NETSTANDARD2_0
internal
static
bool
IsWindows
=>
isRunningOnWindows
.
Value
;
#else
internal
static
bool
IsWindows
=>
true
;
#endif
}
}
#endif
Titanium.Web.Proxy/Helpers/Tcp.cs
View file @
a87024a3
...
...
@@ -16,7 +16,6 @@ namespace Titanium.Web.Proxy.Helpers
internal
class
TcpHelper
{
#if NET45
/// <summary>
/// Gets the extended TCP table.
/// </summary>
...
...
@@ -105,7 +104,6 @@ namespace Titanium.Web.Proxy.Helpers
return
null
;
}
#endif
/// <summary>
/// relays the input clientStream to the server at the specified host name and port with the given httpCmd and headers as prefix
...
...
Titanium.Web.Proxy/Network/Certificate/WinCertificateMaker.cs
View file @
a87024a3
#
if
NET45
using
System
;
using
System
;
using
System.Reflection
;
using
System.Security.Cryptography.X509Certificates
;
using
System.Threading
;
...
...
@@ -297,4 +296,3 @@ namespace Titanium.Web.Proxy.Network.Certificate
}
}
}
#endif
Titanium.Web.Proxy/Network/CertificateManager.cs
View file @
a87024a3
...
...
@@ -39,13 +39,11 @@ namespace Titanium.Web.Proxy.Network
get
{
return
engine
;
}
set
{
#if NET45
//For Mono only Bouncy Castle is supported
if
(
RunTime
.
IsRunningOnMono
)
//For Mono (or Non-Windows) only Bouncy Castle is supported
if
(!
RunTime
.
IsWindows
||
RunTime
.
IsRunningOnMono
)
{
value
=
CertificateEngine
.
BouncyCastle
;
}
#endif
if
(
value
!=
engine
)
{
...
...
@@ -55,11 +53,7 @@ namespace Titanium.Web.Proxy.Network
if
(
certEngine
==
null
)
{
#if NET45
certEngine
=
engine
==
CertificateEngine
.
BouncyCastle
?
(
ICertificateMaker
)
new
BCCertificateMaker
()
:
new
WinCertificateMaker
();
#else
certEngine
=
new
BCCertificateMaker
();
#endif
}
}
}
...
...
@@ -139,11 +133,7 @@ namespace Titanium.Web.Proxy.Network
private
string
GetRootCertificatePath
()
{
#if NET45
string
assemblyLocation
=
Assembly
.
GetExecutingAssembly
().
Location
;
#else
string
assemblyLocation
=
string
.
Empty
;
#endif
// dynamically loaded assemblies returns string.Empty location
if
(
assemblyLocation
==
string
.
Empty
)
...
...
@@ -230,7 +220,6 @@ namespace Titanium.Web.Proxy.Network
TrustRootCertificate
(
StoreLocation
.
LocalMachine
);
}
#if NET45
/// <summary>
/// Puts the certificate to the local machine's certificate store.
/// Needs elevated permission. Works only on Windows.
...
...
@@ -238,7 +227,7 @@ namespace Titanium.Web.Proxy.Network
/// <returns></returns>
public
bool
TrustRootCertificateAsAdministrator
()
{
if
(
RunTime
.
IsRunningOnMono
)
if
(
!
RunTime
.
IsWindows
||
RunTime
.
IsRunningOnMono
)
{
return
false
;
}
...
...
@@ -275,7 +264,6 @@ namespace Titanium.Web.Proxy.Network
return
true
;
}
#endif
/// <summary>
/// Removes the trusted certificates.
...
...
@@ -289,7 +277,6 @@ namespace Titanium.Web.Proxy.Network
RemoveTrustedRootCertificates
(
StoreLocation
.
LocalMachine
);
}
#if NET45
/// <summary>
/// Removes the trusted certificates from the local machine's certificate store.
/// Needs elevated permission. Works only on Windows.
...
...
@@ -297,7 +284,7 @@ namespace Titanium.Web.Proxy.Network
/// <returns></returns>
public
bool
RemoveTrustedRootCertificatesAsAdministrator
()
{
if
(
RunTime
.
IsRunningOnMono
)
if
(
!
RunTime
.
IsWindows
||
RunTime
.
IsRunningOnMono
)
{
return
false
;
}
...
...
@@ -329,7 +316,6 @@ namespace Titanium.Web.Proxy.Network
return
true
;
}
#endif
/// <summary>
/// Determines whether the root certificate is trusted.
...
...
@@ -383,11 +369,8 @@ namespace Titanium.Web.Proxy.Network
}
X509Certificate2
certificate
=
null
;
// todo: lock in netstandard, too
#if NET45
lock
(
string
.
Intern
(
certificateName
))
{
#endif
if
(
certificateCache
.
ContainsKey
(
certificateName
)
==
false
)
{
try
...
...
@@ -420,9 +403,7 @@ namespace Titanium.Web.Proxy.Network
return
cached
.
Certificate
;
}
}
#if NET45
}
#endif
return
certificate
;
}
...
...
Titanium.Web.Proxy/Network/Tcp/TcpRow.cs
View file @
a87024a3
#
if
NET45
using
System.Net
;
using
System.Net
;
using
Titanium.Web.Proxy.Extensions
;
using
Titanium.Web.Proxy.Helpers
;
...
...
@@ -62,4 +61,3 @@ namespace Titanium.Web.Proxy.Network.Tcp
internal
int
ProcessId
{
get
;
}
}
}
#endif
Titanium.Web.Proxy/Network/Tcp/TcpTable.cs
View file @
a87024a3
#
if
NET45
using
System.Collections
;
using
System.Collections
;
using
System.Collections.Generic
;
namespace
Titanium.Web.Proxy.Network.Tcp
...
...
@@ -45,4 +44,3 @@ namespace Titanium.Web.Proxy.Network.Tcp
}
}
}
#endif
Titanium.Web.Proxy/Network/WinAuth/Security/Common.cs
View file @
a87024a3
#
if
NET45
using
System
;
using
System
;
using
System.Runtime.InteropServices
;
namespace
Titanium.Web.Proxy.Network.WinAuth.Security
...
...
@@ -281,4 +280,3 @@ namespace Titanium.Web.Proxy.Network.WinAuth.Security
#
endregion
}
}
#endif
Titanium.Web.Proxy/Network/WinAuth/Security/LittleEndian.cs
View file @
a87024a3
#if NET45
//
// Mono.Security.BitConverterLE.cs
// Like System.BitConverter but always little endian
...
...
@@ -251,4 +250,3 @@ namespace Titanium.Web.Proxy.Network.WinAuth.Security
}
}
}
#endif
Titanium.Web.Proxy/Network/WinAuth/Security/Message.cs
View file @
a87024a3
#if NET45
//
// Nancy.Authentication.Ntlm.Protocol.Type3Message - Authentication
//
...
...
@@ -129,4 +128,3 @@ namespace Titanium.Web.Proxy.Network.WinAuth.Security
}
}
}
#endif
Titanium.Web.Proxy/Network/WinAuth/Security/State.cs
View file @
a87024a3
#
if
NET45
using
System
;
using
System
;
namespace
Titanium.Web.Proxy.Network.WinAuth.Security
{
...
...
@@ -43,4 +42,3 @@ namespace Titanium.Web.Proxy.Network.WinAuth.Security
}
}
}
#endif
Titanium.Web.Proxy/Network/WinAuth/Security/WinAuthEndPoint.cs
View file @
a87024a3
#
if
NET45
// http://pinvoke.net/default.aspx/secur32/InitializeSecurityContext.html
// http://pinvoke.net/default.aspx/secur32/InitializeSecurityContext.html
using
System
;
using
System.Collections.Concurrent
;
using
System.Collections.Generic
;
using
System.Linq
;
using
System.Runtime.InteropServices
;
using
System.Security.Claims
;
using
System.Security.Principal
;
using
System.Threading.Tasks
;
...
...
@@ -212,4 +212,3 @@ namespace Titanium.Web.Proxy.Network.WinAuth.Security
#
endregion
}
}
#endif
Titanium.Web.Proxy/Network/WinAuth/WinAuthHandler.cs
View file @
a87024a3
#
if
NET45
using
System
;
using
System
;
using
Titanium.Web.Proxy.Network.WinAuth.Security
;
namespace
Titanium.Web.Proxy.Network.WinAuth
...
...
@@ -41,4 +40,3 @@ namespace Titanium.Web.Proxy.Network.WinAuth
}
}
}
#endif
Titanium.Web.Proxy/ProxyServer.cs
View file @
a87024a3
...
...
@@ -17,9 +17,7 @@ using Titanium.Web.Proxy.Helpers.WinHttp;
using
Titanium.Web.Proxy.Models
;
using
Titanium.Web.Proxy.Network
;
using
Titanium.Web.Proxy.Network.Tcp
;
#if NET45
using
Titanium.Web.Proxy.Network.WinAuth.Security
;
#endif
namespace
Titanium.Web.Proxy
{
...
...
@@ -593,13 +591,11 @@ namespace Titanium.Web.Proxy
CertificateManager
.
ClearIdleCertificates
(
CertificateCacheTimeOutMinutes
);
#if NET45
if
(!
RunTime
.
IsRunningOnMono
)
if
(
RunTime
.
IsWindows
&&
!
RunTime
.
IsRunningOnMono
)
{
//clear orphaned windows auth states every 2 minutes
WinAuthEndPoint
.
ClearIdleStates
(
2
);
}
#endif
proxyRunning
=
true
;
}
...
...
Titanium.Web.Proxy/RequestHandler.cs
View file @
a87024a3
...
...
@@ -23,6 +23,8 @@ namespace Titanium.Web.Proxy
/// </summary>
partial
class
ProxyServer
{
private
bool
IsWindowsAuthenticationEnabledAndSupported
=>
EnableWinAuth
&&
RunTime
.
IsWindows
&&
!
RunTime
.
IsRunningOnMono
;
/// <summary>
/// This is called when client is aware of proxy
/// So for HTTPS requests client would send CONNECT header to negotiate a secure tcp tunnel via proxy
...
...
@@ -337,15 +339,13 @@ namespace Titanium.Web.Proxy
PrepareRequestHeaders
(
args
.
WebSession
.
Request
.
RequestHeaders
);
args
.
WebSession
.
Request
.
Host
=
args
.
WebSession
.
Request
.
RequestUri
.
Authority
;
#if NET45
//if win auth is enabled
//we need a cache of request body
//so that we can send it after authentication in WinAuthHandler.cs
if
(
EnableWinAuth
&&
!
RunTime
.
IsRunningOnMono
&&
args
.
WebSession
.
Request
.
HasBody
)
if
(
IsWindowsAuthenticationEnabledAndSupported
&&
args
.
WebSession
.
Request
.
HasBody
)
{
await
args
.
GetRequestBody
();
}
#endif
//If user requested interception do it
if
(
BeforeRequest
!=
null
)
...
...
Titanium.Web.Proxy/ResponseHandler.cs
View file @
a87024a3
...
...
@@ -28,11 +28,8 @@ namespace Titanium.Web.Proxy
var
response
=
args
.
WebSession
.
Response
;
#if NET45
//check for windows authentication
if
(
EnableWinAuth
&&
!
RunTime
.
IsRunningOnMono
&&
response
.
ResponseStatusCode
==
(
int
)
HttpStatusCode
.
Unauthorized
)
if
(
IsWindowsAuthenticationEnabledAndSupported
&&
response
.
ResponseStatusCode
==
(
int
)
HttpStatusCode
.
Unauthorized
)
{
bool
disposed
=
await
Handle401UnAuthorized
(
args
);
...
...
@@ -41,7 +38,6 @@ namespace Titanium.Web.Proxy
return
true
;
}
}
#endif
args
.
ReRequest
=
false
;
...
...
Titanium.Web.Proxy/Titanium.Web.Proxy.csproj
View file @
a87024a3
...
...
@@ -12,7 +12,13 @@
<ItemGroup>
<PackageReference Include="Portable.BouncyCastle" Version="1.8.1.2" />
<PackageReference Include="StreamExtended" Version="1.0.18" />
<PackageReference Include="StreamExtended" Version="1.0.81" />
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0'">
<PackageReference Include="System.Security.Principal.Windows">
<Version>4.4.0</Version>
</PackageReference>
</ItemGroup>
</Project>
\ No newline at end of file
Titanium.Web.Proxy/Titanium.Web.Proxy.nuspec
View file @
a87024a3
...
...
@@ -14,7 +14,7 @@
<copyright>
Copyright
©
Titanium. All rights reserved.
</copyright>
<tags></tags>
<dependencies>
<dependency
id=
"StreamExtended"
version=
"1.0.
18
"
/>
<dependency
id=
"StreamExtended"
version=
"1.0.
81
"
/>
<dependency
id=
"Portable.BouncyCastle"
version=
"1.8.1.2"
/>
</dependencies>
</metadata>
...
...
Titanium.Web.Proxy/WinAuthHandler.cs
View file @
a87024a3
#
if
NET45
using
System
;
using
System
;
using
System.Collections.Generic
;
using
System.Linq
;
using
System.Threading.Tasks
;
...
...
@@ -149,4 +148,3 @@ namespace Titanium.Web.Proxy
}
}
}
#endif
Titanium.Web.Proxy/app.config
View file @
a87024a3
...
...
@@ -2,14 +2,6 @@
<
configuration
>
<
runtime
>
<
assemblyBinding
xmlns
=
"urn:schemas-microsoft-com:asm.v1"
>
<
dependentAssembly
>
<
assemblyIdentity
name
=
"System.Runtime"
publicKeyToken
=
"b03f5f7f11d50a3a"
culture
=
"neutral"
/>
<
bindingRedirect
oldVersion
=
"0.0.0.0-2.6.10.0"
newVersion
=
"2.6.10.0"
/>
</
dependentAssembly
>
<
dependentAssembly
>
<
assemblyIdentity
name
=
"System.Threading.Tasks"
publicKeyToken
=
"b03f5f7f11d50a3a"
culture
=
"neutral"
/>
<
bindingRedirect
oldVersion
=
"0.0.0.0-2.6.10.0"
newVersion
=
"2.6.10.0"
/>
</
dependentAssembly
>
</
assemblyBinding
>
</
runtime
>
<
startup
>
...
...
Titanium.Web.Proxy/packages.config
View file @
a87024a3
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
<
packages
>
<
package
id
=
"Portable.BouncyCastle"
version
=
"1.8.1.2"
targetFramework
=
"net45"
/>
<
package
id
=
"StreamExtended"
version
=
"1.0.
18
"
targetFramework
=
"net45"
/>
<
package
id
=
"StreamExtended"
version
=
"1.0.
81
"
targetFramework
=
"net45"
/>
</
packages
>
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment