use of org.openecard.gui.executor.ExecutionResults in project open-ecard by ecsec.
the class PINStepAction method perform.
@Override
public StepActionResult perform(Map<String, ExecutionResults> oldResults, StepResult result) {
if (result.isBack()) {
return new StepActionResult(StepActionResultStatus.BACK);
}
DIDAuthenticationDataType paceInput = new DIDAuthenticationDataType();
paceInput.setProtocol(ECardConstants.Protocol.PACE);
AuthDataMap tmp;
try {
tmp = new AuthDataMap(paceInput);
} catch (ParserConfigurationException ex) {
LOG.error("Failed to read empty Protocol data.", ex);
return new StepActionResult(StepActionResultStatus.CANCEL);
}
AuthDataResponse paceInputMap = tmp.createResponse(paceInput);
if (capturePin) {
ExecutionResults executionResults = oldResults.get(getStepID());
if (!verifyUserInput(executionResults)) {
// let the user enter the pin again, when input verification failed
return new StepActionResult(StepActionResultStatus.REPEAT, createPINReplacementStep(false, true));
} else {
paceInputMap.addElement(PACEInputType.PIN, oldPIN);
}
}
paceInputMap.addElement(PACEInputType.PIN_ID, PIN_ID_PIN);
// perform PACE by EstablishChannel
EstablishChannel establishChannel = new EstablishChannel();
establishChannel.setSlotHandle(conHandle.getSlotHandle());
establishChannel.setAuthenticationProtocolData(paceInputMap.getResponse());
establishChannel.getAuthenticationProtocolData().setProtocol(ECardConstants.Protocol.PACE);
try {
EstablishChannelResponse establishChannelResponse = (EstablishChannelResponse) dispatcher.safeDeliver(establishChannel);
WSHelper.checkResult(establishChannelResponse);
// PACE completed successfully, we now modify the pin
if (capturePin) {
sendResetRetryCounter();
} else {
sendModifyPIN();
}
// PIN modified successfully, proceed with next step
return new StepActionResult(StepActionResultStatus.NEXT);
} catch (WSException ex) {
if (capturePin) {
retryCounter--;
LOG.info("Wrong PIN entered, trying again (remaining tries {}).", retryCounter);
if (retryCounter == 1) {
Step replacementStep = createCANReplacementStep();
return new StepActionResult(StepActionResultStatus.BACK, replacementStep);
} else {
Step replacementStep = createPINReplacementStep(true, false);
return new StepActionResult(StepActionResultStatus.REPEAT, replacementStep);
}
} else {
LOG.warn("PIN not entered successfully in terminal.");
return new StepActionResult(StepActionResultStatus.CANCEL);
}
} catch (APDUException ex) {
LOG.error("Failed to transmit Reset Retry Counter APDU.", ex);
return new StepActionResult(StepActionResultStatus.CANCEL);
} catch (IllegalArgumentException ex) {
LOG.error("Failed to transmit Reset Retry Counter APDU.", ex);
return new StepActionResult(StepActionResultStatus.CANCEL);
} catch (IFDException ex) {
LOG.error("Failed to transmit Reset Retry Counter APDU.", ex);
return new StepActionResult(StepActionResultStatus.CANCEL);
}
}
use of org.openecard.gui.executor.ExecutionResults in project open-ecard by ecsec.
the class PUKStepAction method perform.
@Override
public StepActionResult perform(Map<String, ExecutionResults> oldResults, StepResult result) {
if (result.isBack()) {
return new StepActionResult(StepActionResultStatus.BACK);
}
DIDAuthenticationDataType paceInput = new DIDAuthenticationDataType();
paceInput.setProtocol(ECardConstants.Protocol.PACE);
AuthDataMap tmp;
try {
tmp = new AuthDataMap(paceInput);
} catch (ParserConfigurationException ex) {
LOG.error("Failed to read empty Protocol data.", ex);
return new StepActionResult(StepActionResultStatus.CANCEL);
}
AuthDataResponse paceInputMap = tmp.createResponse(paceInput);
if (capturePin) {
ExecutionResults executionResults = oldResults.get(getStepID());
if (!verifyUserInput(executionResults)) {
// TODO inform user that something with his input is wrong
return new StepActionResult(StepActionResultStatus.REPEAT);
} else {
paceInputMap.addElement(PACEInputType.PIN, puk);
}
}
paceInputMap.addElement(PACEInputType.PIN_ID, PIN_ID_PUK);
// perform PACE by sending an EstablishChannel
EstablishChannel establishChannel = new EstablishChannel();
establishChannel.setSlotHandle(slotHandle);
establishChannel.setAuthenticationProtocolData(paceInputMap.getResponse());
establishChannel.getAuthenticationProtocolData().setProtocol(ECardConstants.Protocol.PACE);
try {
EstablishChannelResponse establishChannelResponse = (EstablishChannelResponse) dispatcher.safeDeliver(establishChannel);
WSHelper.checkResult(establishChannelResponse);
// pace was successfully performed, so get to the next step
return new StepActionResult(StepActionResultStatus.NEXT);
} catch (WSException ex) {
LOG.info("Wrong PUK entered, trying again");
// TODO update the step to inform the user that he entered the puk wrong
return new StepActionResult(StepActionResultStatus.REPEAT);
} finally {
DestroyChannel destroyChannel = new DestroyChannel();
destroyChannel.setSlotHandle(slotHandle);
dispatcher.safeDeliver(destroyChannel);
}
}
use of org.openecard.gui.executor.ExecutionResults in project open-ecard by ecsec.
the class CHATStepAction method processResult.
private void processResult(Map<String, ExecutionResults> results) {
List<String> dataGroupsNames = getDataGroupNames();
List<String> specialFunctionsNames = getSpecialFunctionNames();
ExecutionResults executionResults = results.get(getStepID());
// process read access and special functions
Checkbox cbRead = (Checkbox) executionResults.getResult(CHATStep.READ_CHAT_BOXES);
if (cbRead != null) {
CHAT selectedCHAT = eacData.requiredCHAT;
for (BoxItem item : cbRead.getBoxItems()) {
if (dataGroupsNames.contains(item.getName())) {
selectedCHAT.setReadAccess(item.getName(), item.isChecked());
} else if (specialFunctionsNames.contains(item.getName())) {
selectedCHAT.setSpecialFunction(item.getName(), item.isChecked());
}
}
}
// process write access
Checkbox cbWrite = (Checkbox) executionResults.getResult(CHATStep.WRITE_CHAT_BOXES);
if (cbWrite != null) {
CHAT selectedCHAT = eacData.requiredCHAT;
for (BoxItem item : cbWrite.getBoxItems()) {
if (dataGroupsNames.contains(item.getName())) {
selectedCHAT.setWriteAccess(item.getName(), item.isChecked());
}
}
}
}
Aggregations