diff options
Diffstat (limited to 'src/DotNetOpenAuth.OpenId')
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; |