package at.gv.egovernment.moa.id.auth.modules.internal.tasks; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Component; import at.gv.egiz.eaaf.core.api.idp.process.ExecutionContext; import at.gv.egiz.eaaf.core.exceptions.TaskExecutionException; import at.gv.egiz.eaaf.core.impl.idp.auth.modules.AbstractAuthServletTask; import at.gv.egovernment.moa.id.auth.AuthenticationServer; import at.gv.egovernment.moa.id.commons.api.exceptions.MOAIDException; import at.gv.egovernment.moa.logging.Logger; /** * Evaluates the {@code CreateXMLSignatureResponse}, extracts signature and certificate and asks the SZR Gateway for an identity link.

* In detail: *

* Expects: * * Result: * * Code taken from {@link at.gv.egovernment.moa.id.auth.servlet.GetForeignIDServlet}. * @see #execute(ExecutionContext, HttpServletRequest, HttpServletResponse) * */ @Component("GetForeignIDTask") public class GetForeignIDTask extends AbstractAuthServletTask { @Autowired @Qualifier("CitizenCardAuthenticationServer") private AuthenticationServer authServer; @Override public void execute(ExecutionContext executionContext, HttpServletRequest req, HttpServletResponse resp) throws TaskExecutionException { try { throw new MOAIDException("auth.36", new Object[]{"Foreign authentication IS ONLY supported by using eIDAS"}); // Logger.debug("POST GetForeignIDServlet"); // // Map parameters; // // // parameters = getParameters(req); // // } catch (FileUploadException | IOException e) { // Logger.error("Parsing mulitpart/form-data request parameters failed: " + e.getMessage()); // throw new TaskExecutionException(pendingReq, "Parsing mulitpart/form-data request parameters failed", new IOException(e.getMessage())); // } // // try { // //check if response exists // String xmlCreateXMLSignatureResponse = (String) parameters.get(PARAM_XMLRESPONSE); // if (!ParamValidatorUtils.isValidXMLDocument(xmlCreateXMLSignatureResponse)) { // throw new WrongParametersException("GetForeignID", PARAM_XMLRESPONSE, "auth.12"); // // } // Logger.debug(xmlCreateXMLSignatureResponse); // // //execute default task initialization // AuthenticationSessionWrapper moasession = new AuthenticationSessionWrapper(pendingReq.genericFullDataStorage()); // // CreateXMLSignatureResponse csresp = new CreateXMLSignatureResponseParser(xmlCreateXMLSignatureResponse) // .parseResponseDsig(); // // try { // String serializedAssertion = DOMUtils.serializeNode(csresp.getDsigSignature()); // moasession.setAuthBlock(serializedAssertion); // // } catch (TransformerException e) { // throw new ParseException("parser.04", new Object[] { REQ_VERIFY_AUTH_BLOCK, PARAM_XMLRESPONSE }); // // } catch (IOException e) { // throw new ParseException("parser.04", new Object[] { REQ_VERIFY_AUTH_BLOCK, PARAM_XMLRESPONSE }); // // } // // Element signature = csresp.getDsigSignature(); // // try { // moasession.setSignerCertificate(AuthenticationServer.getCertificateFromXML(signature)); // // } catch (CertificateException e) { // Logger.error("Could not extract certificate from CreateXMLSignatureResponse"); // throw new MOAIDException("auth.14", null); // } // // revisionsLogger.logEvent(pendingReq, MOAIDEventConstants.AUTHPROCESS_FOREIGN_SZRGW_CONNECTED); // // // make SZR request to the identity link // CreateIdentityLinkResponse response = SZRGWClientUtils.getIdentityLink(pendingReq, signature); // // if (null != response.getErrorResponse()) { // // TODO fix exception parameter // throw new SZRGWClientException("service.08", (String) response.getErrorResponse().getErrorCode(), // (String) response.getErrorResponse().getInfo()); // } else { // IdentityLinkAssertionParser ilParser = new IdentityLinkAssertionParser(new ByteArrayInputStream( // response.getIdentityLink())); // IIdentityLink identitylink = ilParser.parseIdentityLink(); // moasession.setIdentityLink(identitylink); // // // set QAA Level four in case of card authentifcation // moasession.setQAALevel(PVPConstants.EIDAS_QAA_HIGH); // // authServer.getForeignAuthenticationData(moasession); // // revisionsLogger.logEvent(pendingReq, MOAIDEventConstants.AUTHPROCESS_FOREIGN_SZRGW_RECEIVED); // // //store pending request // pendingReq.setGenericDataToSession(moasession.getKeyValueRepresentationFromAuthSession()); // requestStoreage.storePendingRequest(pendingReq); // // // } } catch (MOAIDException ex) { throw new TaskExecutionException(pendingReq, ex.getMessage(), ex); } catch (Exception e) { Logger.error("GetForeignIDServlet has an interal Error.", e); throw new TaskExecutionException(pendingReq, e.getMessage(), e); } } }