From 9e50f1a103a37d9dcfbeb5ea45bcf6c6c0c0f6dd Mon Sep 17 00:00:00 2001 From: Tobias Kellner Date: Thu, 27 Nov 2014 20:57:33 +0100 Subject: Implement PDF-AS 4 changes --- .../asit/pdfover/gui/bku/MobileBKUConnector.java | 128 +++++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 pdf-over-gui/src/main/java/at/asit/pdfover/gui/bku/MobileBKUConnector.java (limited to 'pdf-over-gui/src/main/java/at/asit/pdfover/gui/bku/MobileBKUConnector.java') diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/bku/MobileBKUConnector.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/bku/MobileBKUConnector.java new file mode 100644 index 00000000..f08c885e --- /dev/null +++ b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/bku/MobileBKUConnector.java @@ -0,0 +1,128 @@ +/* + * Copyright 2012 by A-SIT, Secure Information Technology Center Austria + * + * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by + * the European Commission - subsequent versions of the EUPL (the "Licence"); + * You may not use this work except in compliance with the Licence. + * You may obtain a copy of the Licence at: + * http://joinup.ec.europa.eu/software/page/eupl + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the Licence is distributed on an "AS IS" basis, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the Licence for the specific language governing permissions and + * limitations under the Licence. + */ +package at.asit.pdfover.gui.bku; + +// Imports +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import at.asit.pdfover.gui.bku.mobile.MobileBKUHandler; +import at.asit.pdfover.gui.workflow.states.MobileBKUState; +import at.asit.pdfover.signator.BkuSlConnector; +import at.asit.pdfover.signator.SLRequest; +import at.asit.pdfover.signator.SLResponse; +import at.asit.pdfover.signator.SignatureException; +import at.asit.pdfover.signer.pdfas.PdfAs4SigningState; + +/** + * + */ +public class MobileBKUConnector implements BkuSlConnector { + /** + * SLF4J Logger instance + **/ + private static final Logger log = LoggerFactory + .getLogger(MobileBKUConnector.class); + + private MobileBKUState state; + + /** + * + * @param state + */ + public MobileBKUConnector(MobileBKUState state) { + this.state = state; + } + + /* (non-Javadoc) + * @see at.asit.pdfover.signator.BkuSlConnector#handleSLRequest(java.lang.String) + */ + @Override + public SLResponse handleSLRequest(SLRequest request) throws SignatureException { + PdfAs4SigningState signingState = (PdfAs4SigningState) this.state.getSigningState(); + signingState.setSignatureRequest(request); + + MobileBKUHandler handler = this.state.getHandler(); + + do { + // Post SL Request + try { + String responseData = handler.postSLRequest(this.state.getURL(), request); + + // Now we have received some data lets check it: + log.debug("Response from mobile BKU: " + responseData); //$NON-NLS-1$ + + handler.handleSLRequestResponse(responseData); + } catch (Exception ex) { + log.error("Error in PostSLRequestThread", ex); //$NON-NLS-1$ + this.state.setThreadException(ex); + this.state.displayError(ex); + throw new SignatureException(ex); + } + + do { + // Check if credentials are available, get them from user if not + this.state.checkCredentials(); + + // Post credentials + try { + String responseData = handler.postCredentials(); + + // Now we have received some data lets check it: + log.debug("Response from mobile BKU: " + responseData); //$NON-NLS-1$ + + handler.handleCredentialsResponse(responseData); + } catch (Exception ex) { + log.error("Error in PostCredentialsThread", ex); //$NON-NLS-1$ + this.state.setThreadException(ex); + this.state.displayError(ex); + throw new SignatureException(ex); + } + } while(this.state.getStatus().getErrorMessage() != null); + + // Check if response is already available + if (signingState.hasSignatureResponse()) { + SLResponse response = signingState.getSignatureResponse(); + signingState.setSignatureResponse(null); + return response; + } + + do { + // Get TAN + this.state.checkTAN(); + + // Post TAN + try { + String responseData = handler.postTAN(); + + // Now we have received some data lets check it: + log.debug("Response from mobile BKU: " + responseData); //$NON-NLS-1$ + + handler.handleTANResponse(responseData); + } catch (Exception ex) { + log.error("Error in PostTanThread", ex); //$NON-NLS-1$ + this.state.setThreadException(ex); + this.state.displayError(ex); + throw new SignatureException(ex); + } + } while (this.state.getStatus().getErrorMessage() != null); + if (this.state.getStatus().getTanTries() == -1) + throw new SignatureException(new IllegalStateException()); + } while (this.state.getStatus().getTanTries() == -2); + + return signingState.getSignatureResponse(); + } +} -- cgit v1.2.3