/*
* Password Management Servlets (PWM)
* http://www.pwm-project.org
*
* Copyright (c) 2006-2009 Novell, Inc.
* Copyright (c) 2009-2017 The PWM Project
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package password.pwm.error;
import com.novell.ldapchai.exception.ChaiError;
import password.pwm.config.Configuration;
import password.pwm.util.LocaleHelper;
import password.pwm.util.java.JavaHelper;
import java.util.Locale;
/**
* @author Jason D. Rivard
*/
public enum PwmError {
PASSWORD_MISSING_CONFIRM( 4001, "Password_MissingConfirm", null),
PASSWORD_MISSING( 4002, "Password_Missing", null),
PASSWORD_DOESNOTMATCH( 4003, "Password_DoesNotMatch", null),
PASSWORD_PREVIOUSLYUSED( 4004, "Password_PreviouslyUsed", new ChaiError[]{ChaiError.PASSWORD_PREVIOUSLYUSED}),
PASSWORD_BADOLDPASSWORD( 4005, "Password_BadOldPassword", new ChaiError[]{ChaiError.PASSWORD_BADOLDPASSWORD}),
PASSWORD_BADPASSWORD( 4006, "Password_BadPassword", new ChaiError[]{ChaiError.PASSWORD_BADPASSWORD}),
PASSWORD_TOO_SHORT( 4007, "Password_TooShort", new ChaiError[]{ChaiError.PASSWORD_TOO_SHORT}),
PASSWORD_TOO_LONG( 4008, "Password_TooLong", new ChaiError[]{ChaiError.PASSWORD_TOO_LONG}),
PASSWORD_NOT_ENOUGH_NUM( 4009, "Password_NotEnoughNum", new ChaiError[]{ChaiError.PASSWORD_NOT_ENOUGH_NUM}),
PASSWORD_NOT_ENOUGH_ALPHA( 4010, "Password_NotEnoughAlpha", new ChaiError[]{ChaiError.PASSWORD_NOT_ENOUGH_ALPHA}),
PASSWORD_NOT_ENOUGH_SPECIAL( 4011, "Password_NotEnoughSpecial", new ChaiError[]{ChaiError.PASSWORD_NOT_ENOUGH_SPECIAL}),
PASSWORD_NOT_ENOUGH_LOWER( 4012, "Password_NotEnoughLower", new ChaiError[]{ChaiError.PASSWORD_NOT_ENOUGH_LOWER}),
PASSWORD_NOT_ENOUGH_UPPER( 4013, "Password_NotEnoughUpper", new ChaiError[]{ChaiError.PASSWORD_NOT_ENOUGH_UPPER}),
PASSWORD_NOT_ENOUGH_UNIQUE( 4014, "Password_NotEnoughUnique", new ChaiError[]{ChaiError.PASSWORD_NOT_ENOUGH_UNIQUE}),
PASSWORD_TOO_MANY_REPEAT( 4015, "Password_TooManyRepeat", new ChaiError[]{ChaiError.PASSWORD_TOO_MANY_REPEAT}),
PASSWORD_TOO_MANY_NUMERIC( 4016, "Password_TooManyNumeric", new ChaiError[]{ChaiError.PASSWORD_TOO_MANY_NUMERIC, ChaiError.PASSWORD_NUMERIC_DISALLOWED}),
PASSWORD_TOO_MANY_ALPHA( 4017, "Password_TooManyAlpha", new ChaiError[]{ChaiError.PASSWORD_TOO_MANY_ALPHA}),
PASSWORD_TOO_MANY_LOWER( 4018, "Password_TooManyLower", new ChaiError[]{ChaiError.PASSWORD_TOO_MANY_LOWER}),
PASSWORD_TOO_MANY_UPPER( 4019, "Password_TooManyUpper", new ChaiError[]{ChaiError.PASSWORD_TOO_MANY_UPPER}),
PASSWORD_FIRST_IS_NUMERIC( 4020, "Password_FirstIsNumeric", new ChaiError[]{ChaiError.PASSWORD_FIRST_IS_NUMERIC}),
PASSWORD_LAST_IS_NUMERIC( 4021, "Password_LastIsNumeric", new ChaiError[]{ChaiError.PASSWORD_LAST_IS_NUMERIC}),
PASSWORD_FIRST_IS_SPECIAL( 4022, "Password_FirstIsSpecial", new ChaiError[]{ChaiError.PASSWORD_FIRST_IS_SPECIAL}),
PASSWORD_LAST_IS_SPECIAL( 4023, "Password_LastIsSpecial", new ChaiError[]{ChaiError.PASSWORD_LAST_IS_SPECIAL}),
PASSWORD_TOO_MANY_SPECIAL( 4024, "Password_TooManyNonAlphaSpecial",new ChaiError[]{ChaiError.PASSWORD_TOO_MANY_SPECIAL, ChaiError.PASSWORD_NUMERIC_DISALLOWED}),
PASSWORD_INVALID_CHAR( 4025, "Password_InvalidChar", new ChaiError[]{ChaiError.PASSWORD_INVALID_CHAR}),
PASSWORD_REQUIREDMISSING( 4026, "Password_RequiredMissing", null),
PASSWORD_INWORDLIST( 4027, "Password_InWordlist", new ChaiError[]{ChaiError.PASSWORD_INWORDLIST}),
PASSWORD_SAMEASOLD( 4028, "Password_SameAsOld", null),
PASSWORD_SAMEASATTR( 4029, "Password_SameAsAttr", new ChaiError[]{ChaiError.PASSWORD_SAMEASATTR}),
PASSWORD_MEETS_RULES( 4030, "Password_MeetsRules", null),
PASSWORD_TOO_MANY_OLD_CHARS( 4031, "Password_TooManyOldChars", null),
PASSWORD_HISTORY_FULL( 4032, "Password_HistoryFull", new ChaiError[]{ChaiError.PASSWORD_HISTORY_FULL}),
PASSWORD_TOO_SOON( 4033, "Password_TooSoon", new ChaiError[]{ChaiError.PASSWORD_TOO_SOON}),
PASSWORD_USING_DISALLOWED( 4034, "Password_UsingDisallowedValue", null),
PASSWORD_TOO_WEAK( 4035, "Password_TooWeak", null),
PASSWORD_TOO_MANY_NONALPHA( 4036, "Password_TooManyNonAlpha", null),
PASSWORD_NOT_ENOUGH_NONALPHA( 4037, "Password_NotEnoughNonAlpha", null),
PASSWORD_UNKNOWN_VALIDATION( 4038, "Password_UnknownValidation", null),
PASSWORD_NEW_PASSWORD_REQUIRED( 4039, "Password_NewPasswordRequired", new ChaiError[]{ChaiError.NEW_PASSWORD_REQUIRED}),
PASSWORD_EXPIRED( 4040, "Password_Expired", new ChaiError[]{ChaiError.PASSWORD_EXPIRED}),
PASSWORD_CUSTOM_ERROR( 4041, "Password_CustomError", null),
PASSWORD_NOT_ENOUGH_GROUPS( 4042, "Password_NotEnoughGroups", null),
PASSWORD_TOO_MANY_CONSECUTIVE( 4043, "Password_TooManyConsecutive", null),
ERROR_WRONGPASSWORD( 5001, "Error_WrongPassword", new ChaiError[]{ChaiError.FAILED_AUTHENTICATION}),
ERROR_INCORRECT_RESPONSE( 5002, "Error_WrongResponse", null),
ERROR_USERAUTHENTICATED( 5003, "Error_UserAuthenticated", null),
ERROR_AUTHENTICATION_REQUIRED( 5004, "Error_AuthenticationRequired", null),
ERROR_RESPONSES_NORESPONSES( 5006, "Error_Response_NoResponse", null),
ERROR_RESPONSE_WORDLIST( 5007, "Error_Response_Wordlist", null),
ERROR_RESPONSE_TOO_SHORT( 5008, "Error_Response_TooShort", null),
ERROR_RESPONSE_TOO_LONG( 5009, "Error_Response_TooLong", null),
ERROR_RESPONSE_DUPLICATE( 5010, "Error_Response_Duplicate", null),
ERROR_CHALLENGE_DUPLICATE( 5011, "Error_Challenge_Duplicate", null),
ERROR_MISSING_CHALLENGE_TEXT( 5012, "Error_Missing_Challenge_Text", null),
ERROR_MISSING_PARAMETER( 5013, "Error_MissingParameter", null),
ERROR_UNKNOWN( 5015, "Error_Unknown", null, ErrorFlag.ForceLogout),
ERROR_CANT_MATCH_USER( 5016, "Error_CantMatchUser", null),
ERROR_DIRECTORY_UNAVAILABLE( 5017, "Error_DirectoryUnavailable", null, ErrorFlag.ForceLogout),
ERROR_ACTIVATION_VALIDATIONFAIL(5018, "Error_ActivationValidationFailed", null),
ERROR_SERVICE_NOT_AVAILABLE( 5019, "Error_ServiceNotAvailable", null),
ERROR_USER_MISMATCH( 5020, "Error_UserMisMatch", null),
ERROR_ACTIVATE_NO_PERMISSION( 5021, "Error_ActivateUserNoQueryMatch", null),
ERROR_NO_CHALLENGES( 5022, "Error_NoChallenges", null),
ERROR_INTRUDER_USER( 5023, "Error_UserIntruder", null, ErrorFlag.Permanent),
ERROR_INTRUDER_ADDRESS( 5024, "Error_AddressIntruder", null, ErrorFlag.Permanent),
ERROR_INTRUDER_SESSION( 5025, "Error_SessionIntruder", null, ErrorFlag.Permanent),
ERROR_BAD_SESSION_PASSWORD( 5026, "Error_BadSessionPassword", null),
ERROR_UNAUTHORIZED( 5027, "Error_Unauthorized", null, ErrorFlag.Permanent),
ERROR_BAD_SESSION( 5028, "Error_BadSession", null),
ERROR_MISSING_REQUIRED_RESPONSE(5029, "Error_MissingRequiredResponse", null),
ERROR_MISSING_RANDOM_RESPONSE( 5030, "Error_MissingRandomResponse", null),
ERROR_BAD_CAPTCHA_RESPONSE( 5031, "Error_BadCaptchaResponse", null),
ERROR_CAPTCHA_API_ERROR( 5032, "Error_CaptchaAPIError", null),
ERROR_INVALID_CONFIG( 5033, "Error_InvalidConfig", null),
ERROR_INVALID_FORMID( 5034, "Error_InvalidFormID", null),
ERROR_INCORRECT_REQ_SEQUENCE( 5035, "Error_IncorrectRequestSequence",null),
ERROR_TOKEN_MISSING_CONTACT( 5036, "Error_TokenMissingContact", null),
ERROR_TOKEN_INCORRECT( 5037, "Error_TokenIncorrect", null),
ERROR_BAD_CURRENT_PASSWORD( 5038, "Error_BadCurrentPassword", null),
ERROR_CLOSING( 5039, "Error_Closing", null),
ERROR_MISSING_GUID( 5040, "Error_Missing_GUID", null),
ERROR_TOKEN_EXPIRED( 5041, "Error_TokenExpired", null),
ERROR_MULTI_USERNAME( 5042, "Error_Multi_Username", null),
ERROR_ORIG_ADMIN_ONLY( 5043, "Error_Orig_Admin_Only", null),
ERROR_SECURE_REQUEST_REQUIRED( 5044, "Error_SecureRequestRequired", null),
ERROR_WRITING_RESPONSES( 5045, "Error_Writing_Responses", null),
ERROR_UNLOCK_FAILURE( 5046, "Error_Unlock_Failure", null),
ERROR_UPDATE_ATTRS_FAILURE( 5047, "Error_Update_Attrs_Failure", null),
ERROR_ACTIVATION_FAILURE( 5048, "Error_Activation_Failure", null),
ERROR_NEW_USER_FAILURE( 5049, "Error_NewUser_Failure", null),
ERROR_ACTIVATION( 5050, "Error_Activation", null),
ERROR_DB_UNAVAILABLE( 5051, "Error_DB_Unavailable", null),
ERROR_LOCALDB_UNAVAILABLE( 5052, "Error_LocalDB_Unavailable", null),
ERROR_APP_UNAVAILABLE( 5053, "Error_App_Unavailable", null),
ERROR_UNREACHABLE_CLOUD_SERVICE(5054, "Error_UnreachableCloudService", null),
ERROR_INVALID_SECURITY_KEY( 5055, "Error_InvalidSecurityKey", null),
ERROR_CLEARING_RESPONSES( 5056, "Error_Clearing_Responses", null),
ERROR_SERVICE_UNREACHABLE( 5057, "Error_ServiceUnreachable", null),
ERROR_CHALLENGE_IN_RESPONSE( 5058, "Error_ChallengeInResponse", null),
ERROR_CERTIFICATE_ERROR( 5059, "Error_CertificateError", null),
ERROR_SYSLOG_WRITE_ERROR( 5060, "Error_SyslogWriteError", null),
ERROR_TOO_MANY_THREADS( 5061, "Error_TooManyThreads", null),
ERROR_PASSWORD_REQUIRED( 5062, "Error_PasswordRequired", null),
ERROR_SECURITY_VIOLATION( 5063, "Error_SecurityViolation", null),
ERROR_TRIAL_VIOLATION( 5064, "Error_TrialViolation", null),
ERROR_ACCOUNT_DISABLED( 5065, "Error_AccountDisabled", new ChaiError[]{ChaiError.ACCOUNT_DISABLED}),
ERROR_ACCOUNT_EXPIRED( 5066, "Error_AccountExpired", new ChaiError[]{ChaiError.ACCOUNT_EXPIRED}),
ERROR_NO_OTP_CONFIGURATION( 5087, "Error_NoOtpConfiguration", null),
ERROR_INCORRECT_OTP_TOKEN( 5088, "Error_WrongOtpToken", null),
ERROR_WRITING_OTP_SECRET( 5086, "Error_Writing_Otp_Secret", null),
ERROR_INTRUDER_ATTR_SEARCH( 5067, "Error_AttrIntruder", null, ErrorFlag.Permanent),
ERROR_AUDIT_WRITE( 5068, "Error_AuditWrite", null),
ERROR_INTRUDER_LDAP( 5069, "Error_LdapIntruder", new ChaiError[]{ChaiError.INTRUDER_LOCKOUT}, ErrorFlag.Permanent),
ERROR_NO_LDAP_CONNECTION( 5070, "Error_NoLdapConnection", null, ErrorFlag.Permanent),
ERROR_OAUTH_ERROR( 5071, "Error_OAuthError", null, ErrorFlag.Permanent),
ERROR_REPORTING_ERROR( 5072, "Error_ReportingError", null, ErrorFlag.Permanent),
ERROR_INTRUDER_TOKEN_DEST( 5073, "Error_TokenDestIntruder", null, ErrorFlag.Permanent),
ERROR_OTP_RECOVERY_USED( 5074, "Error_OtpRecoveryUsed", null, ErrorFlag.Permanent),
ERROR_REDIRECT_ILLEGAL( 5075, "Error_RedirectIllegal", null, ErrorFlag.Permanent),
ERROR_CRYPT_ERROR( 5076, "Error_CryptError", null, ErrorFlag.Permanent),
ERROR_SMS_SEND_ERROR( 5078, "Error_SmsSendError", null, ErrorFlag.Permanent),
ERROR_LDAP_DATA_ERROR( 5079, "Error_LdapDataError", null, ErrorFlag.Permanent),
ERROR_MACRO_PARSE_ERROR( 5080, "Error_MacroParseError", null, ErrorFlag.Permanent),
ERROR_NO_PROFILE_ASSIGNED( 5081, "Error_NoProfileAssigned", null, ErrorFlag.Permanent),
ERROR_STARTUP_ERROR( 5082, "Error_StartupError", null, ErrorFlag.Permanent),
ERROR_ENVIRONMENT_ERROR( 5083, "Error_EnvironmentError", null, ErrorFlag.Permanent),
ERROR_APPLICATION_NOT_RUNNING( 5084, "Error_ApplicationNotRunning", null, ErrorFlag.Permanent),
ERROR_EMAIL_SEND_FAILURE( 5085, "Error_EmailSendFailure", null, ErrorFlag.Permanent),
ERROR_PASSWORD_ONLY_BAD( 5089, "Error_PasswordOnlyBad", null),
ERROR_REMOTE_ERROR_VALUE( 6000, "Error_RemoteErrorValue", null, ErrorFlag.Permanent),
ERROR_FIELD_REQUIRED( 5100, "Error_FieldRequired", null),
ERROR_FIELD_NOT_A_NUMBER( 5101, "Error_FieldNotANumber", null),
ERROR_FIELD_INVALID_EMAIL( 5102, "Error_FieldInvalidEmail", null),
ERROR_FIELD_TOO_SHORT( 5103, "Error_FieldTooShort", null),
ERROR_FIELD_TOO_LONG( 5104, "Error_FieldTooLong", null),
ERROR_FIELD_DUPLICATE( 5105, "Error_FieldDuplicate", null),
ERROR_FIELD_BAD_CONFIRM( 5106, "Error_FieldBadConfirm", null),
ERROR_FIELD_REGEX_NOMATCH( 5107, "Error_FieldRegexNoMatch", null),
CONFIG_UPLOAD_SUCCESS( 5200, "Error_ConfigUploadSuccess", null),
CONFIG_UPLOAD_FAILURE( 5201, "Error_ConfigUploadFailure", null),
CONFIG_SAVE_SUCCESS( 5202, "Error_ConfigSaveSuccess", null),
CONFIG_FORMAT_ERROR( 5203, "Error_ConfigFormatError", null),
CONFIG_LDAP_FAILURE( 5204, "Error_ConfigLdapFailure", null),
CONFIG_LDAP_SUCCESS( 5205, "Error_ConfigLdapSuccess", null),
ERROR_HTTP_404( 5300, "Error_HTTP_404", null),
;
enum ErrorFlag {
Permanent,
ForceLogout,
}
private final int errorCode;
private final String resourceKey;
private final ChaiError[] chaiErrorCode;
private final boolean errorIsPermanent;
private final boolean forceLogout;
PwmError(final int errorCode, final String resourceKey, final ChaiError[] chaiErrorCode, final ErrorFlag...errorFlags) {
this.resourceKey = resourceKey;
this.errorCode = errorCode;
this.errorIsPermanent = JavaHelper.enumArrayContainsValue(errorFlags, ErrorFlag.Permanent);
this.forceLogout = JavaHelper.enumArrayContainsValue(errorFlags, ErrorFlag.ForceLogout);
this.chaiErrorCode = chaiErrorCode;
}
public String getLocalizedMessage(final Locale locale, final Configuration config, final String... fieldValue) {
return LocaleHelper.getLocalizedMessage(locale, this.getResourceKey(), config, password.pwm.i18n.Error.class, fieldValue);
}
public static PwmError forChaiError(final ChaiError errorCode) {
if (errorCode == null) {
return null;
}
for (final PwmError pwmError : values()) {
if (pwmError.chaiErrorCode != null) {
for (final ChaiError loopCode : pwmError.chaiErrorCode) {
if (loopCode == errorCode) {
return pwmError;
}
}
}
}
return null;
}
public static PwmError forErrorNumber(final int code) {
for (final PwmError pwmError : values()) {
if (pwmError.getErrorCode() == code) {
return pwmError;
}
}
return null;
}
private boolean isForceLogout() {
return forceLogout;
}
public boolean isErrorIsPermanent() {
return errorIsPermanent;
}
public String getResourceKey() {
return resourceKey;
}
public int getErrorCode() {
return errorCode;
}
public ErrorInformation toInfo() {
return new ErrorInformation(this);
}
}