diff options
author | Andrew Arnott <andrewarnott@gmail.com> | 2012-12-31 08:17:25 -0800 |
---|---|---|
committer | Andrew Arnott <andrewarnott@gmail.com> | 2012-12-31 08:17:25 -0800 |
commit | 90b6aa8ba9d15e0254eccf05b73b24f334128654 (patch) | |
tree | 45676300b8dbd27931607958f1b66b4f288c259e /src/DotNetOpenAuth.OpenId/OpenId/OpenIdUtilities.cs | |
parent | 187d3c24b6a76ec0898399f738b3a4f82031ceb0 (diff) | |
download | DotNetOpenAuth-90b6aa8ba9d15e0254eccf05b73b24f334128654.zip DotNetOpenAuth-90b6aa8ba9d15e0254eccf05b73b24f334128654.tar.gz DotNetOpenAuth-90b6aa8ba9d15e0254eccf05b73b24f334128654.tar.bz2 |
Fixes build breaks in DNOA.OpenId.
Diffstat (limited to 'src/DotNetOpenAuth.OpenId/OpenId/OpenIdUtilities.cs')
-rw-r--r-- | src/DotNetOpenAuth.OpenId/OpenId/OpenIdUtilities.cs | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/src/DotNetOpenAuth.OpenId/OpenId/OpenIdUtilities.cs b/src/DotNetOpenAuth.OpenId/OpenId/OpenIdUtilities.cs index e04a633..f0ed946 100644 --- a/src/DotNetOpenAuth.OpenId/OpenId/OpenIdUtilities.cs +++ b/src/DotNetOpenAuth.OpenId/OpenId/OpenIdUtilities.cs @@ -11,7 +11,11 @@ namespace DotNetOpenAuth.OpenId { using System.Globalization; using System.IO; using System.Linq; + using System.Net; + using System.Net.Cache; + using System.Net.Http; using System.Text.RegularExpressions; + using System.Threading.Tasks; using System.Web; using System.Web.UI; using DotNetOpenAuth.Messaging; @@ -180,6 +184,50 @@ namespace DotNetOpenAuth.OpenId { return fullyQualifiedRealm; } + internal static HttpClient CreateHttpClient(this IHostFactories hostFactories, bool requireSsl, RequestCachePolicy cachePolicy = null) { + Requires.NotNull(hostFactories, "hostFactories"); + + var handler = hostFactories.CreateHttpMessageHandler(); + var webRequestHandler = handler as WebRequestHandler; + var untrustedHandler = handler as UntrustedWebRequestHandler; + if (webRequestHandler != null) { + if (cachePolicy != null) { + webRequestHandler.CachePolicy = cachePolicy; + } + } else if (untrustedHandler != null) { + if (cachePolicy != null) { + untrustedHandler.CachePolicy = cachePolicy; + } + + untrustedHandler.IsSslRequired = requireSsl; + } else { + Logger.Http.DebugFormat("Unable to set cache policy on unsupported {0}.", handler.GetType().FullName); + } + + return hostFactories.CreateHttpClient(handler); + } + + internal static Uri GetDirectUriRequest(this HttpResponseMessage response) { + Requires.NotNull(response, "response"); + Requires.Argument( + response.StatusCode == HttpStatusCode.Redirect || response.StatusCode == HttpStatusCode.RedirectKeepVerb + || response.StatusCode == HttpStatusCode.RedirectMethod || response.StatusCode == HttpStatusCode.TemporaryRedirect, + "response", + "Redirecting response expected."); + Requires.Argument(response.Headers.Location != null, "response", "Redirect URL header expected."); + Requires.Argument(response.Content == null || response.Content is FormUrlEncodedContent, "response", "FormUrlEncodedContent expected"); + + var builder = new UriBuilder(response.Headers.Location); + if (response.Content != null) { + var content = response.Content.ReadAsStringAsync(); + Assumes.True(content.IsCompleted); // cached in memory, so it should never complete asynchronously. + var formFields = HttpUtility.ParseQueryString(content.Result).ToDictionary(); + MessagingUtilities.AppendQueryArgs(builder, formFields); + } + + return builder.Uri; + } + /// <summary> /// Gets the extension factories from the extension aggregator on an OpenID channel. /// </summary> |