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
f3e64cd7
Unverified
Commit
f3e64cd7
authored
Oct 31, 2018
by
Jehonathan Thomas
Committed by
GitHub
Oct 31, 2018
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #517 from roblascelles/read-body-and-cancel-request-to-server
Read body and cancel request to server
parents
e765f16a
9c56e635
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
154 additions
and
88 deletions
+154
-88
SessionEventArgs.cs
src/Titanium.Web.Proxy/EventArguments/SessionEventArgs.cs
+1
-1
InterceptionTests.cs
.../Titanium.Web.Proxy.IntegrationTests/InterceptionTests.cs
+46
-0
ProxyTestController.cs
...itanium.Web.Proxy.IntegrationTests/ProxyTestController.cs
+105
-0
SslTests.cs
tests/Titanium.Web.Proxy.IntegrationTests/SslTests.cs
+0
-87
Titanium.Web.Proxy.IntegrationTests.csproj
...tegrationTests/Titanium.Web.Proxy.IntegrationTests.csproj
+2
-0
No files found.
src/Titanium.Web.Proxy/EventArguments/SessionEventArgs.cs
View file @
f3e64cd7
...
@@ -179,7 +179,7 @@ namespace Titanium.Web.Proxy.EventArguments
...
@@ -179,7 +179,7 @@ namespace Titanium.Web.Proxy.EventArguments
internal
async
Task
SyphonOutBodyAsync
(
bool
isRequest
,
CancellationToken
cancellationToken
)
internal
async
Task
SyphonOutBodyAsync
(
bool
isRequest
,
CancellationToken
cancellationToken
)
{
{
var
requestResponse
=
isRequest
?
(
RequestResponseBase
)
WebSession
.
Request
:
WebSession
.
Response
;
var
requestResponse
=
isRequest
?
(
RequestResponseBase
)
WebSession
.
Request
:
WebSession
.
Response
;
if
(
requestResponse
.
Original
IsBodyRead
||
!
requestResponse
.
OriginalHasBody
)
if
(
requestResponse
.
IsBodyRead
||
!
requestResponse
.
OriginalHasBody
)
{
{
return
;
return
;
}
}
...
...
tests/Titanium.Web.Proxy.IntegrationTests/InterceptionTests.cs
0 → 100644
View file @
f3e64cd7
using
System
;
using
System.Net
;
using
System.Net.Http
;
using
System.Net.Mime
;
using
System.Text
;
using
Microsoft.VisualStudio.TestTools.UnitTesting
;
namespace
Titanium.Web.Proxy.IntegrationTests
{
[
TestClass
]
public
class
InterceptionTests
{
[
TestMethod
]
public
void
CanInterceptPostRequests
()
{
string
testUrl
=
"http://interceptthis.com"
;
int
proxyPort
=
8086
;
var
proxy
=
new
ProxyTestController
();
proxy
.
StartProxy
(
proxyPort
);
using
(
var
client
=
CreateHttpClient
(
testUrl
,
proxyPort
))
{
var
response
=
client
.
PostAsync
(
new
Uri
(
testUrl
),
new
StringContent
(
"hello!"
)).
Result
;
Assert
.
AreEqual
(
HttpStatusCode
.
OK
,
response
.
StatusCode
);
var
body
=
response
.
Content
.
ReadAsStringAsync
().
Result
;
Assert
.
IsTrue
(
body
.
Contains
(
"TitaniumWebProxy-Stopped!!"
));
}
}
private
HttpClient
CreateHttpClient
(
string
url
,
int
localProxyPort
)
{
var
handler
=
new
HttpClientHandler
{
Proxy
=
new
WebProxy
(
$"http://localhost:
{
localProxyPort
}
"
,
false
),
UseProxy
=
true
};
var
client
=
new
HttpClient
(
handler
);
return
client
;
}
}
}
\ No newline at end of file
tests/Titanium.Web.Proxy.IntegrationTests/ProxyTestController.cs
0 → 100644
View file @
f3e64cd7
using
System
;
using
System.Diagnostics
;
using
System.Net
;
using
System.Net.Security
;
using
System.Threading.Tasks
;
using
Titanium.Web.Proxy.EventArguments
;
using
Titanium.Web.Proxy.Models
;
namespace
Titanium.Web.Proxy.IntegrationTests
{
public
class
ProxyTestController
{
private
readonly
ProxyServer
proxyServer
;
public
ProxyTestController
()
{
proxyServer
=
new
ProxyServer
();
}
public
void
StartProxy
(
int
proxyPort
)
{
proxyServer
.
BeforeRequest
+=
OnRequest
;
proxyServer
.
BeforeResponse
+=
OnResponse
;
proxyServer
.
ServerCertificateValidationCallback
+=
OnCertificateValidation
;
proxyServer
.
ClientCertificateSelectionCallback
+=
OnCertificateSelection
;
var
explicitEndPoint
=
new
ExplicitProxyEndPoint
(
IPAddress
.
Any
,
proxyPort
,
true
);
// An explicit endpoint is where the client knows about the existance of a proxy
// So client sends request in a proxy friendly manner
proxyServer
.
AddEndPoint
(
explicitEndPoint
);
proxyServer
.
Start
();
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
.
BeforeRequest
-=
OnRequest
;
proxyServer
.
BeforeResponse
-=
OnResponse
;
proxyServer
.
ServerCertificateValidationCallback
-=
OnCertificateValidation
;
proxyServer
.
ClientCertificateSelectionCallback
-=
OnCertificateSelection
;
proxyServer
.
Stop
();
}
// intecept & cancel, redirect or update requests
public
async
Task
OnRequest
(
object
sender
,
SessionEventArgs
e
)
{
Debug
.
WriteLine
(
e
.
WebSession
.
Request
.
Url
);
if
(
e
.
WebSession
.
Request
.
Url
.
Contains
(
"interceptthis.com"
))
{
if
(
e
.
WebSession
.
Request
.
HasBody
)
{
var
body
=
await
e
.
GetRequestBodyAsString
();
}
e
.
Ok
(
"<html><body>TitaniumWebProxy-Stopped!!</body></html>"
);
return
;
}
await
Task
.
FromResult
(
0
);
}
// Modify response
public
async
Task
OnResponse
(
object
sender
,
SessionEventArgs
e
)
{
await
Task
.
FromResult
(
0
);
}
/// <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
);
}
}
}
\ No newline at end of file
tests/Titanium.Web.Proxy.IntegrationTests/SslTests.cs
View file @
f3e64cd7
using
System
;
using
System
;
using
System.Diagnostics
;
using
System.Net
;
using
System.Net
;
using
System.Net.Http
;
using
System.Net.Http
;
using
System.Net.Security
;
using
System.Threading.Tasks
;
using
Microsoft.VisualStudio.TestTools.UnitTesting
;
using
Microsoft.VisualStudio.TestTools.UnitTesting
;
using
Titanium.Web.Proxy.EventArguments
;
using
Titanium.Web.Proxy.Models
;
namespace
Titanium.Web.Proxy.IntegrationTests
namespace
Titanium.Web.Proxy.IntegrationTests
{
{
...
@@ -43,86 +38,4 @@ namespace Titanium.Web.Proxy.IntegrationTests
...
@@ -43,86 +38,4 @@ namespace Titanium.Web.Proxy.IntegrationTests
return
client
;
return
client
;
}
}
}
}
public
class
ProxyTestController
{
private
readonly
ProxyServer
proxyServer
;
public
ProxyTestController
()
{
proxyServer
=
new
ProxyServer
();
}
public
void
StartProxy
(
int
proxyPort
)
{
proxyServer
.
BeforeRequest
+=
OnRequest
;
proxyServer
.
BeforeResponse
+=
OnResponse
;
proxyServer
.
ServerCertificateValidationCallback
+=
OnCertificateValidation
;
proxyServer
.
ClientCertificateSelectionCallback
+=
OnCertificateSelection
;
var
explicitEndPoint
=
new
ExplicitProxyEndPoint
(
IPAddress
.
Any
,
proxyPort
,
true
);
// An explicit endpoint is where the client knows about the existance of a proxy
// So client sends request in a proxy friendly manner
proxyServer
.
AddEndPoint
(
explicitEndPoint
);
proxyServer
.
Start
();
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
.
BeforeRequest
-=
OnRequest
;
proxyServer
.
BeforeResponse
-=
OnResponse
;
proxyServer
.
ServerCertificateValidationCallback
-=
OnCertificateValidation
;
proxyServer
.
ClientCertificateSelectionCallback
-=
OnCertificateSelection
;
proxyServer
.
Stop
();
}
// intecept & cancel, redirect or update requests
public
async
Task
OnRequest
(
object
sender
,
SessionEventArgs
e
)
{
Debug
.
WriteLine
(
e
.
WebSession
.
Request
.
Url
);
await
Task
.
FromResult
(
0
);
}
// Modify response
public
async
Task
OnResponse
(
object
sender
,
SessionEventArgs
e
)
{
await
Task
.
FromResult
(
0
);
}
/// <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
);
}
}
}
}
tests/Titanium.Web.Proxy.IntegrationTests/Titanium.Web.Proxy.IntegrationTests.csproj
View file @
f3e64cd7
...
@@ -70,6 +70,8 @@
...
@@ -70,6 +70,8 @@
</Otherwise>
</Otherwise>
</Choose>
</Choose>
<ItemGroup>
<ItemGroup>
<Compile
Include=
"InterceptionTests.cs"
/>
<Compile
Include=
"ProxyTestController.cs"
/>
<Compile
Include=
"SslTests.cs"
/>
<Compile
Include=
"SslTests.cs"
/>
<Compile
Include=
"Properties\AssemblyInfo.cs"
/>
<Compile
Include=
"Properties\AssemblyInfo.cs"
/>
</ItemGroup>
</ItemGroup>
...
...
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