diff options
author | tkellner <tkellner@174cde9d-5d70-4d2a-aa98-46368bc2aaf7> | 2013-04-10 18:59:11 +0000 |
---|---|---|
committer | tkellner <tkellner@174cde9d-5d70-4d2a-aa98-46368bc2aaf7> | 2013-04-10 18:59:11 +0000 |
commit | 7b3d85e31537acc7da994aebeece26bbdf2ecc7a (patch) | |
tree | 9e3c23a3b558f68fc266ceb537045619c65f2bed /pdf-over-gui/src/main/java/at/asit/pdfover/gui/workflow/states/mobilebku/PostSLRequestThread.java | |
parent | 6684441798e6fdb899f4e67e39a42ccd40e8a607 (diff) | |
download | pdf-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.java | 135 |
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 |