summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/DotNetOpenAuth.Core/Messaging/MessagingUtilities.cs30
-rw-r--r--src/DotNetOpenAuth.OpenId/OpenId/OpenIdUtilities.cs12
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>