summaryrefslogtreecommitdiffstats
path: root/src/DotNetOpenAuth.OpenId/OpenId/OpenIdUtilities.cs
diff options
context:
space:
mode:
authorAndrew Arnott <andrewarnott@gmail.com>2012-12-31 08:17:25 -0800
committerAndrew Arnott <andrewarnott@gmail.com>2012-12-31 08:17:25 -0800
commit90b6aa8ba9d15e0254eccf05b73b24f334128654 (patch)
tree45676300b8dbd27931607958f1b66b4f288c259e /src/DotNetOpenAuth.OpenId/OpenId/OpenIdUtilities.cs
parent187d3c24b6a76ec0898399f738b3a4f82031ceb0 (diff)
downloadDotNetOpenAuth-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.cs48
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>