summaryrefslogtreecommitdiff
path: root/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/mobilebku/PostSLRequestThread.java
diff options
context:
space:
mode:
authortkellner <tkellner@174cde9d-5d70-4d2a-aa98-46368bc2aaf7>2013-04-10 18:59:11 +0000
committertkellner <tkellner@174cde9d-5d70-4d2a-aa98-46368bc2aaf7>2013-04-10 18:59:11 +0000
commit7b3d85e31537acc7da994aebeece26bbdf2ecc7a (patch)
tree9e3c23a3b558f68fc266ceb537045619c65f2bed /pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/mobilebku/PostSLRequestThread.java
parent6684441798e6fdb899f4e67e39a42ccd40e8a607 (diff)
downloadpdf-over-7b3d85e31537acc7da994aebeece26bbdf2ecc7a.tar.gz
pdf-over-7b3d85e31537acc7da994aebeece26bbdf2ecc7a.tar.bz2
pdf-over-7b3d85e31537acc7da994aebeece26bbdf2ecc7a.zip
+ Fixed unverifyable Handy signature signatures ... (A-Trust cuts away
base64 encoded signature data!) + Moved logfile to {user.home}/.pdfover + temporary pdf files will be saved into {user.home}/.pdfover (no write access in Program folder of windows!) git-svn-id: https://joinup.ec.europa.eu/svn/pdf-over/trunk@67 174cde9d-5d70-4d2a-aa98-46368bc2aaf7
Diffstat (limited to 'pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/mobilebku/PostSLRequestThread.java')
-rw-r--r--pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/mobilebku/PostSLRequestThread.java135
1 files changed, 99 insertions, 36 deletions
diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/mobilebku/PostSLRequestThread.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/mobilebku/PostSLRequestThread.java
index 789fafac..260f49d6 100644
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/mobilebku/PostSLRequestThread.java
+++ b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/mobilebku/PostSLRequestThread.java
@@ -17,6 +17,7 @@ package at.asit.pdfover.gui.workflow.states.mobilebku;
// Imports
import java.io.IOException;
+import java.io.InputStream;
import org.apache.commons.httpclient.Header;
import org.apache.commons.httpclient.HttpClient;
@@ -24,6 +25,11 @@ 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.apache.commons.httpclient.methods.multipart.FilePart;
+import org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity;
+import org.apache.commons.httpclient.methods.multipart.Part;
+import org.apache.commons.httpclient.methods.multipart.PartSource;
+import org.apache.commons.httpclient.methods.multipart.StringPart;
import org.apache.commons.httpclient.protocol.Protocol;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -31,12 +37,47 @@ import org.slf4j.LoggerFactory;
import at.asit.pdfover.gui.workflow.ConfigManipulator;
import at.asit.pdfover.gui.workflow.states.LocalBKUState;
import at.asit.pdfover.gui.workflow.states.MobileBKUState;
+import at.asit.pdfover.signator.DocumentSource;
/**
*
*/
public class PostSLRequestThread implements Runnable {
/**
+ *
+ */
+ private final class FileUploadSource implements PartSource {
+
+ private DocumentSource source;
+
+ /**
+ * Constructor
+ *
+ * @param source
+ * the source
+ */
+ public FileUploadSource(DocumentSource source) {
+ this.source = source;
+ }
+
+ @Override
+ public long getLength() {
+ // TODO Auto-generated method stub
+ return this.source.getLength();
+ }
+
+ @Override
+ public String getFileName() {
+ return "sign.pdf"; //$NON-NLS-1$
+ }
+
+ @Override
+ public InputStream createInputStream() throws IOException {
+ return this.source.getInputStream();
+ }
+ }
+
+ /**
* SLF4J Logger instance
**/
private static final Logger log = LoggerFactory
@@ -45,12 +86,12 @@ public class PostSLRequestThread implements Runnable {
private MobileBKUState state;
private String mobileBKUUrl = ConfigManipulator.MOBILE_BKU_URL_CONFIG;
-
+
/**
* Constructor
*
* @param state
- * @param mobileBKUUrl
+ * @param mobileBKUUrl
*/
public PostSLRequestThread(MobileBKUState state, String mobileBKUUrl) {
this.state = state;
@@ -65,8 +106,14 @@ public class PostSLRequestThread implements Runnable {
@Override
public void run() {
try {
+ /*
+ * String sl_request = this.state.getSigningState()
+ * .getSignatureRequest().getBase64Request();
+ */
String sl_request = this.state.getSigningState()
- .getSignatureRequest().getBase64Request();
+ .getSignatureRequest().getFileUploadRequest();
+
+ log.debug("SL Request: " + sl_request); //$NON-NLS-1$
Protocol.registerProtocol("https", //$NON-NLS-1$
new Protocol("https", new TrustedSocketFactory(), 443)); //$NON-NLS-1$
@@ -74,78 +121,94 @@ public class PostSLRequestThread implements Runnable {
HttpClient client = new HttpClient();
client.getParams().setParameter("http.useragent", //$NON-NLS-1$
LocalBKUState.PDF_OVER_USER_AGENT_STRING);
-
+
String url = this.mobileBKUUrl;
-
+
PostMethod method = new PostMethod(url);
- method.addParameter("XMLRequest", sl_request); //$NON-NLS-1$
-
+ //method.addParameter("XMLRequest", sl_request); //$NON-NLS-1$
+
+ StringPart xmlpart = new StringPart(
+ "XMLRequest", sl_request, "UTF-8"); //$NON-NLS-1$ //$NON-NLS-2$
+
+ FilePart filepart = new FilePart("fileupload", //$NON-NLS-1$
+ new FileUploadSource(this.state.getSigningState()
+ .getSignatureRequest().getSignatureData()));
+
+ Part[] parts = { xmlpart, filepart };
+
+ method.setRequestEntity(new MultipartRequestEntity(parts, method
+ .getParams()));
int returnCode = client.executeMethod(method);
String redirectLocation = null;
GetMethod gmethod = null;
-
+
String responseData = null;
-
- this.state.getStatus().setBaseURL(ATrustHelper.stripQueryString(url));
-
+
+ this.state.getStatus().setBaseURL(
+ ATrustHelper.stripQueryString(url));
+
// Follow redirects
do {
// check return code
- if (returnCode == HttpStatus.SC_MOVED_TEMPORARILY ||
- returnCode == HttpStatus.SC_MOVED_PERMANENTLY) {
+ if (returnCode == HttpStatus.SC_MOVED_TEMPORARILY
+ || returnCode == HttpStatus.SC_MOVED_PERMANENTLY) {
Header locationHeader = method
- .getResponseHeader("location"); //$NON-NLS-1$
+ .getResponseHeader("location"); //$NON-NLS-1$
if (locationHeader != null) {
redirectLocation = locationHeader.getValue();
} else {
throw new IOException(
- "Got HTTP 302 but no location to follow!"); //$NON-NLS-1$
+ "Got HTTP 302 but no location to follow!"); //$NON-NLS-1$
}
- } else if(returnCode == HttpStatus.SC_OK) {
- if(gmethod != null) {
+ } else if (returnCode == HttpStatus.SC_OK) {
+ if (gmethod != null) {
responseData = gmethod.getResponseBodyAsString();
} else {
responseData = method.getResponseBodyAsString();
- }
+ }
redirectLocation = null;
} else {
- throw new HttpException(HttpStatus.getStatusText(returnCode));
+ throw new HttpException(
+ HttpStatus.getStatusText(returnCode));
}
-
- if(redirectLocation != null) {
+
+ if (redirectLocation != null) {
gmethod = new GetMethod(redirectLocation);
gmethod.setFollowRedirects(true);
returnCode = client.executeMethod(gmethod);
}
-
- } while(redirectLocation != null);
+
+ } while (redirectLocation != null);
// Now we have received some data lets check it:
-
+
log.debug("Repsonse from A-Trust: " + responseData); //$NON-NLS-1$
-
+
// Extract infos:
-
- String sessionID = ATrustHelper.extractTag(responseData, "identification.aspx?sid=", "\""); //$NON-NLS-1$ //$NON-NLS-2$
-
- String viewState = ATrustHelper.extractTag(responseData, "id=\"__VIEWSTATE\" value=\"", "\""); //$NON-NLS-1$ //$NON-NLS-2$
-
- String eventValidation = ATrustHelper.extractTag(responseData, "id=\"__EVENTVALIDATION\" value=\"", "\""); //$NON-NLS-1$ //$NON-NLS-2$
-
+
+ String sessionID = ATrustHelper.extractTag(responseData,
+ "identification.aspx?sid=", "\""); //$NON-NLS-1$ //$NON-NLS-2$
+
+ String viewState = ATrustHelper.extractTag(responseData,
+ "id=\"__VIEWSTATE\" value=\"", "\""); //$NON-NLS-1$ //$NON-NLS-2$
+
+ String eventValidation = ATrustHelper.extractTag(responseData,
+ "id=\"__EVENTVALIDATION\" value=\"", "\""); //$NON-NLS-1$ //$NON-NLS-2$
+
log.info("sessionID: " + sessionID); //$NON-NLS-1$
log.info("viewState: " + viewState); //$NON-NLS-1$
log.info("eventValidation: " + eventValidation); //$NON-NLS-1$
-
+
this.state.getStatus().setSessionID(sessionID);
-
+
this.state.getStatus().setViewstate(viewState);
-
+
this.state.getStatus().setEventvalidation(eventValidation);
-
+
/*
* If all went well we can set the communication state to the new
* state