diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/DotNetOpenAuth.Core/Messaging/MessagingUtilities.cs | 30 | ||||
-rw-r--r-- | src/DotNetOpenAuth.OpenId/OpenId/OpenIdUtilities.cs | 12 |
2 files changed, 31 insertions, 11 deletions
diff --git a/src/DotNetOpenAuth.Core/Messaging/MessagingUtilities.cs b/src/DotNetOpenAuth.Core/Messaging/MessagingUtilities.cs index 4f4eb66..2aee6ea 100644 --- a/src/DotNetOpenAuth.Core/Messaging/MessagingUtilities.cs +++ b/src/DotNetOpenAuth.Core/Messaging/MessagingUtilities.cs @@ -383,6 +383,24 @@ namespace DotNetOpenAuth.Messaging { return new HttpResponseMessageActionResult(response); } + public static void Send(this HttpResponseMessage response, HttpContextBase context = null) { + Requires.NotNull(response, "response"); + context = context ?? new HttpContextWrapper(HttpContext.Current); + Verify.Operation(context != null, MessagingStrings.HttpContextRequired); + + context.Response.StatusCode = (int)response.StatusCode; + context.Response.StatusDescription = response.ReasonPhrase; + foreach (var header in response.Headers) { + foreach (var value in header.Value) { + context.Response.AddHeader(header.Key, value); + } + } + + if (response.Content != null) { + response.Content.CopyToAsync(context.Response.OutputStream).Wait(); + } + } + internal static void DisposeIfNotNull(this IDisposable disposable) { if (disposable != null) { disposable.Dispose(); @@ -1977,17 +1995,7 @@ namespace DotNetOpenAuth.Messaging { } public override void ExecuteResult(ControllerContext context) { - context.HttpContext.Response.StatusCode = (int)this.response.StatusCode; - context.HttpContext.Response.StatusDescription = this.response.ReasonPhrase; - foreach (var header in this.response.Headers) { - foreach (var value in header.Value) { - context.HttpContext.Response.AddHeader(header.Key, value); - } - } - - if (this.response.Content != null) { - this.response.Content.CopyToAsync(context.HttpContext.Response.OutputStream).Wait(); - } + this.response.Send(context.HttpContext); } } } diff --git a/src/DotNetOpenAuth.OpenId/OpenId/OpenIdUtilities.cs b/src/DotNetOpenAuth.OpenId/OpenId/OpenIdUtilities.cs index f8d542d..b656150 100644 --- a/src/DotNetOpenAuth.OpenId/OpenId/OpenIdUtilities.cs +++ b/src/DotNetOpenAuth.OpenId/OpenId/OpenIdUtilities.cs @@ -15,12 +15,15 @@ namespace DotNetOpenAuth.OpenId { using System.Net.Cache; using System.Net.Http; using System.Text.RegularExpressions; + using System.Threading; using System.Threading.Tasks; using System.Web; using System.Web.UI; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OpenId.ChannelElements; using DotNetOpenAuth.OpenId.Extensions; + using DotNetOpenAuth.OpenId.RelyingParty; + using Org.Mentalis.Security.Cryptography; using Validation; @@ -79,6 +82,15 @@ namespace DotNetOpenAuth.OpenId { return string.Format(CultureInfo.InvariantCulture, "{{{0}}}{{{1}}}", DateTime.UtcNow.Ticks, uniq); } + public static async Task RedirectToProviderAsync(this IAuthenticationRequest authenticationRequest, HttpContextBase context = null, CancellationToken cancellationToken = default(CancellationToken)) { + Requires.NotNull(authenticationRequest, "authenticationRequest"); + Verify.Operation(context != null || HttpContext.Current != null, MessagingStrings.HttpContextRequired); + + context = context ?? new HttpContextWrapper(HttpContext.Current); + var response = await authenticationRequest.GetRedirectingResponseAsync(cancellationToken); + response.Send(context); + } + /// <summary> /// Gets the OpenID protocol instance for the version in a message. /// </summary> |