summaryrefslogtreecommitdiff
path: root/BKUApplet/src/main/java/at
diff options
context:
space:
mode:
Diffstat (limited to 'BKUApplet/src/main/java/at')
-rw-r--r--BKUApplet/src/main/java/at/gv/egiz/bku/online/applet/AppletBKUWorker.java204
-rw-r--r--BKUApplet/src/main/java/at/gv/egiz/bku/online/applet/BKUApplet.java2
2 files changed, 119 insertions, 87 deletions
diff --git a/BKUApplet/src/main/java/at/gv/egiz/bku/online/applet/AppletBKUWorker.java b/BKUApplet/src/main/java/at/gv/egiz/bku/online/applet/AppletBKUWorker.java
index 3903bf10..3b6d007a 100644
--- a/BKUApplet/src/main/java/at/gv/egiz/bku/online/applet/AppletBKUWorker.java
+++ b/BKUApplet/src/main/java/at/gv/egiz/bku/online/applet/AppletBKUWorker.java
@@ -23,13 +23,14 @@ import at.gv.egiz.stal.STALResponse;
import at.gv.egiz.stal.SignRequest;
import at.gv.egiz.stal.service.STALPortType;
import at.gv.egiz.stal.service.STALService;
+import at.gv.egiz.stal.service.translator.STALTranslator;
+import at.gv.egiz.stal.service.translator.TranslationException;
import at.gv.egiz.stal.service.types.ErrorResponseType;
import at.gv.egiz.stal.service.types.GetNextRequestResponseType;
import at.gv.egiz.stal.service.types.GetNextRequestType;
import at.gv.egiz.stal.service.types.ObjectFactory;
import at.gv.egiz.stal.service.types.RequestType;
import at.gv.egiz.stal.service.types.ResponseType;
-import at.gv.egiz.stal.util.STALTranslator;
import java.applet.AppletContext;
import java.net.MalformedURLException;
import java.net.URL;
@@ -37,6 +38,7 @@ import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.JAXBElement;
import javax.xml.namespace.QName;
+import javax.xml.ws.WebServiceException;
/**
*
@@ -49,6 +51,7 @@ public class AppletBKUWorker extends AbstractBKUWorker implements Runnable {
protected String sessionId;
protected STALPortType stalPort;
private ObjectFactory stalObjFactory = new ObjectFactory();
+ private STALTranslator translator = new STALTranslator();
public AppletBKUWorker(BKUGUIFacade gui, AppletContext ctx,
AppletParameterProvider paramProvider) {
@@ -72,108 +75,147 @@ public class AppletBKUWorker extends AbstractBKUWorker implements Runnable {
@Override
public void run() {
gui.showWelcomeDialog();
+
try {
stalPort = getSTALPort();
- } catch (Exception e) {
- log.fatal("Failed to get STAL web-service port: " + e.getMessage(), e);
- actionCommandList.clear();
- actionCommandList.add("ok");
- gui.showErrorDialog(BKUGUIFacade.ERR_SERVICE_UNREACHABLE,
- new Object[]{e.getMessage()});
- try {
- waitForAction();
- } catch (InterruptedException e1) {
- log.error(e1);
- }
- return;
- }
- try {
- registerSignRequestHandler();
+ registerSignRequestHandler(stalPort, sessionId);
GetNextRequestResponseType nextRequestResp = stalPort.connect(sessionId);
+
do {
- List<JAXBElement<? extends RequestType>> requests = nextRequestResp.getInfoboxReadRequestOrSignRequestOrQuitRequest();
+ List<JAXBElement<? extends RequestType>> requests;
+ List<JAXBElement<? extends ResponseType>> responses = new ArrayList<JAXBElement<? extends ResponseType>>();
- // (rather use validator)
- if (requests.size() == 0) {
- log.error("Received empty NextRequestResponse: no STAL requests to handle. (STAL-X requests might not have gotten unmarshalled)");
- throw new Exception("No STAL requests to handle.");
- }
+ try {
+ requests = nextRequestResp.getInfoboxReadRequestOrSignRequestOrQuitRequest();
+ responses.clear();
- List<STALRequest> stalRequests = STALTranslator.translateRequests(requests);
+ // (rather use validator)
+ if (requests.size() == 0) {
+ log.error("Received empty NextRequestResponse: no STAL requests to handle. (STAL-X requests might not have gotten unmarshalled)");
+ throw new RuntimeException("No STAL requests to handle.");
+ }
- if (log.isInfoEnabled()) {
- StringBuilder sb = new StringBuilder("Received ");
- sb.append(stalRequests.size());
- sb.append(" STAL requests: ");
- for (STALRequest r : stalRequests) {
- sb.append(r.getClass());
- sb.append(' ');
+ if (log.isInfoEnabled()) {
+ StringBuilder sb = new StringBuilder("Received ");
+ sb.append(requests.size());
+ sb.append(" requests: ");
+ for (JAXBElement<? extends RequestType> r : requests) {
+ sb.append(r.getValue().getClass());
+ sb.append(' ');
+ }
+ log.info(sb.toString());
}
- log.info(sb.toString());
- }
- boolean handle = true;
- for (STALRequest request : stalRequests) {
- if (request instanceof at.gv.egiz.stal.InfoboxReadRequest) {
- at.gv.egiz.stal.InfoboxReadRequest r = (at.gv.egiz.stal.InfoboxReadRequest) request;
- String infoboxId = r.getInfoboxIdentifier();
- String domainId = r.getDomainIdentifier();
- if ("IdentityLink".equals(infoboxId) && domainId == null) {
- if (!InternalSSLSocketFactory.getInstance().isEgovAgency()) {
- handle = false;
- }
+ List<STALRequest> stalRequests = new ArrayList<STALRequest>();
+ for (JAXBElement<? extends RequestType> req : requests) {
+ try {
+ stalRequests.add(translator.translate(req));
+ } catch (TranslationException ex) {
+ log.error("Received unknown request from server STAL: " + ex.getMessage());
+ throw new RuntimeException(ex);
}
}
- }
- List<JAXBElement<? extends ResponseType>> responses;
- if (handle) {
+ checkPermission(stalRequests);
+
List<STALResponse> stalResponses = handleRequest(stalRequests);
- if (log.isInfoEnabled()) {
- StringBuilder sb = new StringBuilder(stalResponses.size());
- sb.append(" STAL responses: ");
- for (STALResponse r : stalResponses) {
- sb.append(r.getClass());
- sb.append(' ');
+ for (STALResponse stalResponse : stalResponses) {
+ try {
+ responses.add(translator.translate(stalResponse));
+ } catch (TranslationException ex) {
+ log.error("Received unknown response from STAL: " + ex.getMessage());
+ throw new RuntimeException(ex);
}
- log.info(sb.toString());
}
- responses = STALTranslator.fromSTAL(stalResponses);
- } else {
- log.error("Insufficient rights to execute command InfoboxReadRequest for Infobox IdentityLink, return Error 6002");
- responses = new ArrayList<JAXBElement<? extends ResponseType>>(1);
+
+ } catch (RuntimeException ex) {
+ // return ErrorResponse to server, which displays error page
+ log.error(ex.getMessage());
+ Throwable cause = ex.getCause();
ErrorResponseType err = stalObjFactory.createErrorResponseType();
- err.setErrorCode(6002);
- // err.setErrorMessage();
+ if (cause != null) {
+ log.error("caused by: " + cause.getMessage());
+ if (cause instanceof SecurityException) {
+ err.setErrorCode(6002);
+ } else {
+ err.setErrorCode(4000);
+ }
+ } else {
+ err.setErrorCode(4000);
+ }
+ responses.clear();
responses.add(stalObjFactory.createGetNextRequestTypeErrorResponse(err));
- }
- if (!finished) {
- log.info("Not finished yet (BKUWorker: " + this + "), sending responses");
- GetNextRequestType nextRequest = stalObjFactory.createGetNextRequestType();
- nextRequest.setSessionId(sessionId);
- nextRequest.getInfoboxReadResponseOrSignResponseOrErrorResponse().addAll(responses);
- nextRequestResp = stalPort.getNextRequest(nextRequest);
+ } finally {
+ if (!finished) {
+ if (log.isInfoEnabled()) {
+ StringBuilder sb = new StringBuilder("Sending ");
+ sb.append(responses.size());
+ sb.append(" responses: ");
+ for (JAXBElement<? extends ResponseType> r : responses) {
+ sb.append(r.getValue().getClass());
+ sb.append(' ');
+ }
+ log.info(sb.toString());
+ }
+ GetNextRequestType nextRequest = stalObjFactory.createGetNextRequestType();
+ nextRequest.setSessionId(sessionId);
+ nextRequest.getInfoboxReadResponseOrSignResponseOrErrorResponse().addAll(responses);
+ nextRequestResp = stalPort.getNextRequest(nextRequest);
+ }
}
+
+
} while (!finished);
log.info("Done " + Thread.currentThread().getName());
+
+ } catch (WebServiceException ex) {
+ log.fatal("communication error with server STAL: " + ex.getMessage(), ex);
+ showErrorDialog(BKUGUIFacade.ERR_SERVICE_UNREACHABLE, ex);
+ } catch (MalformedURLException ex) {
+ log.fatal(ex.getMessage(), ex);
+ showErrorDialog(BKUGUIFacade.ERR_CONFIG, ex);
} catch (Exception ex) {
log.error(ex.getMessage(), ex);
- gui.showErrorDialog(BKUGUIFacade.ERR_UNKNOWN, new Object[]{ex.getMessage()});
- try {
- waitForAction();
- } catch (InterruptedException e) {
- log.error(e);
- }
+ showErrorDialog(BKUGUIFacade.ERR_UNKNOWN, ex);
+ } finally {
if (signatureCard != null) {
signatureCard.disconnect(false);
}
}
+
sendRedirect();
}
+ private void checkPermission(List<STALRequest> stalRequests) {
+ for (STALRequest request : stalRequests) {
+ if (request instanceof at.gv.egiz.stal.InfoboxReadRequest) {
+ at.gv.egiz.stal.InfoboxReadRequest r = (at.gv.egiz.stal.InfoboxReadRequest) request;
+ String infoboxId = r.getInfoboxIdentifier();
+ String domainId = r.getDomainIdentifier();
+ if ("IdentityLink".equals(infoboxId) && domainId == null) {
+ if (!InternalSSLSocketFactory.getInstance().isEgovAgency()) {
+ throw new RuntimeException(new SecurityException("Insufficient rights to execute command InfoboxReadRequest for Infobox IdentityLink"));
+ }
+ }
+ }
+ }
+ }
+
+ private void showErrorDialog(String err_code, Exception ex) {
+ actionCommandList.clear();
+ actionCommandList.add("ok");
+ gui.showErrorDialog(err_code,
+ new Object[]{ex.getMessage()}, this, "ok");
+ try {
+ waitForAction();
+ } catch (InterruptedException e) {
+ log.error(e);
+ }
+ }
+
protected void sendRedirect() {
try {
URL redirectURL = params.getURLParameter(BKUApplet.REDIRECT_URL,
@@ -201,20 +243,10 @@ public class AppletBKUWorker extends AbstractBKUWorker implements Runnable {
return stal.getSTALPort();
}
- private void registerSignRequestHandler() throws MalformedURLException {
- String hashDataDisplayStyle = params.getAppletParameter(BKUApplet.HASHDATA_DISPLAY);
- if (BKUApplet.HASHDATA_DISPLAY_BROWSER.equals(hashDataDisplayStyle)) {
- URL hashDataURL = params.getURLParameter(BKUApplet.HASHDATA_URL,
- sessionId);
- log.debug("register SignRequestHandler for HashDataURL " + hashDataURL);
- addRequestHandler(SignRequest.class, new BrowserHashDataDisplay(ctx,
- hashDataURL));
- } else {
- // BKUApplet.HASHDATA_DISPLAY_FRAME
- log.debug("register SignRequestHandler for STAL port " + BKUApplet.WSDL_URL);
- AppletHashDataDisplay handler = new AppletHashDataDisplay(stalPort,
- sessionId);
- addRequestHandler(SignRequest.class, handler);
- }
+ private void registerSignRequestHandler(STALPortType stalPort, String sessionId) {
+ log.debug("register SignRequestHandler (resolve hashdata via STAL Webservice)");
+ AppletHashDataDisplay handler = new AppletHashDataDisplay(stalPort,
+ sessionId);
+ addRequestHandler(SignRequest.class, handler);
}
}
diff --git a/BKUApplet/src/main/java/at/gv/egiz/bku/online/applet/BKUApplet.java b/BKUApplet/src/main/java/at/gv/egiz/bku/online/applet/BKUApplet.java
index d0f6d489..41dae3ba 100644
--- a/BKUApplet/src/main/java/at/gv/egiz/bku/online/applet/BKUApplet.java
+++ b/BKUApplet/src/main/java/at/gv/egiz/bku/online/applet/BKUApplet.java
@@ -53,7 +53,7 @@ public class BKUApplet extends JApplet implements AppletParameterProvider {
public static final String REDIRECT_URL = "RedirectURL";
public static final String REDIRECT_TARGET = "RedirectTarget";
// public static final String HASHDATA_DISPLAY_INTERNAL = "internal";
- public static final String HASHDATA_DISPLAY_BROWSER = "browser";
+// public static final String HASHDATA_DISPLAY_BROWSER = "browser";
public static final String HASHDATA_DISPLAY_FRAME = "frame";
/**