//----------------------------------------------------------------------- // // Copyright (c) Andrew Arnott. All rights reserved. // //----------------------------------------------------------------------- namespace DotNetOpenAuth.OAuth2 { using System; using System.Collections.Generic; using System.Globalization; using System.Linq; using System.Text; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OAuth2.Messages; using Validation; /// /// Describes an error generated by an Authorization Server's token endpoint. /// public class TokenEndpointProtocolException : ProtocolException { /// /// The message being processed that caused this exception to be thrown. /// private readonly AccessTokenRequestBase requestMessage; /// /// The WWW-Authenticate header to add to the response message. /// private readonly string authenticateHeader; /// /// Initializes a new instance of the class. /// /// The message whose processing resulted in this error. /// A single error code from . /// A human-readable UTF-8 encoded text providing additional information, used to assist the client developer in understanding the error that occurred. /// A URI identifying a human-readable web page with information about the error, used to provide the client developer with additional information about the error. /// The WWW-Authenticate header to add to the response. public TokenEndpointProtocolException(AccessTokenRequestBase requestMessage, string error, string description = null, Uri moreInformation = null, string authenticateHeader = null) : base(string.Format(CultureInfo.CurrentCulture, ClientAuthorizationStrings.TokenEndpointErrorFormat, error, description)) { Requires.NotNull(requestMessage, "requestMessage"); Requires.NotNullOrEmpty(error, "error"); this.requestMessage = requestMessage; this.Error = error; this.Description = description; this.MoreInformation = moreInformation; this.authenticateHeader = authenticateHeader; } /// /// Initializes a new instance of the class. /// /// The inner exception. public TokenEndpointProtocolException(Exception innerException) : base(Protocol.AccessTokenRequestErrorCodes.InvalidRequest, innerException) { this.Error = Protocol.AccessTokenRequestErrorCodes.InvalidRequest; } /// /// Gets a single error code from . /// public string Error { get; private set; } /// /// Gets a human-readable UTF-8 encoded text providing additional information, used to assist the client developer in understanding the error that occurred. /// public string Description { get; private set; } /// /// Gets a URI identifying a human-readable web page with information about the error, used to provide the client developer with additional information about the error. /// public Uri MoreInformation { get; private set; } /// /// Gets the response message to send to the client. /// /// A message. public IDirectResponseProtocolMessage GetResponse() { var response = this.requestMessage != null ? new AccessTokenFailedResponse(this.requestMessage, this.authenticateHeader != null) : new AccessTokenFailedResponse(); response.Error = this.Error; response.ErrorDescription = this.Description; response.ErrorUri = this.MoreInformation; if (this.authenticateHeader != null) { response.Headers.Add(HttpRequestHeaders.WwwAuthenticate, this.authenticateHeader); } return response; } } }