diff options
Diffstat (limited to 'id/server/idserverlib')
| -rw-r--r-- | id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/attributeproviders/SignedDocAttributeRequestProvider.java | 202 | 
1 files changed, 108 insertions, 94 deletions
| 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 06cb99da0..124b91e8b 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 @@ -64,6 +64,7 @@ import at.gv.egovernment.moa.id.util.VelocityProvider;  import at.gv.egovernment.moa.logging.Logger;  import eu.stork.oasisdss.api.ApiUtils;  import eu.stork.oasisdss.api.LightweightSourceResolver; +import eu.stork.oasisdss.api.ResultMajor;  import eu.stork.oasisdss.api.exceptions.ApiUtilsException;  import eu.stork.oasisdss.api.exceptions.UtilsException;  import eu.stork.oasisdss.profile.AnyType; @@ -166,114 +167,127 @@ public class SignedDocAttributeRequestProvider extends AttributeProvider {  			//create SignResponse object  			Source response = new StreamSource(new java.io.StringReader(signResponseString));  			SignResponse signResponse = ApiUtils.unmarshal(response, SignResponse.class); -			//extract doc from signresponse -			DataSource dataSource = LightweightSourceResolver.getDataSource(signResponse); -						 -			ByteArrayOutputStream baos = new ByteArrayOutputStream(); -			IOUtils.copy(dataSource.getInputStream(), baos); -			byte[] data = baos.toByteArray(); +			//Check if Signing was successfully or not -			//update doc in DTL -			String docId, dssId = "";	 -			docId = signResponse.getDocUI(); -			//For reference dssId equals docId -			dssId = docId; -			if (dssId != null && data!=null) +			if(!signResponse.getResult().getResultMajor().equals(ResultMajor.RESULT_MAJOR_SUCCESS))  			{ -				boolean success = false; -				try{ -					success = updateDocumentInDtl(data, docId, signResponseString); -				}catch(Exception e){//No document service used? -					Logger.info("No document service used?"); -					e.printStackTrace(); -					success = false; -				} -					if(success) -					{					 -						// 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()) +				//Pass unmodifed or unmarshal & marshal?? +				InputStream istr = ApiUtils.marshalToInputStream(signResponse); +				StringWriter writer = new StringWriter(); +				IOUtils.copy(istr, writer, "UTF-8"); +				signResponseString = writer.toString(); +				Logger.info("SignResponse with error (unmodified):"+signResponseString); +			} +			else +			{ +				//extract doc from signresponse +				DataSource dataSource = LightweightSourceResolver.getDataSource(signResponse); +							 +				ByteArrayOutputStream baos = new ByteArrayOutputStream(); +				IOUtils.copy(dataSource.getInputStream(), baos); +				byte[] data = baos.toByteArray(); +				 +				//update doc in DTL +				String docId, dssId = "";	 +				docId = signResponse.getDocUI(); +				//For reference dssId equals docId +				dssId = docId; +				if (dssId != null && data!=null) +				{ +					boolean success = false; +					try{ +						success = updateDocumentInDtl(data, docId, signResponseString); +					}catch(Exception e){//No document service used? +						Logger.info("No document service used?"); +						e.printStackTrace(); +						success = false; +					} +						if(success) +						{					 +							// set the url in the SignResponse +							DocumentWithSignature documentWithSignature = new DocumentWithSignature(); +							DocumentType value = new DocumentType(); +							value.setDocumentURL(dtlUrl); +							documentWithSignature.setDocument(value); +							if(signResponse.getOptionalOutputs()!=null)  							{ -								if(o instanceof DocumentWithSignature) +								//signResponse.getOptionalOutputs().getAny().add(documentWithSignature);	 +								for(Object o :signResponse.getOptionalOutputs().getAny())  								{ -									signResponse.getOptionalOutputs().getAny().remove(o); -									signResponse.getOptionalOutputs().getAny().add(documentWithSignature);	 -									break; +									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(); +							Logger.info("SignResponse overwritten:"+signResponseString);	  						}  						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(); -						Logger.info("SignResponse overwritten:"+signResponseString);	 -					} -					else -					{ -						//No document service used? -						// do nothing.... -						//TODO temporary fix because document is deleted after fetching => SP can't download Doc -						//Add doc to Signresponse - -						DocumentWithSignature documentWithSignature = new DocumentWithSignature(); -						DocumentType value = new DocumentType(); -						if(signResponse.getProfile().toLowerCase().contains("xades")) -						{ -							value.setBase64XML(data); -						} -						else -						{ -							Base64Data base64data = new Base64Data(); -							base64data.setValue(data); -							base64data.setMimeType(dataSource.getContentType()); -							value.setBase64Data(base64data); -						} -						documentWithSignature.setDocument(value); -						if(signResponse.getOptionalOutputs()!=null) -						{ -							//signResponse.getOptionalOutputs().getAny().add(documentWithSignature); -							for(Object o :signResponse.getOptionalOutputs().getAny()) +							//No document service used? +							// do nothing.... +							//TODO temporary fix because document is deleted after fetching => SP can't download Doc +							//Add doc to Signresponse +	 +							DocumentWithSignature documentWithSignature = new DocumentWithSignature(); +							DocumentType value = new DocumentType(); +							if(signResponse.getProfile().toLowerCase().contains("xades")) +							{ +								value.setBase64XML(data); +							} +							else  							{ -								if(o instanceof DocumentWithSignature) +								Base64Data base64data = new Base64Data(); +								base64data.setValue(data); +								base64data.setMimeType(dataSource.getContentType()); +								value.setBase64Data(base64data); +							} +							documentWithSignature.setDocument(value); +							if(signResponse.getOptionalOutputs()!=null) +							{ +								//signResponse.getOptionalOutputs().getAny().add(documentWithSignature); +								for(Object o :signResponse.getOptionalOutputs().getAny())  								{ -									signResponse.getOptionalOutputs().getAny().remove(o); -									signResponse.getOptionalOutputs().getAny().add(documentWithSignature); -									break; +									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(); +							Logger.info("SignResponse overwritten:"+signResponseString);  						} -						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(); -						Logger.info("SignResponse overwritten:"+signResponseString); -					} +				} +				else +					throw new Exception("No DSS id found.");  			} -			else -				throw new Exception("No DSS id found."); -			  			//alter signresponse  			//done @@ -319,7 +333,7 @@ public class SignedDocAttributeRequestProvider extends AttributeProvider {  		try {  			Logger.trace("Initialize VelocityEngine..."); - +			Logger.info("performRedirect url:"+url);  			VelocityEngine velocityEngine = VelocityProvider.getClassPathVelocityEngine();  			Template template = velocityEngine.getTemplate("/resources/templates/oasis_dss_webform_binding.vm");  			VelocityContext context = new VelocityContext(); | 
