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
77a1fb46
Commit
77a1fb46
authored
Sep 24, 2017
by
Honfika
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
common basic example project, allow windows authentication with dotnet core on windows
parent
8f70a22c
Show whitespace changes
Inline
Side-by-side
Showing
31 changed files
with
85 additions
and
534 deletions
+85
-534
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.sln
Titanium.Web.Proxy.sln
+8
-15
SessionEventArgs.cs
Titanium.Web.Proxy/EventArguments/SessionEventArgs.cs
+11
-10
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
+6
-0
WinAuthHandler.cs
Titanium.Web.Proxy/WinAuthHandler.cs
+1
-3
app.config
Titanium.Web.Proxy/app.config
+0
-8
No files found.
Examples/Titanium.Web.Proxy.Examples.Basic.Standard/Helpers/ConsoleHelper.cs
deleted
100644 → 0
View file @
8f70a22c
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 @
8f70a22c
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 @
8f70a22c
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 @
8f70a22c
<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 @
77a1fb46
<?
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 @
77a1fb46
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 @
77a1fb46
...
...
@@ -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 @
77a1fb46
<
?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
Titanium.Web.Proxy.sln
View file @
77a1fb46
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 @
77a1fb46
...
...
@@ -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/TcpExtensions.cs
View file @
77a1fb46
...
...
@@ -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 @
77a1fb46
#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 @
77a1fb46
...
...
@@ -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 @
77a1fb46
#
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
=>
RuntimeInformation
.
IsOSPlatform
(
OSPlatform
.
Windows
);
#else
internal
static
bool
IsWindows
=>
true
;
#endif
}
}
#endif
Titanium.Web.Proxy/Helpers/Tcp.cs
View file @
77a1fb46
...
...
@@ -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 @
77a1fb46
#
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 @
77a1fb46
...
...
@@ -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 @
77a1fb46
#
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 @
77a1fb46
#
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 @
77a1fb46
#
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 @
77a1fb46
#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 @
77a1fb46
#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 @
77a1fb46
#
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 @
77a1fb46
#
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 @
77a1fb46
#
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 @
77a1fb46
...
...
@@ -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 @
77a1fb46
...
...
@@ -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 @
77a1fb46
...
...
@@ -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 @
77a1fb46
...
...
@@ -15,4 +15,10 @@
<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/WinAuthHandler.cs
View file @
77a1fb46
#
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 @
77a1fb46
...
...
@@ -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
>
...
...
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