From dccc8304cbe2b10ddb703fa52895dbc09dd70643 Mon Sep 17 00:00:00 2001 From: Alexander Marsalek Date: Thu, 5 Jun 2014 19:39:27 +0200 Subject: DTL support added (incoming) --- DocumentService/pom.xml | 9 +++ .../stork/documentservice/DocumentServiceImpl.java | 2 +- .../eu/stork/documentservice/utils/Bootstrap.java | 31 +++++++++ .../documentservice/utils/GetDSSFileAction.java | 15 ++++- id/ConfigWebTool/pom.xml | 2 +- .../VerifyXMLSignatureResponseValidator.java | 4 +- .../SignedDocAttributeRequestProvider.java | 73 +++++++++++++++------- 7 files changed, 105 insertions(+), 31 deletions(-) create mode 100644 DocumentService/src/eu/stork/documentservice/utils/Bootstrap.java diff --git a/DocumentService/pom.xml b/DocumentService/pom.xml index c93a901ca..be2252137 100644 --- a/DocumentService/pom.xml +++ b/DocumentService/pom.xml @@ -69,6 +69,15 @@ 2.2.8 provided + + xml-apis + xml-apis + 1.4.01 + + + + + javax.xml jaxrpc-api diff --git a/DocumentService/src/eu/stork/documentservice/DocumentServiceImpl.java b/DocumentService/src/eu/stork/documentservice/DocumentServiceImpl.java index 74519dfee..913c2f704 100644 --- a/DocumentService/src/eu/stork/documentservice/DocumentServiceImpl.java +++ b/DocumentService/src/eu/stork/documentservice/DocumentServiceImpl.java @@ -29,7 +29,7 @@ public class DocumentServiceImpl implements DocumentService private DatabaseConnector conn; private Properties props = new Properties(); private static final Logger LOG = Logger.getLogger(DocumentServiceImpl.class.getName()); - + @Override public String addDocument(byte[] document, String xmlRequest, String destinationCountry, String SpId, String mimeType, String receiverCert) { String returnMessage = ""; diff --git a/DocumentService/src/eu/stork/documentservice/utils/Bootstrap.java b/DocumentService/src/eu/stork/documentservice/utils/Bootstrap.java new file mode 100644 index 000000000..72da74e52 --- /dev/null +++ b/DocumentService/src/eu/stork/documentservice/utils/Bootstrap.java @@ -0,0 +1,31 @@ +package eu.stork.documentservice.utils; + +import org.opensaml.DefaultBootstrap; +import org.opensaml.xml.ConfigurationException; + +public class Bootstrap extends DefaultBootstrap { + + static boolean initializied = false; + public static synchronized void bootstrap() throws ConfigurationException { + + if(!initializied) + { + initializeXMLSecurity(); + + initializeXMLTooling(); + +// initializeArtifactBuilderFactories(); +// +// initializeGlobalSecurityConfiguration(); +// +// initializeParserPool(); +// +// initializeESAPI(); + } + else + { + System.out.println("Skipping initialization..."); + } + } + +} diff --git a/DocumentService/src/eu/stork/documentservice/utils/GetDSSFileAction.java b/DocumentService/src/eu/stork/documentservice/utils/GetDSSFileAction.java index b80c63dc2..2fce0165d 100644 --- a/DocumentService/src/eu/stork/documentservice/utils/GetDSSFileAction.java +++ b/DocumentService/src/eu/stork/documentservice/utils/GetDSSFileAction.java @@ -16,6 +16,7 @@ package eu.stork.documentservice.utils; import org.apache.log4j.Logger; import org.bouncycastle.util.encoders.UrlBase64; +import org.opensaml.xml.ConfigurationException; import eu.stork.peps.auth.commons.IPersonalAttributeList; import eu.stork.peps.auth.commons.PEPSUtil; @@ -59,8 +60,10 @@ public final class GetDSSFileAction { final PersonalAttribute sdoc = pal.get("docRequest"); if (sdoc != null) { - String docId = sdoc.getValue().get(0); - return docId; + String docId = sdoc.getValue().get(0);//remove countries from beginning + docId = docId.substring(docId.indexOf("/")+1); + docId = docId.substring(docId.indexOf('/')+1); + return docId.replace("/", ""); } } catch (final STORKSAMLEngineException e) { e.printStackTrace(); @@ -73,7 +76,13 @@ public final class GetDSSFileAction { // fetch the samlToken from the request final byte[] samlToken = UrlBase64.decode(samlRequest); - + //System.out.println("SAML Engine DokumentService init"); + try { + Bootstrap.bootstrap(); + } catch (ConfigurationException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } final STORKSAMLEngine engine = STORKSAMLEngine.getInstance(SAML_INSTANCE); final STORKAttrQueryRequest attrData= engine.validateSTORKAttrQueryRequest(samlToken); diff --git a/id/ConfigWebTool/pom.xml b/id/ConfigWebTool/pom.xml index 01359e38a..9b3ef3862 100644 --- a/id/ConfigWebTool/pom.xml +++ b/id/ConfigWebTool/pom.xml @@ -10,7 +10,6 @@ MOA.id moa-id-configuration ${configtool-version} - war MOA-ID 2.0 Configuration Tool Web based Configuration Tool for MOA-ID 2.x @@ -187,4 +186,5 @@ + war diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/validator/VerifyXMLSignatureResponseValidator.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/validator/VerifyXMLSignatureResponseValidator.java index 4fd7fa965..00089735f 100644 --- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/validator/VerifyXMLSignatureResponseValidator.java +++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/validator/VerifyXMLSignatureResponseValidator.java @@ -130,8 +130,8 @@ public class VerifyXMLSignatureResponseValidator { // TEST CARDS if (whatToCheck.equals(CHECK_IDENTITY_LINK)) throw new ValidateException("validator.07", new Object[] { checkFailedReason } ); - else - throw new ValidateException("validator.19", new Object[] { checkFailedReason } ); +// else +// throw new ValidateException("validator.19", new Object[] { checkFailedReason } ); } //check QC diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/attributeproviders/SignedDocAttributeRequestProvider.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/attributeproviders/SignedDocAttributeRequestProvider.java index 3256e1812..42ef11758 100644 --- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/attributeproviders/SignedDocAttributeRequestProvider.java +++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/attributeproviders/SignedDocAttributeRequestProvider.java @@ -29,6 +29,7 @@ import org.apache.commons.lang.NotImplementedException; import org.apache.velocity.Template; import org.apache.velocity.VelocityContext; import org.apache.velocity.app.VelocityEngine; +import org.bouncycastle.util.encoders.UrlBase64; import at.gv.egovernment.moa.id.auth.exception.MOAIDException; import at.gv.egovernment.moa.id.config.auth.OAAuthParameter; @@ -41,8 +42,10 @@ import eu.stork.oasisdss.api.ApiUtils; import eu.stork.oasisdss.api.LightweightSourceResolver; import eu.stork.oasisdss.api.exceptions.ApiUtilsException; import eu.stork.oasisdss.api.exceptions.UtilsException; +import eu.stork.oasisdss.profile.AnyType; import eu.stork.oasisdss.profile.Base64Data; import eu.stork.oasisdss.profile.DocumentType; +import eu.stork.oasisdss.profile.DocumentWithSignature; import eu.stork.oasisdss.profile.IncludeObject; import eu.stork.oasisdss.profile.SignRequest; import eu.stork.oasisdss.profile.SignResponse; @@ -112,9 +115,6 @@ public class SignedDocAttributeRequestProvider extends AttributeProvider { try { String signResponseString = new String(Base64.decodeBase64(httpReq.getParameter("signresponse")), "UTF8"); - //TODO - //FIXME - //test123 //create SignResponse object Source response = new StreamSource(new java.io.StringReader(signResponseString)); SignResponse signResponse = ApiUtils.unmarshal(response, SignResponse.class); @@ -133,21 +133,38 @@ public class SignedDocAttributeRequestProvider extends AttributeProvider { if (dssId != null && data!=null) { if(updateDocumentInDtl(data, docId, signResponseString)) - { -// SignResponse outRes = new SignResponse(); -// outRes.setDocUI(signResponse.getDocUI()); -// outRes.setProfile(signResponse.getProfile()); -// outRes.setRequestID(signResponse.getRequestID()); -// outRes.setSignatureObject(signResponse.getSignatureObject()); - //outRes; - - signResponse.getResult().setResultMinor(dtlUrl); - System.out.println("overwriting:"+signResponse.getResult().getResultMessage()+" with DTL url:"+dtlUrl); + { + // set the url in the SignResponse + DocumentWithSignature documentWithSignature = new DocumentWithSignature(); + DocumentType value = new DocumentType(); + value.setDocumentURL(dtlUrl); + documentWithSignature.setDocument(value); + if(signResponse.getOptionalOutputs()!=null) + { + //signResponse.getOptionalOutputs().getAny().add(documentWithSignature); + for(Object o :signResponse.getOptionalOutputs().getAny()) + { + if(o instanceof DocumentWithSignature) + { + signResponse.getOptionalOutputs().getAny().remove(o); + signResponse.getOptionalOutputs().getAny().add(documentWithSignature); + break; + } + } + } + else + { + AnyType anytype = new AnyType(); + anytype.getAny().add(documentWithSignature); + signResponse.setOptionalOutputs(anytype ); + } + +// System.out.println("overwriting:"+signResponse.getResult().getResultMessage()+" with DTL url:"+dtlUrl); InputStream istr = ApiUtils.marshalToInputStream(signResponse); StringWriter writer = new StringWriter(); IOUtils.copy(istr, writer, "UTF-8"); signResponseString = writer.toString(); - System.out.println("SignResponse overwritten:"+signResponseString); + Logger.info("SignResponse overwritten:"+signResponseString); } } else @@ -207,19 +224,30 @@ public class SignedDocAttributeRequestProvider extends AttributeProvider { Source signDoc = new StreamSource(new java.io.StringReader(signRequestString)); SignRequest signRequest = ApiUtils.unmarshal(signDoc, SignRequest.class); try{ - //TODO - //FIXME //search for DTL link String dtlURL = getDtlUrlFromRequest(signRequest); String docId = signRequest.getDocUI(); String docRequest = getDocTransferRequest(docId, dtlURL);//dtlUrl + //Start - code to be removed +// System.out.println("SAML Engine vidp init"); +// final STORKSAMLEngine engine = STORKSAMLEngine.getInstance("VIDP"); +// final byte[] samlToken = UrlBase64.decode(docRequest); +// final STORKAttrQueryRequest request= engine.validateSTORKAttrQueryRequest(samlToken); +// final IPersonalAttributeList pal = request.getPersonalAttributeList(); +// final PersonalAttribute sdoc = pal.get("docRequest"); +// if (sdoc != null) +// { +// String docId1 = sdoc.getValue().get(0); +// System.out.println("docId1:"+docId1); +// } + //End - code to be removed byte[] data = getDocumentFromDtl(docRequest, dtlURL);//dtlUrl //load doc from DTL - System.out.println("data:"+data); + Logger.debug("data:"+data); String mime = getDocumentMimeFromDtl(docId, dtlURL);//dtlUrl - System.out.println("mime:"+mime); + Logger.debug("mime:"+mime); //add doc as base64* to signrequest => post doc to oasis try{ List includeObjects = ApiUtils.findNamedElement( @@ -239,13 +267,11 @@ public class SignedDocAttributeRequestProvider extends AttributeProvider { StringWriter writer = new StringWriter(); IOUtils.copy(istr, writer, "UTF-8"); signRequestString = writer.toString(); - System.out.println("Signrequest overwritten"); + Logger.info("Signrequest overwritten"); } catch (Exception e) { e.printStackTrace(); throw new Exception("Could not marshall sign request", e); - } - - + } }catch(Exception e) { Logger.info("No documentservice used?"); @@ -266,7 +292,6 @@ public class SignedDocAttributeRequestProvider extends AttributeProvider { } } - /* (non-Javadoc) * @see at.gv.egovernment.moa.id.protocols.stork2.AttributeProvider#getSupportedAttributeNames() @@ -359,7 +384,7 @@ public class SignedDocAttributeRequestProvider extends AttributeProvider { */ private String getDocTransferRequest(String docId, String destinationUrl) throws Exception { - final STORKSAMLEngine engine = STORKSAMLEngine.getInstance("VIDP");//getInstance(samlDTLInstance); + final STORKSAMLEngine engine = STORKSAMLEngine.getInstance("VIDP"); STORKAttrQueryRequest req = new STORKAttrQueryRequest(); req.setAssertionConsumerServiceURL(dtlUrl); req.setDestination(destinationUrl); -- cgit v1.2.3