Skip to content
This repository was archived by the owner on Mar 20, 2019. It is now read-only.

Commit 5bdaf44

Browse files
committed
Fixes some OpenID redirect tests.
1 parent 28ecaad commit 5bdaf44

5 files changed

Lines changed: 65 additions & 3 deletions

File tree

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
namespace DotNetOpenAuth.Test {
2+
using System;
3+
using System.Collections.Generic;
4+
using System.Linq;
5+
using System.Net;
6+
using System.Net.Http;
7+
using System.Text;
8+
using System.Threading.Tasks;
9+
10+
using DotNetOpenAuth.Messaging;
11+
12+
internal class AutoRedirectHandler : DelegatingHandler {
13+
internal AutoRedirectHandler(HttpMessageHandler innerHandler)
14+
: base(innerHandler) {
15+
}
16+
17+
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken) {
18+
HttpResponseMessage response = null;
19+
do {
20+
if (response != null) {
21+
var modifiedRequest = MessagingUtilities.Clone(request);
22+
modifiedRequest.RequestUri = new Uri(request.RequestUri, response.Headers.Location);
23+
request = modifiedRequest;
24+
}
25+
26+
response = await base.SendAsync(request, cancellationToken);
27+
}
28+
while (response.StatusCode == HttpStatusCode.Redirect);
29+
30+
return response;
31+
}
32+
}
33+
}

src/DotNetOpenAuth.Test/DotNetOpenAuth.Test.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@
104104
</Reference>
105105
</ItemGroup>
106106
<ItemGroup>
107+
<Compile Include="AutoRedirectHandler.cs" />
107108
<Compile Include="Configuration\SectionTests.cs" />
108109
<Compile Include="Hosting\AspNetHost.cs" />
109110
<Compile Include="Hosting\HostingTests.cs" />

src/DotNetOpenAuth.Test/MockingHostFactories.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public List<TestBase.Handler> Handlers {
2828
public CookieContainer CookieContainer { get; set; }
2929

3030
public HttpMessageHandler CreateHttpMessageHandler() {
31-
return new CookieDelegatingHandler(new ForwardingMessageHandler(this.handlers, this), this.CookieContainer);
31+
return new AutoRedirectHandler(new CookieDelegatingHandler(new ForwardingMessageHandler(this.handlers, this), this.CookieContainer));
3232
}
3333

3434
public HttpClient CreateHttpClient(HttpMessageHandler handler = null) {

src/DotNetOpenAuth.Test/Mocks/MockHttpRequest.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,8 +131,21 @@ internal static void RegisterMockResponse(this TestBase test, Uri requestUri, Ur
131131
}
132132

133133
internal static void RegisterMockResponse(this TestBase test, Uri requestUri, Uri responseUri, string contentType, WebHeaderCollection headers, string content) {
134+
Requires.NotNull(requestUri, "requestUri");
135+
Requires.NotNull(responseUri, "responseUri");
136+
Requires.NotNullOrEmpty(contentType, "contentType");
137+
134138
test.Handle(requestUri).By(req => {
135139
var response = new HttpResponseMessage();
140+
response.RequestMessage = req;
141+
142+
if (requestUri != responseUri) {
143+
// Simulate having followed redirects to get the final response.
144+
var clonedRequest = MessagingUtilities.Clone(req);
145+
clonedRequest.RequestUri = responseUri;
146+
response.RequestMessage = clonedRequest;
147+
}
148+
136149
response.CopyHeadersFrom(headers);
137150
response.Content = new StringContent(content, Encoding.Default, contentType);
138151
return response;

src/DotNetOpenAuth.Test/OpenId/DiscoveryServices/UriDiscoveryServiceTests.cs

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ namespace DotNetOpenAuth.Test.OpenId.DiscoveryServices {
99
using System.Collections.Generic;
1010
using System.Linq;
1111
using System.Net;
12+
using System.Net.Http;
1213
using System.Text;
1314
using System.Threading;
1415
using System.Threading.Tasks;
@@ -237,11 +238,25 @@ private async Task DiscoverAsync(string url, ProtocolVersion version, Identifier
237238
await this.DiscoverAsync(url, version, expectedLocalId, providerEndpoint, expectSreg, useRedirect, null);
238239
}
239240

241+
private string RegisterDiscoveryRedirector(Uri baseUrl) {
242+
var redirectorUrl = new Uri(baseUrl, "Discovery/htmldiscovery/redirect.aspx");
243+
this.Handle(redirectorUrl).By(req => {
244+
string redirectTarget = HttpUtility.ParseQueryString(req.RequestUri.Query)["target"];
245+
var response = new HttpResponseMessage(HttpStatusCode.Redirect);
246+
response.Headers.Location = new Uri(redirectTarget, UriKind.RelativeOrAbsolute);
247+
response.RequestMessage = req;
248+
return response;
249+
});
250+
251+
return redirectorUrl.AbsoluteUri + "?target=";
252+
}
253+
240254
private async Task DiscoverAsync(string url, ProtocolVersion version, Identifier expectedLocalId, string providerEndpoint, bool expectSreg, bool useRedirect, WebHeaderCollection headers) {
241255
Protocol protocol = Protocol.Lookup(version);
242256
Uri baseUrl = new Uri("http://localhost/");
257+
string redirectBase = this.RegisterDiscoveryRedirector(baseUrl);
243258
UriIdentifier claimedId = new Uri(baseUrl, url);
244-
UriIdentifier userSuppliedIdentifier = new Uri(baseUrl, "Discovery/htmldiscovery/redirect.aspx?target=" + url);
259+
UriIdentifier userSuppliedIdentifier = new Uri(redirectBase + Uri.EscapeDataString(url));
245260
if (expectedLocalId == null) {
246261
expectedLocalId = claimedId;
247262
}
@@ -255,7 +270,7 @@ private async Task DiscoverAsync(string url, ProtocolVersion version, Identifier
255270
} else {
256271
throw new InvalidOperationException();
257272
}
258-
this.RegisterMockResponse(new Uri(idToDiscover), claimedId, contentType, headers ?? new WebHeaderCollection(), LoadEmbeddedFile(url));
273+
this.RegisterMockResponse(claimedId, claimedId, contentType, headers ?? new WebHeaderCollection(), LoadEmbeddedFile(url));
259274

260275
IdentifierDiscoveryResult expected = IdentifierDiscoveryResult.CreateForClaimedIdentifier(
261276
claimedId,

0 commit comments

Comments
 (0)