001/*
002 * CDDL HEADER START
003 *
004 * The contents of this file are subject to the terms of the
005 * Common Development and Distribution License, Version 1.0 only
006 * (the "License").  You may not use this file except in compliance
007 * with the License.
008 *
009 * You can obtain a copy of the license at
010 * trunk/ds/resource/legal-notices/cddl.txt
011 * or http://www.opensource.org/licenses/cddl1.php.
012 * See the License for the specific language governing permissions
013 * and limitations under the License.
014 *
015 * When distributing Covered Code, include this CDDL HEADER in each
016 * file and include the License file at
017 * trunk/ds/resource/legal-notices/cddl.txt.  If applicable,
018 * add the following below this CDDL HEADER, with the fields enclosed
019 * by brackets "[]" replaced with your own identifying information:
020 *      Portions Copyright [yyyy] [name of copyright owner]
021 *
022 * CDDL HEADER END
023 *
024 *
025 *      Copyright 2013-2016 UnboundID Corp.
026 */
027package com.unboundid.directory.sdk.broker.types;
028
029import com.unboundid.util.Extensible;
030
031
032/**
033 * This class provides a type of {@link Exception} which is used to indicate
034 * an error when interfacing with an OAuth 2 extension.
035 */
036@Extensible()
037public class OAuthException extends Exception
038{
039  private static final long serialVersionUID = 3679401569779402582L;
040
041  /**
042   * The access_denied OAuth 2 error code. Used when the resource
043   * owner or authorization server denied the request.
044   */
045  public static final String ACCESS_DENIED = "access_denied";
046
047  /**
048   * The consent_required OAuth 2 error code. Used when the
049   * Authorization Server requires End-User consent.
050   */
051  public static final String CONSENT_REQUIRED = "consent_required";
052
053  /**
054   * The invalid_client OAuth 2 error code. Used when client authentication
055   * failed (e.g., unknown client, no client authentication included, or
056   * unsupported authentication method).
057   */
058  public static final String INVALID_CLIENT = "invalid_client";
059
060  /**
061   * The invalid_grant OAuth 2 error code. Used when the provided
062   * authorization grant (e.g., authorization code, resource owner
063   * credentials) or refresh token is invalid, expired, revoked, does
064   * not match the redirection URI used in the authorization request,
065   * or was issued to another client.
066   */
067  public static final String INVALID_GRANT = "invalid_grant";
068
069  /**
070   * The invalid_request OAuth 2 error code. Used when the request is
071   * missing a required parameter, includes an unsupported parameter
072   * value (other than grant type), repeats a parameter, includes
073   * multiple credentials, utilizes more than one mechanism for
074   * authenticating the client, or is otherwise malformed.
075   */
076  public static final String INVALID_REQUEST = "invalid_request";
077
078  /**
079   * The invalid_scope OAuth 2 error code. Used when the requested
080   * scope is invalid, unknown, or malformed
081   */
082  public static final String INVALID_SCOPE = "invalid_scope";
083
084  /**
085   * The invalid_token OAuth 2 error code. Used when the provided
086   * access or refresh token value is invalid.
087   */
088  public static final String INVALID_TOKEN = "invalid_token";
089
090  /**
091   * The login_required OAuth 2 error code. Used when the Authorization
092   * Server requires End-User authentication.
093   */
094  public static final String LOGIN_REQUIRED = "login_required";
095
096  /**
097   * The server_error OAuth 2 error code. Used when the authorization server
098   * encountered an unexpected condition that prevented it from fulfilling
099   * the request.
100   */
101  public static final String SERVER_ERROR = "server_error";
102
103  /**
104   * The temporarily_unavailable OAuth 2 error code. Used when the
105   * authorization server is currently unable to handle the request due to
106   * a temporary overloading or maintenance of the server.
107   */
108  public static final String TEMPORARILY_UNAVAILABLE =
109      "temporarily_unavailable";
110
111  /**
112   * The unauthorized_client OAuth 2 error code. Used when the authenticated
113   * client is not authorized to use this authorization grant type.
114   */
115        public static final String UNAUTHORIZED_CLIENT = "unauthorized_client";
116
117  /**
118   * The unsupported_grant_type OAuth 2 error code. Used when the
119   * authorization grant type is not supported by the authorization
120   * server.
121   */
122        public static final String UNSUPPORTED_GRANT_TYPE =
123       "unsupported_grant_type";
124
125  /**
126   * The unsupported_response_type OAuth 2 error code. Used when the
127   * authorization server does not support obtaining an authorization
128   * code using this method.
129   */
130        public static final String UNSUPPORTED_RESPONSE_TYPE =
131       "unsupported_response_type";
132
133  private final String oauth2ErrorCode;
134  private final String errorUri;
135
136  /**
137   * Creates a new OAuthException with the provided information.
138   *
139   * @param  oauth2ErrorCode   The OAuth 2 error code that should be returned
140   *                           to the client application.
141   */
142  public OAuthException(final String oauth2ErrorCode)
143  {
144    this(oauth2ErrorCode, null, null, null);
145  }
146
147
148
149  /**
150   * Creates a new OAuthException with the provided information.
151   *
152   * @param  oauth2ErrorCode   The OAuth 2 error code that should be returned
153   *                           to the client application.
154   * @param  message           The message that explains the problem that
155   *                           occurred.
156   */
157  public OAuthException(final String oauth2ErrorCode, final String message)
158  {
159    this(oauth2ErrorCode, message, null, null);
160  }
161
162
163
164  /**
165   * Creates a new OAuthException with the provided information.
166   *
167   * @param  oauth2ErrorCode   The OAuth 2 error code that should be returned
168   *                           to the client application.
169   * @param  cause             The underlying cause that triggered this
170   *                           exception.
171   */
172  public OAuthException(final String oauth2ErrorCode, final Throwable cause)
173  {
174    this(oauth2ErrorCode, null, null, cause);
175  }
176
177
178
179  /**
180   * Creates a new OAuthException with the provided information.
181   *
182   * @param  oauth2ErrorCode   The OAuth 2 error code that should be returned
183   *                           to the client application.
184   * @param  message           The message that explains the problem that
185   *                           occurred.
186   * @param  errorUri          A URI identifying a web page with information
187   *                           about the error.
188   * @param  cause             The underlying cause that triggered this
189   *                           exception.
190   */
191  public OAuthException(final String oauth2ErrorCode,
192                        final String message,
193                        final String errorUri,
194                        final Throwable cause)
195  {
196    super(message, cause);
197    this.oauth2ErrorCode = oauth2ErrorCode;
198    this.errorUri = errorUri;
199    if(oauth2ErrorCode == null)
200    {
201      throw new NullPointerException("The OAuth2ErrorCode cannot be null.");
202    }
203  }
204
205  /**
206   * Retrieves the OAuth 2 error code that should be returned to the client
207   * application.
208   *
209   * @return The OAuth 2 error code that should be returned to the client
210   *         application.
211   */
212  public String getOauth2ErrorCode()
213  {
214    return oauth2ErrorCode;
215  }
216
217  /**
218   * Retrieves the URI identifying a web page with information about the error
219   * or {@code null} if not available.
220   *
221   * @return The URI identifying a web page with information about the error or
222   * {@code null} if not available.
223   */
224  public String getErrorUri()
225  {
226    return errorUri;
227  }
228}