View Javadoc
1   /*
2    * This software was designed and created by Jason Carroll.
3    * Copyright (c) 2002, 2003, 2004 Jason Carroll.
4    * The author can be reached at jcarroll@cowsultants.com
5    * ITracker website: http://www.cowsultants.com
6    * ITracker forums: http://www.cowsultants.com/phpBB/index.php
7    *
8    * This program is free software; you can redistribute it and/or modify
9    * it only under the terms of the GNU General Public License as published by
10   * the Free Software Foundation; either version 2 of the License, or
11   * (at your option) any later version.
12   *
13   * This program is distributed in the hope that it will be useful,
14   * but WITHOUT ANY WARRANTY; without even the implied warranty of
15   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16   * GNU General Public License for more details.
17   */
18  
19  package org.itracker.services.exceptions;
20  
21  /**
22   * This class encapsulates the errors that may occur during a login
23   * or other types of actions typically performed by a pluggable
24   * authentication module.<br><br>
25   * A pluggable authentication module should set the type of error generated
26   * using the setType method, or the appropriate constructor.  If the type
27   * of error does not match one of the existing types and the error should
28   * be returned to the user, the module should use the CUSTOM_ERROR type,
29   * and then also populate the the messageKey attribute with a key that would
30   * be suitable for display to the user.<br><br>
31   * This class can also be used to send the user to a custom error page in the
32   * event of a failure.  If this is required, the page type should be set using
33   * the setErrorPageType method, and the appropriate value for the type is set
34   * using setErrorPageValue.  The currently supported types are either a URL
35   * or a Struts forward action mapping..
36   */
37  public class AuthenticatorException extends RuntimeException {
38      /**
39       *
40       */
41      private static final long serialVersionUID = -7799413588815903874L;
42      public static final int INVALID_DATA = -1;
43      public static final int UNKNOWN_USER = -2;
44      public static final int INVALID_PASSWORD = -3;
45      public static final int INACTIVE_ACCOUNT = -4;
46      public static final int SYSTEM_ERROR = -5;
47      public static final int INVALID_AUTHENTICATION_TYPE = -6;
48      public static final int CUSTOM_ERROR = -7;
49  
50      public static final int ERRORPAGE_TYPE_UNDEFINED = -1;
51      public static final int ERRORPAGE_TYPE_FORWARD = 1;
52      public static final int ERRORPAGE_TYPE_URL = 2;
53  
54      private int type = 0;
55      private String messageKey = "itracker.web.error.login.system";
56      private int errorPageType = ERRORPAGE_TYPE_UNDEFINED;
57      private String errorPageValue = null;
58  
59      public AuthenticatorException() {
60      }
61  
62      public AuthenticatorException(int type) {
63          this.type = type;
64      }
65  
66      public AuthenticatorException(int type, String messageKey) {
67          this(type);
68          this.messageKey = messageKey;
69      }
70  
71      public AuthenticatorException(String message, int type) {
72          super(message);
73          this.type = type;
74      }
75  
76      public AuthenticatorException(String message, int type, Throwable cause) {
77          super(message, cause);
78          this.type = type;
79      }
80  
81      public AuthenticatorException(String message, int type, String messageKey) {
82          this(message, type);
83          this.messageKey = messageKey;
84      }
85  
86      public int getType() {
87          return type;
88      }
89  
90      public void setType(int type) {
91          this.type = type;
92      }
93  
94      public String getMessage() {
95          String message = super.getMessage();
96          if (message == null || message.equals("")) {
97              message = "Empty message, type: " + getTypeString();
98          }
99  
100         return message;
101     }
102 
103     /**
104      * Returns a key that contains a custom error message to display to the user.
105      *
106      * @return a resource key that can be used to look up the custom error
107      *         message for this exception.
108      */
109     public String getMessageKey() {
110         return messageKey;
111     }
112 
113     /**
114      * Sets a key that contains a custom error message to display to the user.
115      *
116      * @param messageKey a resource key that can be used to look up the custom error
117      *                   message for this exception.
118      */
119     public void setMessageKey(String messageKey) {
120         this.messageKey = messageKey;
121     }
122 
123     /**
124      * Returns the type of error page that is has been set.
125      * Supported values are urls and Struts forward action mappings.
126      *
127      * @see AuthenticatorException#ERRORPAGE_TYPE_FORWARD
128      * @see AuthenticatorException#ERRORPAGE_TYPE_URL
129      */
130     public int getErrorPageType() {
131         return errorPageType;
132     }
133 
134     /**
135      * Sets the type of error page that should be used to display this exception.
136      * Supported values are urls and Struts forward action mappings.
137      *
138      * @param value the type of error page that has been set
139      * @see AuthenticatorException#ERRORPAGE_TYPE_FORWARD
140      * @see AuthenticatorException#ERRORPAGE_TYPE_URL
141      */
142     public void setErrorPageType(int value) {
143         errorPageType = value;
144     }
145 
146     /**
147      * Returns the error page that should be used to display this exception
148      * Supported values are urls and Struts forward action mappings.  The type that
149      * has been set must be identified using the setErrorPageType method.
150      *
151      * @see AuthenticatorException#setErrorPageType
152      */
153     public String getErrorPageValue() {
154         return errorPageValue;
155     }
156 
157     /**
158      * Returns the error page that should be used to display this exception
159      * Supported values are urls and Struts forward action mappings.  The type that
160      * has been set must be identified using the setErrorPageType method.
161      *
162      * @param value the error page that should be used to display this message
163      * @see AuthenticatorException#setErrorPageType
164      */
165     public void setErrorPageValue(String value) {
166         errorPageValue = value;
167     }
168 
169     private String getTypeString() {
170         if (type == INVALID_DATA) {
171             return "Invalid Data";
172         } else if (type == UNKNOWN_USER) {
173             return "Unknown User";
174         } else if (type == INVALID_PASSWORD) {
175             return "Invalid Password";
176         } else if (type == INACTIVE_ACCOUNT) {
177             return "Inactive Account";
178         } else if (type == SYSTEM_ERROR) {
179             return "System Error";
180         } else if (type == INVALID_AUTHENTICATION_TYPE) {
181             return "Invalid Authentication Type";
182         } else if (type == CUSTOM_ERROR) {
183             return "Custom Error.  Check message key.";
184         }
185 
186         return "Unknown Type";
187     }
188 }
189 
190