summaryrefslogtreecommitdiffstats
path: root/src/DotNetOpenAuth.OpenId
diff options
context:
space:
mode:
Diffstat (limited to 'src/DotNetOpenAuth.OpenId')
-rw-r--r--src/DotNetOpenAuth.OpenId/OpenId/ChannelElements/BackwardCompatibilityBindingElement.cs6
-rw-r--r--src/DotNetOpenAuth.OpenId/OpenId/ChannelElements/ExtensionsBindingElement.cs6
-rw-r--r--src/DotNetOpenAuth.OpenId/OpenId/ChannelElements/OpenIdChannel.cs23
-rw-r--r--src/DotNetOpenAuth.OpenId/OpenId/ChannelElements/ReturnToSignatureBindingElement.cs6
-rw-r--r--src/DotNetOpenAuth.OpenId/OpenId/ChannelElements/SigningBindingElement.cs3
-rw-r--r--src/DotNetOpenAuth.OpenId/OpenId/ChannelElements/SkipSecurityBindingElement.cs3
-rw-r--r--src/DotNetOpenAuth.OpenId/OpenId/Messages/NegativeAssertionResponse.cs16
-rw-r--r--src/DotNetOpenAuth.OpenId/OpenId/OpenIdUtilities.cs18
-rw-r--r--src/DotNetOpenAuth.OpenId/OpenId/Realm.cs1
-rw-r--r--src/DotNetOpenAuth.OpenId/OpenId/UntrustedWebRequestHandler.cs39
-rw-r--r--src/DotNetOpenAuth.OpenId/OpenId/XriDiscoveryProxyService.cs3
-rw-r--r--src/DotNetOpenAuth.OpenId/Yadis/DiscoveryResult.cs9
12 files changed, 115 insertions, 18 deletions
diff --git a/src/DotNetOpenAuth.OpenId/OpenId/ChannelElements/BackwardCompatibilityBindingElement.cs b/src/DotNetOpenAuth.OpenId/OpenId/ChannelElements/BackwardCompatibilityBindingElement.cs
index 3fe3fe2..4c55360 100644
--- a/src/DotNetOpenAuth.OpenId/OpenId/ChannelElements/BackwardCompatibilityBindingElement.cs
+++ b/src/DotNetOpenAuth.OpenId/OpenId/ChannelElements/BackwardCompatibilityBindingElement.cs
@@ -18,8 +18,14 @@ namespace DotNetOpenAuth.OpenId.ChannelElements {
/// are required to send back with positive assertions.
/// </summary>
internal class BackwardCompatibilityBindingElement : IChannelBindingElement {
+ /// <summary>
+ /// A reusable pre-completed task that may be returned multiple times to reduce GC pressure.
+ /// </summary>
private static readonly Task<MessageProtections?> NullTask = Task.FromResult<MessageProtections?>(null);
+ /// <summary>
+ /// A reusable pre-completed task that may be returned multiple times to reduce GC pressure.
+ /// </summary>
private static readonly Task<MessageProtections?> NoneTask =
Task.FromResult<MessageProtections?>(MessageProtections.None);
diff --git a/src/DotNetOpenAuth.OpenId/OpenId/ChannelElements/ExtensionsBindingElement.cs b/src/DotNetOpenAuth.OpenId/OpenId/ChannelElements/ExtensionsBindingElement.cs
index 5d6a51e..727dad7 100644
--- a/src/DotNetOpenAuth.OpenId/OpenId/ChannelElements/ExtensionsBindingElement.cs
+++ b/src/DotNetOpenAuth.OpenId/OpenId/ChannelElements/ExtensionsBindingElement.cs
@@ -23,8 +23,14 @@ namespace DotNetOpenAuth.OpenId.ChannelElements {
/// their carrying OpenID messages.
/// </summary>
internal class ExtensionsBindingElement : IChannelBindingElement {
+ /// <summary>
+ /// A reusable pre-completed task that may be returned multiple times to reduce GC pressure.
+ /// </summary>
private static readonly Task<MessageProtections?> NullTask = Task.FromResult<MessageProtections?>(null);
+ /// <summary>
+ /// A reusable pre-completed task that may be returned multiple times to reduce GC pressure.
+ /// </summary>
private static readonly Task<MessageProtections?> NoneTask =
Task.FromResult<MessageProtections?>(MessageProtections.None);
diff --git a/src/DotNetOpenAuth.OpenId/OpenId/ChannelElements/OpenIdChannel.cs b/src/DotNetOpenAuth.OpenId/OpenId/ChannelElements/OpenIdChannel.cs
index 3b650fc..6d4df61 100644
--- a/src/DotNetOpenAuth.OpenId/OpenId/ChannelElements/OpenIdChannel.cs
+++ b/src/DotNetOpenAuth.OpenId/OpenId/ChannelElements/OpenIdChannel.cs
@@ -200,15 +200,38 @@ namespace DotNetOpenAuth.OpenId.ChannelElements {
return preparedResponse;
}
+ /// <summary>
+ /// Provides derived-types the opportunity to wrap an <see cref="HttpMessageHandler" /> with another one.
+ /// </summary>
+ /// <param name="innerHandler">The inner handler received from <see cref="IHostFactories" /></param>
+ /// <returns>
+ /// The handler to use in <see cref="HttpClient" /> instances.
+ /// </returns>
protected override HttpMessageHandler WrapMessageHandler(HttpMessageHandler innerHandler) {
return new ErrorFilteringMessageHandler(base.WrapMessageHandler(innerHandler));
}
+ /// <summary>
+ /// An HTTP handler that throws an exception if the response message's HTTP status code doesn't fall
+ /// within those allowed by the OpenID spec.
+ /// </summary>
private class ErrorFilteringMessageHandler : DelegatingHandler {
+ /// <summary>
+ /// Initializes a new instance of the <see cref="ErrorFilteringMessageHandler" /> class.
+ /// </summary>
+ /// <param name="innerHandler">The inner handler which is responsible for processing the HTTP response messages.</param>
internal ErrorFilteringMessageHandler(HttpMessageHandler innerHandler)
: base(innerHandler) {
}
+ /// <summary>
+ /// Sends an HTTP request to the inner handler to send to the server as an asynchronous operation.
+ /// </summary>
+ /// <param name="request">The HTTP request message to send to the server.</param>
+ /// <param name="cancellationToken">A cancellation token to cancel operation.</param>
+ /// <returns>
+ /// Returns <see cref="T:System.Threading.Tasks.Task`1" />. The task object representing the asynchronous operation.
+ /// </returns>
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken) {
var response = await base.SendAsync(request, cancellationToken);
diff --git a/src/DotNetOpenAuth.OpenId/OpenId/ChannelElements/ReturnToSignatureBindingElement.cs b/src/DotNetOpenAuth.OpenId/OpenId/ChannelElements/ReturnToSignatureBindingElement.cs
index 5ea5136..2aad922 100644
--- a/src/DotNetOpenAuth.OpenId/OpenId/ChannelElements/ReturnToSignatureBindingElement.cs
+++ b/src/DotNetOpenAuth.OpenId/OpenId/ChannelElements/ReturnToSignatureBindingElement.cs
@@ -33,8 +33,14 @@ namespace DotNetOpenAuth.OpenId.ChannelElements {
/// anything except a particular message part.</para>
/// </remarks>
internal class ReturnToSignatureBindingElement : IChannelBindingElement {
+ /// <summary>
+ /// A reusable pre-completed task that may be returned multiple times to reduce GC pressure.
+ /// </summary>
private static readonly Task<MessageProtections?> NullTask = Task.FromResult<MessageProtections?>(null);
+ /// <summary>
+ /// A reusable pre-completed task that may be returned multiple times to reduce GC pressure.
+ /// </summary>
private static readonly Task<MessageProtections?> NoneTask =
Task.FromResult<MessageProtections?>(MessageProtections.None);
diff --git a/src/DotNetOpenAuth.OpenId/OpenId/ChannelElements/SigningBindingElement.cs b/src/DotNetOpenAuth.OpenId/OpenId/ChannelElements/SigningBindingElement.cs
index 769b2e2..8f602cf 100644
--- a/src/DotNetOpenAuth.OpenId/OpenId/ChannelElements/SigningBindingElement.cs
+++ b/src/DotNetOpenAuth.OpenId/OpenId/ChannelElements/SigningBindingElement.cs
@@ -25,6 +25,9 @@ namespace DotNetOpenAuth.OpenId.ChannelElements {
/// Signs and verifies authentication assertions.
/// </summary>
internal abstract class SigningBindingElement : IChannelBindingElement {
+ /// <summary>
+ /// A reusable pre-completed task that may be returned multiple times to reduce GC pressure.
+ /// </summary>
private static readonly Task<MessageProtections?> NullTask = Task.FromResult<MessageProtections?>(null);
#region IChannelBindingElement Properties
diff --git a/src/DotNetOpenAuth.OpenId/OpenId/ChannelElements/SkipSecurityBindingElement.cs b/src/DotNetOpenAuth.OpenId/OpenId/ChannelElements/SkipSecurityBindingElement.cs
index e55b7e2..ad8d59e 100644
--- a/src/DotNetOpenAuth.OpenId/OpenId/ChannelElements/SkipSecurityBindingElement.cs
+++ b/src/DotNetOpenAuth.OpenId/OpenId/ChannelElements/SkipSecurityBindingElement.cs
@@ -18,6 +18,9 @@ namespace DotNetOpenAuth.OpenId.ChannelElements {
/// Spoofs security checks on incoming OpenID messages.
/// </summary>
internal class SkipSecurityBindingElement : IChannelBindingElement {
+ /// <summary>
+ /// A reusable pre-completed task that may be returned multiple times to reduce GC pressure.
+ /// </summary>
private static readonly Task<MessageProtections?> NullTask = Task.FromResult<MessageProtections?>(null);
#region IChannelBindingElement Members
diff --git a/src/DotNetOpenAuth.OpenId/OpenId/Messages/NegativeAssertionResponse.cs b/src/DotNetOpenAuth.OpenId/OpenId/Messages/NegativeAssertionResponse.cs
index 469c7ca..01be03b 100644
--- a/src/DotNetOpenAuth.OpenId/OpenId/Messages/NegativeAssertionResponse.cs
+++ b/src/DotNetOpenAuth.OpenId/OpenId/Messages/NegativeAssertionResponse.cs
@@ -23,14 +23,6 @@ namespace DotNetOpenAuth.OpenId.Messages {
/// <summary>
/// Initializes a new instance of the <see cref="NegativeAssertionResponse"/> class.
/// </summary>
- /// <param name="request">The request.</param>
- private NegativeAssertionResponse(SignedResponseRequest request)
- : base(request, GetMode(request)) {
- }
-
- /// <summary>
- /// Initializes a new instance of the <see cref="NegativeAssertionResponse"/> class.
- /// </summary>
/// <param name="version">The version.</param>
/// <param name="relyingPartyReturnTo">The relying party return to.</param>
/// <param name="mode">The value of the openid.mode parameter.</param>
@@ -39,6 +31,14 @@ namespace DotNetOpenAuth.OpenId.Messages {
}
/// <summary>
+ /// Initializes a new instance of the <see cref="NegativeAssertionResponse"/> class.
+ /// </summary>
+ /// <param name="request">The request.</param>
+ private NegativeAssertionResponse(SignedResponseRequest request)
+ : base(request, GetMode(request)) {
+ }
+
+ /// <summary>
/// Gets or sets the URL the relying party can use to upgrade their authentication
/// request from an immediate to a setup message.
/// </summary>
diff --git a/src/DotNetOpenAuth.OpenId/OpenId/OpenIdUtilities.cs b/src/DotNetOpenAuth.OpenId/OpenId/OpenIdUtilities.cs
index dcea83a..e111655 100644
--- a/src/DotNetOpenAuth.OpenId/OpenId/OpenIdUtilities.cs
+++ b/src/DotNetOpenAuth.OpenId/OpenId/OpenIdUtilities.cs
@@ -82,13 +82,22 @@ namespace DotNetOpenAuth.OpenId {
return string.Format(CultureInfo.InvariantCulture, "{{{0}}}{{{1}}}", DateTime.UtcNow.Ticks, uniq);
}
+ /// <summary>
+ /// Immediately sends a redirect response to the browser to initiate an authentication request.
+ /// </summary>
+ /// <param name="authenticationRequest">The authentication request to send via redirect.</param>
+ /// <param name="context">The context.</param>
+ /// <param name="cancellationToken">The cancellation token.</param>
+ /// <returns>
+ /// A task that completes with the asynchronous operation.
+ /// </returns>
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);
+ await response.SendAsync(context.Response);
}
/// <summary>
@@ -196,6 +205,13 @@ namespace DotNetOpenAuth.OpenId {
return fullyQualifiedRealm;
}
+ /// <summary>
+ /// Creates a new HTTP client for use by OpenID relying parties and providers.
+ /// </summary>
+ /// <param name="hostFactories">The host factories.</param>
+ /// <param name="requireSsl">if set to <c>true</c> [require SSL].</param>
+ /// <param name="cachePolicy">The cache policy.</param>
+ /// <returns>An HttpClient instance with appropriate caching policies set for OpenID operations.</returns>
internal static HttpClient CreateHttpClient(this IHostFactories hostFactories, bool requireSsl, RequestCachePolicy cachePolicy = null) {
Requires.NotNull(hostFactories, "hostFactories");
diff --git a/src/DotNetOpenAuth.OpenId/OpenId/Realm.cs b/src/DotNetOpenAuth.OpenId/OpenId/Realm.cs
index 8628160..f6b4129 100644
--- a/src/DotNetOpenAuth.OpenId/OpenId/Realm.cs
+++ b/src/DotNetOpenAuth.OpenId/OpenId/Realm.cs
@@ -440,7 +440,6 @@ namespace DotNetOpenAuth.OpenId {
/// </summary>
/// <param name="hostFactories">The host factories.</param>
/// <param name="allowRedirects">Whether redirects may be followed when discovering the Realm.
- /// <param name="cancellationToken">The cancellation token.</param>
/// This may be true when creating an unsolicited assertion, but must be
/// false when performing return URL verification per 2.0 spec section 9.2.1.</param>
/// <param name="cancellationToken">The cancellation token.</param>
diff --git a/src/DotNetOpenAuth.OpenId/OpenId/UntrustedWebRequestHandler.cs b/src/DotNetOpenAuth.OpenId/OpenId/UntrustedWebRequestHandler.cs
index 25d4bb6..b76d6ad 100644
--- a/src/DotNetOpenAuth.OpenId/OpenId/UntrustedWebRequestHandler.cs
+++ b/src/DotNetOpenAuth.OpenId/OpenId/UntrustedWebRequestHandler.cs
@@ -68,6 +68,9 @@ namespace DotNetOpenAuth.OpenId {
[DebuggerBrowsable(DebuggerBrowsableState.Never)]
private int maximumRedirections = Configuration.MaximumRedirections;
+ /// <summary>
+ /// The inner handler.
+ /// </summary>
private readonly InternalWebRequestHandler innerHandler;
/// <summary>
@@ -97,10 +100,6 @@ namespace DotNetOpenAuth.OpenId {
}
}
- protected WebRequestHandler InnerWebRequestHandler {
- get { return (WebRequestHandler)this.innerHandler.InnerHandler; }
- }
-
/// <summary>
/// Gets or sets a value indicating whether all requests must use SSL.
/// </summary>
@@ -186,12 +185,26 @@ namespace DotNetOpenAuth.OpenId {
}
/// <summary>
+ /// Gets the inner web request handler.
+ /// </summary>
+ /// <value>
+ /// The inner web request handler.
+ /// </value>
+ protected WebRequestHandler InnerWebRequestHandler {
+ get { return (WebRequestHandler)this.innerHandler.InnerHandler; }
+ }
+
+ /// <summary>
/// Gets the configuration for this class that is specified in the host's .config file.
/// </summary>
private static UntrustedWebRequestElement Configuration {
get { return DotNetOpenAuthSection.Messaging.UntrustedWebRequest; }
}
+ /// <summary>
+ /// Creates an HTTP client that uses this instance as an HTTP handler.
+ /// </summary>
+ /// <returns>The initialized instance.</returns>
public HttpClient CreateClient() {
var client = new HttpClient(this);
client.MaxResponseContentBufferSize = Configuration.MaximumBytesToRead;
@@ -232,6 +245,14 @@ namespace DotNetOpenAuth.OpenId {
return false;
}
+ /// <summary>
+ /// Send an HTTP request as an asynchronous operation.
+ /// </summary>
+ /// <param name="request">The HTTP request message to send.</param>
+ /// <param name="cancellationToken">The cancellation token to cancel operation.</param>
+ /// <returns>
+ /// Returns <see cref="T:System.Threading.Tasks.Task`1" />.The task object representing the asynchronous operation.
+ /// </returns>
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) {
this.EnsureAllowableRequestUri(request.RequestUri);
@@ -250,7 +271,8 @@ namespace DotNetOpenAuth.OpenId {
// cloned HttpWebRequest, so we have to bail.
ErrorUtilities.VerifyProtocol(request.Method != HttpMethod.Post, MessagingStrings.UntrustedRedirectsOnPOSTNotSupported);
Uri redirectUri = new Uri(request.RequestUri, response.Headers.Location);
- request = request.Clone(redirectUri);
+ request = request.Clone();
+ request.RequestUri = redirectUri;
continue;
}
@@ -347,7 +369,6 @@ namespace DotNetOpenAuth.OpenId {
/// Verify that the request qualifies under our security policies
/// </summary>
/// <param name="requestUri">The request URI.</param>
- /// <param name="requireSsl">If set to <c>true</c>, only web requests that can be made entirely over SSL will succeed.</param>
/// <exception cref="ProtocolException">Thrown when the URI is disallowed for security reasons.</exception>
private void EnsureAllowableRequestUri(Uri requestUri) {
ErrorUtilities.VerifyProtocol(
@@ -422,9 +443,13 @@ namespace DotNetOpenAuth.OpenId {
}
/// <summary>
- /// A <see cref="DelegatingHandler"/> derived type that makes its SendAsync method available internally.
+ /// A <see cref="DelegatingHandler" /> derived type that makes its SendAsync method available internally.
/// </summary>
private class InternalWebRequestHandler : DelegatingHandler {
+ /// <summary>
+ /// Initializes a new instance of the <see cref="InternalWebRequestHandler"/> class.
+ /// </summary>
+ /// <param name="innerHandler">The inner handler which is responsible for processing the HTTP response messages.</param>
internal InternalWebRequestHandler(HttpMessageHandler innerHandler)
: base(innerHandler) {
}
diff --git a/src/DotNetOpenAuth.OpenId/OpenId/XriDiscoveryProxyService.cs b/src/DotNetOpenAuth.OpenId/OpenId/XriDiscoveryProxyService.cs
index a04f568..c8c126e 100644
--- a/src/DotNetOpenAuth.OpenId/OpenId/XriDiscoveryProxyService.cs
+++ b/src/DotNetOpenAuth.OpenId/OpenId/XriDiscoveryProxyService.cs
@@ -46,6 +46,9 @@ namespace DotNetOpenAuth.OpenId {
public XriDiscoveryProxyService() {
}
+ /// <summary>
+ /// Gets or sets the host factories used by this instance.
+ /// </summary>
public IHostFactories HostFactories { get; set; }
#region IDiscoveryService Members
diff --git a/src/DotNetOpenAuth.OpenId/Yadis/DiscoveryResult.cs b/src/DotNetOpenAuth.OpenId/Yadis/DiscoveryResult.cs
index c56a170..8266ff0 100644
--- a/src/DotNetOpenAuth.OpenId/Yadis/DiscoveryResult.cs
+++ b/src/DotNetOpenAuth.OpenId/Yadis/DiscoveryResult.cs
@@ -28,7 +28,7 @@ namespace DotNetOpenAuth.Yadis {
private HttpResponseMessage htmlFallback;
/// <summary>
- /// Initializes a new instance of the <see cref="DiscoveryResult" /> class.
+ /// Prevents a default instance of the <see cref="DiscoveryResult" /> class from being created.
/// </summary>
private DiscoveryResult() {
}
@@ -70,6 +70,13 @@ namespace DotNetOpenAuth.Yadis {
/// </summary>
public bool IsXrds { get; private set; }
+ /// <summary>
+ /// Initializes a new instance of the <see cref="DiscoveryResult"/> class.
+ /// </summary>
+ /// <param name="requestUri">The request URI.</param>
+ /// <param name="initialResponse">The initial response.</param>
+ /// <param name="finalResponse">The final response.</param>
+ /// <returns>The newly initialized instance.</returns>
internal static async Task<DiscoveryResult> CreateAsync(Uri requestUri, HttpResponseMessage initialResponse, HttpResponseMessage finalResponse) {
var result = new DiscoveryResult();
result.RequestUri = requestUri;