From 9c354ddd2ee059786b79e11f3d27304df210488c Mon Sep 17 00:00:00 2001
From: Andreas Abraham <andreas.abraham@egiz.gv.at>
Date: Thu, 17 Jan 2019 11:10:35 +0100
Subject: implementation of handlepolling

---
 .../asit/pdfover/gui/bku/mobile/ATrustHandler.java | 101 ++++++++++++++++++++-
 1 file changed, 98 insertions(+), 3 deletions(-)

(limited to 'pdf-over-gui/src')

diff --git a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/bku/mobile/ATrustHandler.java b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/bku/mobile/ATrustHandler.java
index eaa0327a..a11f8c26 100644
--- a/pdf-over-gui/src/main/java/at/asit/pdfover/gui/bku/mobile/ATrustHandler.java
+++ b/pdf-over-gui/src/main/java/at/asit/pdfover/gui/bku/mobile/ATrustHandler.java
@@ -17,14 +17,20 @@ package at.asit.pdfover.gui.bku.mobile;
 
 // Imports
 import java.awt.Desktop;
+import java.io.BufferedInputStream;
 import java.io.IOException;
 import java.io.InputStream;
+import java.net.MalformedURLException;
 import java.net.URI;
+import java.net.URL;
+import java.net.URLConnection;
 
 import org.apache.commons.httpclient.HttpClient;
 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.util.HttpURLConnection;
+import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang3.StringEscapeUtils;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.program.Program;
@@ -33,6 +39,10 @@ import org.eclipse.swt.widgets.Shell;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
+
 import at.asit.pdfover.gui.controls.Dialog;
 import at.asit.pdfover.gui.controls.Dialog.BUTTONS;
 import at.asit.pdfover.gui.controls.Dialog.ICON;
@@ -245,10 +255,15 @@ public class ATrustHandler extends MobileBKUHandler {
 		} else if (responseData.contains("sl:InfoboxReadResponse")) { //$NON-NLS-1$
 			// credentials ok! InfoboxReadResponse
 			log.debug("Credentials accepted - Response given"); //$NON-NLS-1$
-			getSigningState().setSignatureResponse(
-					new SLResponse(responseData, getStatus().getServer(), null, null));
+			getSigningState().setSignatureResponse(new SLResponse(responseData, getStatus().getServer(), null, null));
 			return;
-		} else {
+		} else if (responseData.contains("page_undecided")) { //$NON-NLS-1$
+			// skip intermediate page 
+			log.debug("Page Undecided"); //$NON-NLS-1$
+			getSigningState().setSignatureResponse(new SLResponse(responseData, getStatus().getServer(), null, null));
+			status.setErrorMessage("waiting..."); //$NON-NLS-1$
+			return; 
+		}else {
 			// error page
 			// extract error text!
 			try {
@@ -439,4 +454,84 @@ public class ATrustHandler extends MobileBKUHandler {
 	public boolean useBase64Request() {
 		return this.useBase64;
 	}
+	
+	
+	/* (non-Javadoc)
+	 * 
+	 */
+	@Override
+	public void handlePolling(String responseData) {
+		
+		ATrustStatus status = getStatus();
+		URLConnection urlconnection = null;
+		String isReady = null; 
+		Status serverStatus = null; 
+		int waits = 0; 
+	    final String ERROR = "Error: Server is not responding";  //$NON-NLS-1$
+
+		try {
+			do {
+				urlconnection = new URL(status.getBaseURL() + "/UndecidedPolling.aspx?sid=" + status.getSessionID()) //$NON-NLS-1$
+						.openConnection();
+				InputStream in = new BufferedInputStream(urlconnection.getInputStream());
+
+				isReady = IOUtils.toString(in, "utf-8"); //$NON-NLS-1$
+				serverStatus = new Status(isReady);
+				if (serverStatus.isWait()) waits++;
+				if (waits > 4) {
+					status.setErrorMessage(ERROR); 
+					log.error(ERROR); 
+					throw new Exception(ERROR); 
+				}
+				
+			} while (serverStatus.isWait());
+
+			if (serverStatus.isFin()) {
+				String response = getSignaturePage();
+				handleCredentialsResponse(response);
+			}
+			else {
+				status.setErrorMessage("Server reponded ERROR during polling"); //$NON-NLS-1$
+				log.error("Server reponded ERROR during polling");  //$NON-NLS-1$
+				return;
+			}
+
+
+		} catch (Exception e) {
+			log.error("handle polling failed" + e.getMessage()); //$NON-NLS-1$
+		}
+
+	}
+	
+	private class Status {
+		private final boolean fin; 
+		private final boolean error; 
+		private final boolean wait; 
+		
+		public Status(String status) {
+			 JsonElement jelement = new JsonParser().parse(status.toLowerCase());
+			 JsonObject  jobject = jelement.getAsJsonObject();
+			 this.fin = jobject.get("fin").getAsBoolean(); //$NON-NLS-1$ 
+			 this.error = jobject.get("error").getAsBoolean(); //$NON-NLS-1$ 
+			 this.wait = jobject.get("wait").getAsBoolean(); //$NON-NLS-1$ 
+		}
+
+		public boolean isFin() {
+			return fin;
+		}
+
+		public boolean isError() {
+			return error;
+		}
+
+		public boolean isWait() {
+			return wait;
+		}
+		
+		
+		
+	}
+	
 }
+
+
-- 
cgit v1.2.3