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 * docs/licenses/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 * docs/licenses/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 2011-2016 UnboundID Corp.
026 */
027
028package com.unboundid.directory.sdk.http.types;
029
030import java.util.Map;
031import java.util.TreeMap;
032
033/**
034 * Base abstract class for all exceptions that result in a HTTP authentication
035 * failure.
036 */
037public abstract class AuthenticationException extends Exception
038{
039  /**
040   * Error code used to indicate registration failed because the user account
041   * conflicts with an already existing one.
042   */
043  public static final String RESOURCE_CONFLICT = "resource_conflict";
044
045  /**
046   * Error code used to indicate authentication failed because policy
047   * denied one or more attributes in the registration data.
048   */
049  public static final String ATTRIBUTE_CREATE_DENIED =
050      "attribute_create_denied";
051
052  /**
053   * Error code used to indicate authentication failed because registration
054   * request included an invalid registration data.
055   */
056  public static final String INVALID_RESOURCE = "invalid_resource";
057
058  /**
059   * Error code used to indicate authentication failed because the provided
060   * credentials are not valid.
061   */
062  public static final String BAD_CREDENTIALS = "bad_credentials";
063
064  /**
065   * Error code used to indicate authentication failed because the user's
066   * credentials have expired.
067   */
068  public static final String CREDENTIALS_EXPIRED = "credentials_expired";
069
070  /**
071   * Error code used to indicate authentication failed because invalid identity
072   * provider is specified.
073   */
074  public static final String INVALID_IDENTITY_PROVIDER =
075      "invalid_identity_provider";
076
077  /**
078   * Error code used to indicate authentication failed because the request
079   * included an invalid client ID.
080   */
081  public static final String INVALID_CLIENT = "invalid_client";
082
083  /**
084   * Error code used to indicate authentication failed because the request
085   * is invalid.
086   */
087  public static final String INVALID_REQUEST = "invalid_request";
088
089  /**
090   * Error code used to indicate authentication failed due to a internal
091   * error.
092   */
093  public static final String INTERNAL_ERROR = "internal_error";
094
095  /**
096   * Error code used to indicate authentication failed because the user account
097   * is disabled.
098   */
099  public static final String USER_DISABLED = "user_disabled";
100
101  /**
102   * Error code used to indicate authentication failed because the user
103   * account is locked.
104   */
105  public static final String USER_LOCKED = "user_locked";
106
107  /**
108   * Error code used to indicate authentication failed with an external identity
109   * provider while performing the OAuth 2 flow.
110   */
111  public static final String OAUTH2_ERROR = "oauth2_error";
112
113  private static final long serialVersionUID = 7386070808689343226L;
114
115  private final Map<String, Object> additionalInformation =
116      new TreeMap<String, Object>();
117
118  /**
119   * Constructs an {@code AuthenticationException} with the specified message
120   * and no root cause.
121   *
122   * @param message the detail message
123   */
124  public AuthenticationException(final String message)
125  {
126    super(message);
127  }
128
129  /**
130   * Constructs an {@code AuthenticationException} with the specified message
131   * and root cause.
132   *
133   * @param message the detail message
134   * @param cause the root cause
135   */
136  public AuthenticationException(final String message,
137                                 final Throwable cause)
138  {
139    super(message, cause);
140  }
141
142  /**
143   * Get any additional information about this exception.
144   *
145   * @return Any additional information, or null.
146   */
147  public Map<String, Object> getAdditionalInformation()
148  {
149    return this.additionalInformation;
150  }
151
152  /**
153   * Add a piece of additional information about this exception.
154   *
155   * @param key The key.
156   * @param value The value.
157   */
158  public void addAdditionalInformation(final String key,
159                                       final Object value)
160  {
161    this.additionalInformation.put(key, value);
162  }
163
164  /**
165   * Retrieve the error code associated with this exception.
166   *
167   * @return The error code associated with this exception.
168   */
169  public abstract String getErrorCode();
170}