diff options
| -rw-r--r-- | pdf-over-gui/src/main/java/at/asit/pdfover/gui/bku/mobile/IAIKHandler.java | 731 | 
1 files changed, 368 insertions, 363 deletions
| diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/bku/mobile/IAIKHandler.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/bku/mobile/IAIKHandler.java index de34796c..efb2b37d 100644 --- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/bku/mobile/IAIKHandler.java +++ b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/bku/mobile/IAIKHandler.java @@ -1,363 +1,368 @@ -/* - * 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.mobile; - -// Imports -import java.io.IOException; -import java.net.URL; - -import org.apache.commons.httpclient.HttpClient; -import org.apache.commons.httpclient.HttpException; -import org.apache.commons.httpclient.HttpStatus; -import org.apache.commons.httpclient.methods.GetMethod; -import org.apache.commons.httpclient.methods.PostMethod; -import org.eclipse.swt.SWT; -import org.eclipse.swt.widgets.Display; -import org.eclipse.swt.widgets.Shell; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import at.asit.pdfover.gui.controls.Dialog; -import at.asit.pdfover.gui.controls.Dialog.BUTTONS; -import at.asit.pdfover.gui.controls.Dialog.ICON; -import at.asit.pdfover.gui.utils.Messages; -import at.asit.pdfover.gui.workflow.states.MobileBKUState; -import at.asit.pdfover.signator.SLResponse; - -/** - *  - */ -public class IAIKHandler extends MobileBKUHandler { -	/** -	 * SLF4J Logger instance -	 **/ -	private static final Logger log = LoggerFactory -			.getLogger(IAIKHandler.class); - -	Shell shell; - -	/** -	 * Constructor -	 * @param state the MobileBKUState -	 * @param shell the Shell -	 */ -	public IAIKHandler(MobileBKUState state, Shell shell) { -		super(state); -		this.shell = shell; -	} - -	/* (non-Javadoc) -	 * @see at.asit.pdfover.gui.workflow.states.mobilebku.MobileBKUHandler#handleSLRequestResponse(java.lang.String) -	 */ -	@Override -	public void handleSLRequestResponse(String responseData) throws Exception { -		IAIKStatus status = getStatus(); - -		// Extract infos: -		String credentialURL = MobileBKUHelper.extractValueFromTagWithParam(responseData, -				"form", "name", "userCredLogon", "action"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ -		URL baseURL = new URL(status.getBaseURL()); -		credentialURL = MobileBKUHelper.getQualifiedURL(credentialURL, baseURL); - -		String viewState = MobileBKUHelper.extractValueFromTagWithParam( -				responseData, "input", "name", "javax.faces.ViewState", "value"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ - -		String sessionID = null; -		int si = credentialURL.indexOf("jsessionid="); //$NON-NLS-1$ -		if (si != -1) -			sessionID = credentialURL.substring(si + 11); -		else -			sessionID = status.getSessionID(); - -		log.info("credentialURL: " + credentialURL); //$NON-NLS-1$ -		log.info("sessionID: " + sessionID); //$NON-NLS-1$ -		log.info("viewState: " + viewState); //$NON-NLS-1$ - -		status.setBaseURL(credentialURL); -		if (sessionID != null) -			status.setSessionID(sessionID); -		status.setViewState(viewState); -	} - -	/* (non-Javadoc) -	 * @see at.asit.pdfover.gui.workflow.states.mobilebku.MobileBKUHandler#postCredentials() -	 */ -	@Override -	public String postCredentials() throws Exception { -		IAIKStatus status = getStatus(); - -		MobileBKUHelper.registerTrustedSocketFactory(); -		HttpClient client = MobileBKUHelper.getHttpClient(status); - -		PostMethod post = new PostMethod(status.ensureSessionID(status.getBaseURL())); -		post.getParams().setContentCharset("utf-8"); //$NON-NLS-1$ -		post.addParameter("javax.faces.ViewState", status.getViewState()); //$NON-NLS-1$ -		post.addParameter("userCredLogon:phoneNr", status.getPhoneNumber()); //$NON-NLS-1$ -		post.addParameter("userCredLogon:pwd", status.getMobilePassword()); //$NON-NLS-1$ -		post.addParameter("userCredLogon:logonButton", "userCredLogon:logonButton"); //$NON-NLS-1$ //$NON-NLS-2$ -		post.addParameter("javax.faces.partial.ajax", "true"); //$NON-NLS-1$ //$NON-NLS-2$ -		post.addParameter("javax.faces.source", "userCredLogon:logonButton"); //$NON-NLS-1$ //$NON-NLS-2$ -		post.addParameter("javax.faces.partial.execute", "@all"); //$NON-NLS-1$ //$NON-NLS-2$ -		post.addParameter("javax.faces.partial.render", "userCredLogon:userCredentialLogonPanel"); //$NON-NLS-1$ //$NON-NLS-2$ -		post.addParameter("userCredLogon", "userCredLogon"); //$NON-NLS-1$ //$NON-NLS-2$ -		post.addParameter("userCredLogon:j_idt33_input", "de"); //$NON-NLS-1$ //$NON-NLS-2$ - -		return executePost(client, post); -} - -	/* (non-Javadoc) -	 * @see at.asit.pdfover.gui.workflow.states.mobilebku.MobileBKUHandler#handleCredentialsResponse(java.lang.String) -	 */ -	@Override -	public void handleCredentialsResponse(String responseData) throws Exception { -		IAIKStatus status = getStatus(); - -		String refVal = null; -		String signatureDataURL = null; - -		status.setErrorMessage(null); - -		if (!responseData.contains("redirection_url")) { //$NON-NLS-1$ -			// Assume that an error occurred - -			String errorMessage; -			try { -				errorMessage = MobileBKUHelper.extractSubstring(responseData, ":errorMessage\">", "</span>"); //$NON-NLS-1$ //$NON-NLS-2$ -			} catch (Exception e) { -				errorMessage = Messages.getString("error.Unexpected"); //$NON-NLS-1$ -			} -			status.setErrorMessage(errorMessage); - -			// force UI again! -			status.setMobilePassword(null); -			return; -		} - -		HttpClient client = MobileBKUHelper.getHttpClient(status); - -		String redirectURL = MobileBKUHelper.extractSubstring(responseData, -				"\"redirection_url\":\"", "\""); //$NON-NLS-1$ //$NON-NLS-2$ - -		URL baseURL = new URL(status.getBaseURL()); -		redirectURL = MobileBKUHelper.getQualifiedURL(redirectURL, baseURL); -		redirectURL = status.ensureSessionID(redirectURL); - -		responseData = getRedirect(client, redirectURL); - -		if (responseData.contains("sl:InfoboxReadResponse")) { //$NON-NLS-1$ -			// credentials ok! InfoboxReadResponse -			getSigningState().setSignatureResponse( -					new SLResponse(responseData, status.getServer(), null, null)); -			return; -		} -		 -		if (responseData.contains("tanCodeLogon")) -		{ -			refVal = MobileBKUHelper.extractContentFromTagWithParam(responseData, -					"span", "id", "tanCodeLogon:refValue"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ -		} -		else -		{ -			refVal = MobileBKUHelper.extractContentFromTagWithParam(responseData, -					"span", "id", "j_idt5:refValue"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ -		} -		 - - -		if (responseData.contains("/error")) { //$NON-NLS-1$ -			// Error response - try again -			String errorMessage = MobileBKUHelper.extractContentFromTagWithParam( -					responseData, "div", "id", "errorPanel:panel_content"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ -			if (errorMessage.contains("<br />")) //$NON-NLS-1$ -				errorMessage = errorMessage.substring(0, errorMessage.indexOf("<br />")); //$NON-NLS-1$ -			errorMessage.replace("\n", " "); //$NON-NLS-1$ //$NON-NLS-2$ -			status.setErrorMessage(errorMessage); - -			status.setMobilePassword(null); -			return; -		} - -		 -		 -		 -		String viewState = MobileBKUHelper.extractValueFromTagWithParam( -				responseData, "input", "name", "javax.faces.ViewState", "value"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ -		status.setViewState(viewState); - -		if (!responseData.contains("tanCodeLogon.jsf")) { //$NON-NLS-1$ -			// Assume that we need to confirm reference value dialog -			log.debug("viewState: " + viewState); //$NON-NLS-1$ -			 -		 - -			PostMethod post = new PostMethod(redirectURL); -			post.getParams().setContentCharset("utf-8"); //$NON-NLS-1$ -			post.addParameter("javax.faces.partial.ajax", "true"); //$NON-NLS-1$ //$NON-NLS-2$ -			post.addParameter("javax.faces.source", "j_idt5:yesButton"); //$NON-NLS-1$ //$NON-NLS-2$ -			post.addParameter("javax.faces.partial.execute", "@all"); //$NON-NLS-1$ //$NON-NLS-2$ -			post.addParameter("j_idt5:yesButton", "j_idt5:yesButton"); //$NON-NLS-1$ //$NON-NLS-2$ -			post.addParameter("j_idt5", "j_idt5"); //$NON-NLS-1$ //$NON-NLS-2$ -			post.addParameter("javax.faces.ViewState", status.getViewState()); //$NON-NLS-1$ -			responseData = executePost(client, post); - -			log.debug("Response: " + responseData); //$NON-NLS-1$ -			if (responseData.contains("/error")) { //$NON-NLS-1$ -				// Error response - try again -				String errorMessage = Messages.getString("error.Unexpected"); //$NON-NLS-1$ -				status.setErrorMessage(errorMessage); - -				status.setMobilePassword(null); -				return; -			} - -			redirectURL = MobileBKUHelper.extractSubstring(responseData, -					"redirect url=\"", "\""); //$NON-NLS-1$ //$NON-NLS-2$ -			baseURL = new URL(status.getBaseURL()); -			redirectURL = MobileBKUHelper.getQualifiedURL(redirectURL, baseURL); -			redirectURL = status.ensureSessionID(redirectURL); - -			responseData = getRedirect(client, redirectURL); - -			viewState = MobileBKUHelper.extractValueFromTagWithParam( -					responseData, "input", "name", "javax.faces.ViewState", "value"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ -			status.setViewState(viewState); -		} - -		signatureDataURL = status.getBaseURL(); -		signatureDataURL = signatureDataURL.substring(0, signatureDataURL.lastIndexOf('/') + 1); -		signatureDataURL += "viewer.jsf" + //$NON-NLS-1$ -				MobileBKUHelper.extractSubstring(responseData, "viewer.jsf", "\""); //$NON-NLS-1$ //$NON-NLS-2$ -		signatureDataURL += (signatureDataURL.contains("?") ? "&" : "?") + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ -				"pdfoversessionid=" + status.getSessionID(); //$NON-NLS-1$ - -		String tanURL = MobileBKUHelper.extractValueFromTagWithParam(responseData, -				"form", "name", "tanCodeLogon", "action"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ -		baseURL = new URL(status.getBaseURL()); -		tanURL = MobileBKUHelper.getQualifiedURL(tanURL, baseURL); -		tanURL = status.ensureSessionID(tanURL); - -		log.debug("reference value: " + refVal); //$NON-NLS-1$ -		log.debug("signatureDataURL: " + signatureDataURL); //$NON-NLS-1$ -		log.debug("tanURL: " + tanURL); //$NON-NLS-1$ -		log.debug("viewState: " + viewState); //$NON-NLS-1$ - -		status.setRefVal(refVal); -		status.setSignatureDataURL(signatureDataURL); -		status.setBaseURL(tanURL); -	} - -	/* (non-Javadoc) -	 * @see at.asit.pdfover.gui.workflow.states.mobilebku.MobileBKUHandler#postTAN() -	 */ -	@Override -	public String postTAN() throws Exception { -		IAIKStatus status = getStatus(); - -		MobileBKUHelper.registerTrustedSocketFactory(); -		HttpClient client = MobileBKUHelper.getHttpClient(status); - -		PostMethod post = new PostMethod(status.getBaseURL()); -		post.getParams().setContentCharset("utf-8"); //$NON-NLS-1$ -		post.addParameter("javax.faces.ViewState", status.getViewState()); //$NON-NLS-1$ -		post.addParameter("tanCodeLogon", "tanCodeLogon"); //$NON-NLS-1$ //$NON-NLS-2$ -		post.addParameter("tanCodeLogon:signButton", ""); //$NON-NLS-1$ //$NON-NLS-2$ -		post.addParameter("tanCodeLogon:authCode", status.getTan()); //$NON-NLS-1$ -		post.addParameter("referenceValue", status.getRefVal()); //$NON-NLS-1$ - -		return executePost(client, post); -	} - -	/* (non-Javadoc) -	 * @see at.asit.pdfover.gui.workflow.states.mobilebku.MobileBKUHandler#handleTANResponse(java.lang.String) -	 */ -	@Override -	public void handleTANResponse(String responseData) throws Exception { -		final IAIKStatus status = getStatus(); -		status.setErrorMessage(null); -		if (responseData.contains("sl:CreateCMSSignatureResponse xmlns:sl")) { //$NON-NLS-1$ -			// success -			getSigningState().setSignatureResponse( -					new SLResponse(responseData, status.getServer(), null, null)); -		} else { -			try { -				String errorMessage = MobileBKUHelper.extractContentFromTagWithParam( -						responseData, "p", "class", "ui-messages-error ui-messages-error-signing"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ -				status.setErrorMessage(errorMessage); -				log.error(errorMessage); - -				//Go back to TAN entry -				MobileBKUHelper.registerTrustedSocketFactory(); -				HttpClient client = MobileBKUHelper.getHttpClient(status); - -				PostMethod post = new PostMethod(status.getBaseURL()); -				post.getParams().setContentCharset("utf-8"); //$NON-NLS-1$ -				post.addParameter("javax.faces.partial.ajax", "true"); //$NON-NLS-1$ //$NON-NLS-2$ -				post.addParameter("javax.faces.source", "tanCodeLogon:backbutton"); //$NON-NLS-1$ //$NON-NLS-2$ -				post.addParameter("javax.faces.partial.execute", "@all"); //$NON-NLS-1$ //$NON-NLS-2$ -				post.addParameter("javax.faces.partial.render", "tanCodeLogon:tanCodeLogonPanel"); //$NON-NLS-1$ //$NON-NLS-2$ -				post.addParameter("tanCodeLogon:backbutton", "tanCodeLogon:backbutton"); //$NON-NLS-1$ //$NON-NLS-2$ -				post.addParameter("tanCodeLogon", "tanCodeLogon"); //$NON-NLS-1$ //$NON-NLS-2$ -				post.addParameter("javax.faces.ViewState", status.getViewState()); //$NON-NLS-1$ - -				executePost(client, post); -			} catch (Exception e) { -				// Assume that wrong TAN was entered too many times -				Display.getDefault().syncExec(new Runnable() { -					@Override -					public void run() { -						Dialog dialog = new Dialog(IAIKHandler.this.shell, Messages.getString("common.warning"), //$NON-NLS-1$ -								Messages.getString("mobileBKU.tan_tries_exceeded"), //$NON-NLS-1$ -								BUTTONS.OK_CANCEL, ICON.QUESTION); -						if (dialog.open() == SWT.CANCEL) { -							// Go back to BKU Selection -							status.setTanTries(-1); -						} else { -							// Start signature process over -							status.setTanTries(-2); -						} -					} -				}); -			} -		} -	} - -	@Override -	public IAIKStatus getStatus() { -		return (IAIKStatus) getState().getStatus(); -	} - -	private String getRedirect(HttpClient client, String redirectURL) throws HttpException, IOException { -		redirectURL = getStatus().ensureSessionID(redirectURL); -		log.debug("Sending get request to URL " + redirectURL); //$NON-NLS-1$ - -		GetMethod get = new GetMethod(redirectURL); -		int returnCode = client.executeMethod(get); -		if (returnCode != HttpStatus.SC_OK) { -			throw new HttpException(HttpStatus.getStatusText(returnCode)); -		} -		String responseData = get.getResponseBodyAsString(); -		log.debug("Response: " + responseData); //$NON-NLS-1$ -		return responseData; -	} - -	/* (non-Javadoc) -	 * @see at.asit.pdfover.gui.bku.mobile.MobileBKUHandler#useBase64Request() -	 */ -	@Override -	public boolean useBase64Request() { -		return false; -	} -} +/*
 + * 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.mobile;
 +
 +// Imports
 +import java.io.IOException;
 +import java.net.URL;
 +
 +import org.apache.commons.httpclient.HttpClient;
 +import org.apache.commons.httpclient.HttpException;
 +import org.apache.commons.httpclient.HttpStatus;
 +import org.apache.commons.httpclient.methods.GetMethod;
 +import org.apache.commons.httpclient.methods.PostMethod;
 +import org.eclipse.swt.SWT;
 +import org.eclipse.swt.widgets.Display;
 +import org.eclipse.swt.widgets.Shell;
 +import org.slf4j.Logger;
 +import org.slf4j.LoggerFactory;
 +
 +import at.asit.pdfover.gui.controls.Dialog;
 +import at.asit.pdfover.gui.controls.Dialog.BUTTONS;
 +import at.asit.pdfover.gui.controls.Dialog.ICON;
 +import at.asit.pdfover.gui.utils.Messages;
 +import at.asit.pdfover.gui.workflow.states.MobileBKUState;
 +import at.asit.pdfover.signator.SLResponse;
 +
 +/**
 + * 
 + */
 +public class IAIKHandler extends MobileBKUHandler {
 +	/**
 +	 * SLF4J Logger instance
 +	 **/
 +	private static final Logger log = LoggerFactory
 +			.getLogger(IAIKHandler.class);
 +
 +	Shell shell;
 +
 +	/**
 +	 * Constructor
 +	 * @param state the MobileBKUState
 +	 * @param shell the Shell
 +	 */
 +	public IAIKHandler(MobileBKUState state, Shell shell) {
 +		super(state);
 +		this.shell = shell;
 +	}
 +
 +	/* (non-Javadoc)
 +	 * @see at.asit.pdfover.gui.workflow.states.mobilebku.MobileBKUHandler#handleSLRequestResponse(java.lang.String)
 +	 */
 +	@Override
 +	public void handleSLRequestResponse(String responseData) throws Exception {
 +		IAIKStatus status = getStatus();
 +
 +		// Extract infos:
 +		String credentialURL = MobileBKUHelper.extractValueFromTagWithParam(responseData,
 +				"form", "name", "userCredLogon", "action"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
 +		URL baseURL = new URL(status.getBaseURL());
 +		credentialURL = MobileBKUHelper.getQualifiedURL(credentialURL, baseURL);
 +
 +		String viewState = MobileBKUHelper.extractValueFromTagWithParam(
 +				responseData, "input", "name", "javax.faces.ViewState", "value"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
 +
 +		String sessionID = null;
 +		int si = credentialURL.indexOf("jsessionid="); //$NON-NLS-1$
 +		if (si != -1)
 +			sessionID = credentialURL.substring(si + 11);
 +		else
 +			sessionID = status.getSessionID();
 +
 +		log.info("credentialURL: " + credentialURL); //$NON-NLS-1$
 +		log.info("sessionID: " + sessionID); //$NON-NLS-1$
 +		log.info("viewState: " + viewState); //$NON-NLS-1$
 +
 +		status.setBaseURL(credentialURL);
 +		if (sessionID != null)
 +			status.setSessionID(sessionID);
 +		status.setViewState(viewState);
 +	}
 +
 +	/* (non-Javadoc)
 +	 * @see at.asit.pdfover.gui.workflow.states.mobilebku.MobileBKUHandler#postCredentials()
 +	 */
 +	@Override
 +	public String postCredentials() throws Exception {
 +		IAIKStatus status = getStatus();
 +
 +		MobileBKUHelper.registerTrustedSocketFactory();
 +		HttpClient client = MobileBKUHelper.getHttpClient(status);
 +
 +		PostMethod post = new PostMethod(status.ensureSessionID(status.getBaseURL()));
 +		post.getParams().setContentCharset("utf-8"); //$NON-NLS-1$
 +		post.addParameter("javax.faces.ViewState", status.getViewState()); //$NON-NLS-1$
 +		post.addParameter("userCredLogon:phoneNr", status.getPhoneNumber()); //$NON-NLS-1$
 +		post.addParameter("userCredLogon:pwd", status.getMobilePassword()); //$NON-NLS-1$
 +		post.addParameter("userCredLogon:logonButton", "userCredLogon:logonButton"); //$NON-NLS-1$ //$NON-NLS-2$
 +		post.addParameter("javax.faces.partial.ajax", "true"); //$NON-NLS-1$ //$NON-NLS-2$
 +		post.addParameter("javax.faces.source", "userCredLogon:logonButton"); //$NON-NLS-1$ //$NON-NLS-2$
 +		post.addParameter("javax.faces.partial.execute", "@all"); //$NON-NLS-1$ //$NON-NLS-2$
 +		post.addParameter("javax.faces.partial.render", "userCredLogon:userCredentialLogonPanel"); //$NON-NLS-1$ //$NON-NLS-2$
 +		post.addParameter("userCredLogon", "userCredLogon"); //$NON-NLS-1$ //$NON-NLS-2$
 +		post.addParameter("userCredLogon:j_idt33_input", "de"); //$NON-NLS-1$ //$NON-NLS-2$
 +
 +		return executePost(client, post);
 +}
 +
 +	/* (non-Javadoc)
 +	 * @see at.asit.pdfover.gui.workflow.states.mobilebku.MobileBKUHandler#handleCredentialsResponse(java.lang.String)
 +	 */
 +	@Override
 +	public void handleCredentialsResponse(String responseData) throws Exception {
 +		IAIKStatus status = getStatus();
 +
 +		String refVal = null;
 +		String signatureDataURL = null;
 +
 +		status.setErrorMessage(null);
 +
 +		if (!responseData.contains("redirection_url")) { //$NON-NLS-1$
 +			// Assume that an error occurred
 +
 +			String errorMessage;
 +			try {
 +				errorMessage = MobileBKUHelper.extractSubstring(responseData, ":errorMessage\">", "</span>"); //$NON-NLS-1$ //$NON-NLS-2$
 +			} catch (Exception e) {
 +				errorMessage = Messages.getString("error.Unexpected"); //$NON-NLS-1$
 +			}
 +			status.setErrorMessage(errorMessage);
 +
 +			// force UI again!
 +			status.setMobilePassword(null);
 +			return;
 +		}
 +
 +		HttpClient client = MobileBKUHelper.getHttpClient(status);
 +
 +		String redirectURL = MobileBKUHelper.extractSubstring(responseData,
 +				"\"redirection_url\":\"", "\""); //$NON-NLS-1$ //$NON-NLS-2$
 +
 +		URL baseURL = new URL(status.getBaseURL());
 +		redirectURL = MobileBKUHelper.getQualifiedURL(redirectURL, baseURL);
 +		redirectURL = status.ensureSessionID(redirectURL);
 +
 +		responseData = getRedirect(client, redirectURL);
 +
 +		if (responseData.contains("sl:InfoboxReadResponse")) { //$NON-NLS-1$
 +			// credentials ok! InfoboxReadResponse
 +			getSigningState().setSignatureResponse(
 +					new SLResponse(responseData, status.getServer(), null, null));
 +			return;
 +		}
 +		
 +		if (responseData.contains("tanCodeLogon"))
 +		{
 +			refVal = MobileBKUHelper.extractContentFromTagWithParam(responseData,
 +					"span", "id", "tanCodeLogon:refValue"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 +		}
 +		else
 +		{
 +			refVal = MobileBKUHelper.extractContentFromTagWithParam(responseData,
 +					"span", "id", "j_idt5:refValue"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 +		}
 +		
 +
 +
 +		if (responseData.contains("/error")) { //$NON-NLS-1$
 +			// Error response - try again
 +			String errorMessage = MobileBKUHelper.extractContentFromTagWithParam(
 +					responseData, "div", "id", "errorPanel:panel_content"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 +			if (errorMessage.contains("<br />")) //$NON-NLS-1$
 +				errorMessage = errorMessage.substring(0, errorMessage.indexOf("<br />")); //$NON-NLS-1$
 +			errorMessage.replace("\n", " "); //$NON-NLS-1$ //$NON-NLS-2$
 +			status.setErrorMessage(errorMessage);
 +
 +			status.setMobilePassword(null);
 +			return;
 +		}
 +
 +		
 +		
 +		
 +		String viewState = MobileBKUHelper.extractValueFromTagWithParam(
 +				responseData, "input", "name", "javax.faces.ViewState", "value"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
 +		status.setViewState(viewState);
 +
 +		if (!responseData.contains("tanCodeLogon.jsf")) { //$NON-NLS-1$
 +			// Assume that we need to confirm reference value dialog
 +			log.debug("viewState: " + viewState); //$NON-NLS-1$
 +			
 +		
 +
 +			PostMethod post = new PostMethod(redirectURL);
 +			post.getParams().setContentCharset("utf-8"); //$NON-NLS-1$
 +			post.addParameter("javax.faces.partial.ajax", "true"); //$NON-NLS-1$ //$NON-NLS-2$
 +			post.addParameter("javax.faces.source", "j_idt5:yesButton"); //$NON-NLS-1$ //$NON-NLS-2$
 +			post.addParameter("javax.faces.partial.execute", "@all"); //$NON-NLS-1$ //$NON-NLS-2$
 +			post.addParameter("j_idt5:yesButton", "j_idt5:yesButton"); //$NON-NLS-1$ //$NON-NLS-2$
 +			post.addParameter("j_idt5", "j_idt5"); //$NON-NLS-1$ //$NON-NLS-2$
 +			post.addParameter("javax.faces.ViewState", status.getViewState()); //$NON-NLS-1$
 +			responseData = executePost(client, post);
 +
 +			log.debug("Response: " + responseData); //$NON-NLS-1$
 +			if (responseData.contains("/error")) { //$NON-NLS-1$
 +				// Error response - try again
 +				String errorMessage = Messages.getString("error.Unexpected"); //$NON-NLS-1$
 +				status.setErrorMessage(errorMessage);
 +
 +				status.setMobilePassword(null);
 +				return;
 +			}
 +
 +			redirectURL = MobileBKUHelper.extractSubstring(responseData,
 +					"redirect url=\"", "\""); //$NON-NLS-1$ //$NON-NLS-2$
 +			baseURL = new URL(status.getBaseURL());
 +			redirectURL = MobileBKUHelper.getQualifiedURL(redirectURL, baseURL);
 +			redirectURL = status.ensureSessionID(redirectURL);
 +
 +			responseData = getRedirect(client, redirectURL);
 +
 +			viewState = MobileBKUHelper.extractValueFromTagWithParam(
 +					responseData, "input", "name", "javax.faces.ViewState", "value"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
 +			status.setViewState(viewState);
 +		}
 +
 +		signatureDataURL = status.getBaseURL();
 +		signatureDataURL = signatureDataURL.substring(0, signatureDataURL.lastIndexOf('/') + 1);
 +		signatureDataURL += "viewer.jsf" + //$NON-NLS-1$
 +				MobileBKUHelper.extractSubstring(responseData, "viewer.jsf", "\""); //$NON-NLS-1$ //$NON-NLS-2$
 +		signatureDataURL += (signatureDataURL.contains("?") ? "&" : "?") + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 +				"pdfoversessionid=" + status.getSessionID(); //$NON-NLS-1$
 +
 +		String tanURL = MobileBKUHelper.extractValueFromTagWithParam(responseData,
 +				"form", "name", "tanCodeLogon", "action"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
 +		baseURL = new URL(status.getBaseURL());
 +		tanURL = MobileBKUHelper.getQualifiedURL(tanURL, baseURL);
 +		tanURL = status.ensureSessionID(tanURL);
 +
 +		log.debug("reference value: " + refVal); //$NON-NLS-1$
 +		log.debug("signatureDataURL: " + signatureDataURL); //$NON-NLS-1$
 +		log.debug("tanURL: " + tanURL); //$NON-NLS-1$
 +		log.debug("viewState: " + viewState); //$NON-NLS-1$
 +
 +		status.setRefVal(refVal);
 +		status.setSignatureDataURL(signatureDataURL);
 +		status.setBaseURL(tanURL);
 +	}
 +
 +	/* (non-Javadoc)
 +	 * @see at.asit.pdfover.gui.workflow.states.mobilebku.MobileBKUHandler#postTAN()
 +	 */
 +	@Override
 +	public String postTAN() throws Exception {
 +		IAIKStatus status = getStatus();
 +
 +		MobileBKUHelper.registerTrustedSocketFactory();
 +		HttpClient client = MobileBKUHelper.getHttpClient(status);
 +
 +		PostMethod post = new PostMethod(status.getBaseURL());
 +		post.getParams().setContentCharset("utf-8"); //$NON-NLS-1$
 +		post.addParameter("javax.faces.ViewState", status.getViewState()); //$NON-NLS-1$
 +		post.addParameter("tanCodeLogon", "tanCodeLogon"); //$NON-NLS-1$ //$NON-NLS-2$
 +		post.addParameter("tanCodeLogon:signButton", ""); //$NON-NLS-1$ //$NON-NLS-2$
 +		post.addParameter("tanCodeLogon:authCode", status.getTan()); //$NON-NLS-1$
 +		post.addParameter("referenceValue", status.getRefVal()); //$NON-NLS-1$
 +
 +		return executePost(client, post);
 +	}
 +
 +	/* (non-Javadoc)
 +	 * @see at.asit.pdfover.gui.workflow.states.mobilebku.MobileBKUHandler#handleTANResponse(java.lang.String)
 +	 */
 +	@Override
 +	public void handleTANResponse(String responseData) throws Exception {
 +		final IAIKStatus status = getStatus();
 +		status.setErrorMessage(null);
 +		if (responseData.contains("sl:CreateCMSSignatureResponse xmlns:sl")) { //$NON-NLS-1$
 +			// success
 +			getSigningState().setSignatureResponse(
 +					new SLResponse(responseData, status.getServer(), null, null));
 +		} else {
 +			try {
 +				String errorMessage = MobileBKUHelper.extractContentFromTagWithParam(
 +						responseData, "p", "class", "ui-messages-error ui-messages-error-signing"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 +				status.setErrorMessage(errorMessage);
 +				log.error(errorMessage);
 +
 +				//Go back to TAN entry
 +				MobileBKUHelper.registerTrustedSocketFactory();
 +				HttpClient client = MobileBKUHelper.getHttpClient(status);
 +
 +				PostMethod post = new PostMethod(status.getBaseURL());
 +				post.getParams().setContentCharset("utf-8"); //$NON-NLS-1$
 +				post.addParameter("javax.faces.partial.ajax", "true"); //$NON-NLS-1$ //$NON-NLS-2$
 +				post.addParameter("javax.faces.source", "tanCodeLogon:backbutton"); //$NON-NLS-1$ //$NON-NLS-2$
 +				post.addParameter("javax.faces.partial.execute", "@all"); //$NON-NLS-1$ //$NON-NLS-2$
 +				post.addParameter("javax.faces.partial.render", "tanCodeLogon:tanCodeLogonPanel"); //$NON-NLS-1$ //$NON-NLS-2$
 +				post.addParameter("tanCodeLogon:backbutton", "tanCodeLogon:backbutton"); //$NON-NLS-1$ //$NON-NLS-2$
 +				post.addParameter("tanCodeLogon", "tanCodeLogon"); //$NON-NLS-1$ //$NON-NLS-2$
 +				post.addParameter("javax.faces.ViewState", status.getViewState()); //$NON-NLS-1$
 +
 +				executePost(client, post);
 +			} catch (Exception e) {
 +				// Assume that wrong TAN was entered too many times
 +				Display.getDefault().syncExec(new Runnable() {
 +					@Override
 +					public void run() {
 +						Dialog dialog = new Dialog(IAIKHandler.this.shell, Messages.getString("common.warning"), //$NON-NLS-1$
 +								Messages.getString("mobileBKU.tan_tries_exceeded"), //$NON-NLS-1$
 +								BUTTONS.OK_CANCEL, ICON.QUESTION);
 +						if (dialog.open() == SWT.CANCEL) {
 +							// Go back to BKU Selection
 +							status.setTanTries(-1);
 +						} else {
 +							// Start signature process over
 +							status.setTanTries(-2);
 +						}
 +					}
 +				});
 +			}
 +		}
 +	}
 +
 +	@Override
 +	public IAIKStatus getStatus() {
 +		return (IAIKStatus) getState().getStatus();
 +	}
 +
 +	private String getRedirect(HttpClient client, String redirectURL) throws HttpException, IOException {
 +		redirectURL = getStatus().ensureSessionID(redirectURL);
 +		log.debug("Sending get request to URL " + redirectURL); //$NON-NLS-1$
 +
 +		GetMethod get = new GetMethod(redirectURL);
 +		int returnCode = client.executeMethod(get);
 +		if (returnCode != HttpStatus.SC_OK) {
 +			throw new HttpException(HttpStatus.getStatusText(returnCode));
 +		}
 +		String responseData = get.getResponseBodyAsString();
 +		log.debug("Response: " + responseData); //$NON-NLS-1$
 +		return responseData;
 +	}
 +
 +	/* (non-Javadoc)
 +	 * @see at.asit.pdfover.gui.bku.mobile.MobileBKUHandler#useBase64Request()
 +	 */
 +	@Override
 +	public boolean useBase64Request() {
 +		return false;
 +	}
 +	
 +	@Override
 +	public void handlePolling(String responseData) {
 +		//nothing todo
 +	}
 +}
 | 
