package net.teamlixo.eggcrack.authentication;
public class AuthenticationException extends Exception {
private final AuthenticationFailure failure;
private final String details;
public AuthenticationException(AuthenticationFailure failure, String details) {
super(failure.getMessage());
this.failure = failure;
this.details = details;
}
public String getDetails() {
return details;
}
public AuthenticationFailure getFailure() {
return failure;
}
public boolean isCritical() {
return failure.getAction() == AuthenticationAction.STOP;
}
public enum AuthenticationFailure {
INCORRECT_CREDENTIAL(AuthenticationAction.NEXT_CREDENTIALS, "Incorrect credential for account.", true),
REJECTED(AuthenticationAction.RETRY_CREDENTIALS, "Authentication rejected.", true),
BAD_PROXY(AuthenticationAction.RETRY_CREDENTIALS, "Bad proxy", false),
TIMEOUT(AuthenticationAction.RETRY_CREDENTIALS, "Authentication operation timed out.", false),
INVALID_ACCOUNT(AuthenticationAction.STOP, "Account invalid; authentication cannot be performed.", false),
NO_PROFILES(AuthenticationAction.STOP, "Account does not have any profiles.", true),
INVALID_CREDENTIAL(AuthenticationAction.NEXT_CREDENTIALS, "Invalid credential for account.", true);
private final AuthenticationAction action;
private final String message;
private final boolean requested;
private AuthenticationFailure(AuthenticationAction action, String message, boolean requested) {
this.action = action;
this.message = message;
this.requested = requested;
}
public boolean hasRequested() {
return requested;
}
public AuthenticationAction getAction() {
return action;
}
public String getMessage() {
return message;
}
}
public enum AuthenticationAction {
RETRY_CREDENTIALS,
NEXT_CREDENTIALS,
STOP
}
}