package es.gob.jmulticard;
import java.util.logging.Logger;
import javax.security.auth.callback.Callback;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.callback.PasswordCallback;
import javax.security.auth.callback.UnsupportedCallbackException;
import es.gob.jmulticard.card.dnie.CustomAuthorizeCallback;
import es.gob.jmulticard.card.dnie.CustomTextInputCallback;
/** CallbackHandler que gestiona los Callbacks de petición de información al usuario.
* @author Sergio Martínez Rico. */
public final class TestingDnieCallbackHandler implements CallbackHandler {
private final String can;
private final char[] pin;
/** Construye un CallbackHandler de prueba.
* @param c CAN
* @param p PIN. */
public TestingDnieCallbackHandler(final String c, final String p) {
this.can = c;
this.pin = p.toCharArray();
}
private static final Logger LOGGER = Logger.getLogger("es.gob.jmulticard"); //$NON-NLS-1$
@Override
public void handle(final Callback[] callbacks) throws UnsupportedCallbackException {
if (callbacks != null) {
for (final Callback cb : callbacks) {
if (cb != null) {
if (cb instanceof CustomTextInputCallback) {
((CustomTextInputCallback)cb).setText(this.can);
return;
}
else if (cb instanceof CustomAuthorizeCallback) {
((CustomAuthorizeCallback)cb).setAuthorized(true);
return;
}
else if (cb instanceof PasswordCallback) {
((PasswordCallback)cb).setPassword(this.pin);
return;
}
else {
LOGGER.severe("Callback no soportada: " + cb.getClass().getName()); //$NON-NLS-1$
}
}
}
}
else {
LOGGER.warning("Se ha revibido un array de Callbacks nulo"); //$NON-NLS-1$
}
throw new UnsupportedCallbackException(null);
}
}