diff options
| author | Bojan Suzic <bojan.suzic@iaik.tugraz.at> | 2014-04-29 18:22:25 +0200 | 
|---|---|---|
| committer | Bojan Suzic <bojan.suzic@iaik.tugraz.at> | 2014-04-29 18:22:25 +0200 | 
| commit | 3b5f36230231561f18cce48a04585d58bef5efb7 (patch) | |
| tree | 026a726acb9ff46845ca91c084b352345b2de548 /id/server/idserverlib | |
| parent | b98fe61752f4614de8dbef5a4892b9cd87854cda (diff) | |
| download | moa-id-spss-3b5f36230231561f18cce48a04585d58bef5efb7.tar.gz moa-id-spss-3b5f36230231561f18cce48a04585d58bef5efb7.tar.bz2 moa-id-spss-3b5f36230231561f18cce48a04585d58bef5efb7.zip | |
refactoring and improving mandate
Diffstat (limited to 'id/server/idserverlib')
4 files changed, 298 insertions, 15 deletions
| diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/AttributeCollector.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/AttributeCollector.java index 56b87bfa9..fe5a96c18 100644 --- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/AttributeCollector.java +++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/AttributeCollector.java @@ -46,9 +46,22 @@ public class AttributeCollector implements IAction {       */      public String processRequest(IRequest req, HttpServletRequest httpReq, HttpServletResponse httpResp, AuthenticationSession moasession) throws MOAIDException { +		// - fetch the container +		String artifactId = (String) httpReq.getParameter(ARTIFACT_ID); +		DataContainer container; +		try { +			container = AssertionStorage.getInstance().get(artifactId, DataContainer.class); +		} catch (MOADatabaseException e) { +			Logger.error("Error fetching incomplete Stork response from temporary storage. Most likely a timeout occured.", e); +			throw new MOAIDException("stork.11", null); +		} + +          //   TODO extract attribute response and check if it corresponds to the container          if (httpReq.getParameter("SAMLResponse") != null) { +            Logger.info("Got SAML response from external attribute provider."); +              MOASTORKResponse STORK2Response = new MOASTORKResponse();              //extract STORK Response from HTTP Request @@ -79,22 +92,16 @@ public class AttributeCollector implements IAction {              STORK2Response.setSTORKAuthnResponseToken(decSamlToken); +            if (authnResponse.getPersonalAttributeList().size() > 0) { +                Logger.info("Response from external attribute provider contains " + authnResponse.getPersonalAttributeList().size() + " attributes."); +                addOrUpdateAll(container.getResponse().getPersonalAttributeList(), authnResponse.getPersonalAttributeList()); +            }          }          // end addition -		// - fetch the container -		String artifactId = (String) httpReq.getParameter(ARTIFACT_ID); -		DataContainer container; -		try { -			container = AssertionStorage.getInstance().get(artifactId, DataContainer.class); -		} catch (MOADatabaseException e) { -			Logger.error("Error fetching incomplete Stork response from temporary storage. Most likely a timeout occured.", e); -			throw new MOAIDException("stork.11", null); -		} -          // read configuration parameters of OA          OAAuthParameter oaParam = AuthConfigurationProvider.getInstance().getOnlineApplicationParameter(container.getRequest().getAssertionConsumerServiceURL());          if (oaParam == null) diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/CorporateBodyMandateContainer.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/CorporateBodyMandateContainer.java new file mode 100644 index 000000000..e141aa37b --- /dev/null +++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/CorporateBodyMandateContainer.java @@ -0,0 +1,187 @@ +package at.gv.egovernment.moa.id.protocols.stork2; + +import javanet.staxutils.SimpleNamespaceContext; +import org.xml.sax.InputSource; + +import javax.xml.xpath.XPath; +import javax.xml.xpath.XPathExpressionException; +import javax.xml.xpath.XPathFactory; +import java.io.StringReader; +import java.util.HashMap; + +/** + * @author bsuzic + *         Date: 4/29/14, Time: 3:40 PM + */ +public class CorporateBodyMandateContainer { + +    private String corpMandatorIdentificationValue = null; +    private String corpMandatorIdentificationType = null; +    private String corpMandatorFullName = null; +    private String mandateIssuePlace = null; +    private String mandateIssueDate = null; +    private String mandateIssueTime = null; +    private String simpleMandateContent = null; +    private String mandateValidFrom = null; +    private String mandateValidTo = null; +    private String annotation = null; +    private String physicalRepresentativeIdentificationValue = null; +    private String physicalRepresentativeIdentificationType = null; +    private String physicalRepresentativeGivenName = null; +    private String physicalRepresentativeFamilyName = null; +    private String physicalRepresentativeBirthDate = null; + + +    public CorporateBodyMandateContainer(String mandate) throws XPathExpressionException { +        XPath xPath = XPathFactory.newInstance().newXPath(); +        HashMap<String, String> prefMap = new HashMap<String, String>() {{ +            put(S2Constants.MANDATE_PREFIX, S2Constants.MANDATE_NS); +            put(S2Constants.PERSONDATA_PREFIX, S2Constants.PERSONDATA_NS); +            put(S2Constants.XMLDSIG_PREFIX, S2Constants.XMLDSIG_NS); +        }}; + +        SimpleNamespaceContext namespace = new SimpleNamespaceContext(prefMap); +        xPath.setNamespaceContext(namespace); + +        setAnnotation(xPath.evaluate(S2Constants.MANDATE_ANNOTATION_QUERY, new InputSource(new StringReader(mandate)))); +        setCorpMandatorFullName(xPath.evaluate(S2Constants.MANDATE_MANDATOR_CORPBODY_FULLNAME_QUERY, new InputSource(new StringReader(mandate)))); +        setCorpMandatorIdentificationType(xPath.evaluate(S2Constants.MANDATE_MANDATOR_CORPBODY_IDTYPE_QUERY, new InputSource(new StringReader(mandate)))); +        setCorpMandatorIdentificationValue(xPath.evaluate(S2Constants.MANDATE_MANDATOR_CORPBODY_IDVALUE_QUERY, new InputSource(new StringReader(mandate)))); +        setMandateIssueDate(xPath.evaluate(S2Constants.MANDATE_ISSUEDDATE_QUERY, new InputSource(new StringReader(mandate)))); +        setMandateIssuePlace(xPath.evaluate(S2Constants.MANDATE_ISSUEDPLACE_QUERY, new InputSource(new StringReader(mandate)))); +        setMandateIssueTime(xPath.evaluate(S2Constants.MANDATE_ISSUEDTIME_QUERY, new InputSource(new StringReader(mandate)))); +        setMandateValidFrom(xPath.evaluate(S2Constants.MANDATE_SIMPLEMANDATECONTENT_VALIDFROM_QUERY, new InputSource(new StringReader(mandate)))); +        setMandateValidTo(xPath.evaluate(S2Constants.MANDATE_SIMPLEMANDATECONTENT_VALIDTO_QUERY, new InputSource(new StringReader(mandate)))); +        setPhysicalRepresentativeBirthDate(xPath.evaluate(S2Constants.MANDATE_REPRESENTATIVE_PHYPERS_DATEOFBIRTH_QUERY, new InputSource(new StringReader(mandate)))); +        setPhysicalRepresentativeFamilyName(xPath.evaluate(S2Constants.MANDATE_REPRESENTATIVE_PHYPERS_FAMILYNAME_QUERY, new InputSource(new StringReader(mandate)))); +        setPhysicalRepresentativeGivenName(xPath.evaluate(S2Constants.MANDATE_REPRESENTATIVE_PHYPERS_GIVENNAME_QUERY, new InputSource(new StringReader(mandate)))); +        setPhysicalRepresentativeIdentificationType(xPath.evaluate(S2Constants.MANDATE_REPRESENTATIVE_PHYPERS_IDTYPE_QUERY, new InputSource(new StringReader(mandate)))); +        setPhysicalRepresentativeIdentificationValue(xPath.evaluate(S2Constants.MANDATE_REPRESENTATIVE_PHYPERS_IDVALUE_QUERY, new InputSource(new StringReader(mandate)))); +        setSimpleMandateContent(xPath.evaluate(S2Constants.MANDATE_SIMPLEMANDATECONTENT_TXTDESC_QUERY, new InputSource(new StringReader(mandate)))); + +    } + +    public String getCorpMandatorIdentificationValue() { +        return corpMandatorIdentificationValue; +    } + +    public void setCorpMandatorIdentificationValue(String corpMandatorIdentificationValue) { +        this.corpMandatorIdentificationValue = corpMandatorIdentificationValue; +    } + +    public String getCorpMandatorIdentificationType() { +        return corpMandatorIdentificationType; +    } + +    public void setCorpMandatorIdentificationType(String corpMandatorIdentificationType) { +        this.corpMandatorIdentificationType = corpMandatorIdentificationType; +    } + +    public String getCorpMandatorFullName() { +        return corpMandatorFullName; +    } + +    public void setCorpMandatorFullName(String corpMandatorFullName) { +        this.corpMandatorFullName = corpMandatorFullName; +    } + +    public String getMandateIssuePlace() { +        return mandateIssuePlace; +    } + +    public void setMandateIssuePlace(String mandateIssuePlace) { +        this.mandateIssuePlace = mandateIssuePlace; +    } + +    public String getMandateIssueDate() { +        return mandateIssueDate; +    } + +    public void setMandateIssueDate(String mandateIssueDate) { +        this.mandateIssueDate = mandateIssueDate; +    } + +    public String getMandateIssueTime() { +        return mandateIssueTime; +    } + +    public void setMandateIssueTime(String mandateIssueTime) { +        this.mandateIssueTime = mandateIssueTime; +    } + +    public String getSimpleMandateContent() { +        return simpleMandateContent; +    } + +    public void setSimpleMandateContent(String simpleMandateContent) { +        this.simpleMandateContent = simpleMandateContent; +    } + +    public String getMandateValidFrom() { +        return mandateValidFrom; +    } + +    public void setMandateValidFrom(String mandateValidFrom) { +        this.mandateValidFrom = mandateValidFrom; +    } + +    public String getMandateValidTo() { +        return mandateValidTo; +    } + +    public void setMandateValidTo(String mandateValidTo) { +        this.mandateValidTo = mandateValidTo; +    } + +    public String getPhysicalRepresentativeIdentificationValue() { +        return physicalRepresentativeIdentificationValue; +    } + +    public void setPhysicalRepresentativeIdentificationValue(String physicalRepresentativeIdentificationValue) { +        this.physicalRepresentativeIdentificationValue = physicalRepresentativeIdentificationValue; +    } + +    public String getPhysicalRepresentativeIdentificationType() { +        return physicalRepresentativeIdentificationType; +    } + +    public void setPhysicalRepresentativeIdentificationType(String physicalRepresentativeIdentificationType) { +        this.physicalRepresentativeIdentificationType = physicalRepresentativeIdentificationType; +    } + +    public String getPhysicalRepresentativeGivenName() { +        return physicalRepresentativeGivenName; +    } + +    public void setPhysicalRepresentativeGivenName(String physicalRepresentativeGivenName) { +        this.physicalRepresentativeGivenName = physicalRepresentativeGivenName; +    } + +    public String getPhysicalRepresentativeFamilyName() { +        return physicalRepresentativeFamilyName; +    } + +    public void setPhysicalRepresentativeFamilyName(String physicalRepresentativeFamilyName) { +        this.physicalRepresentativeFamilyName = physicalRepresentativeFamilyName; +    } + +    public String getPhysicalRepresentativeBirthDate() { +        return physicalRepresentativeBirthDate; +    } + +    public void setPhysicalRepresentativeBirthDate(String physicalRepresentativeBirthDate) { +        this.physicalRepresentativeBirthDate = physicalRepresentativeBirthDate; +    } + + + +    public String getAnnotation() { +        return annotation; +    } + +    public void setAnnotation(String annotation) { +        this.annotation = annotation; +    } + + +} diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/MandateRetrievalRequest.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/MandateRetrievalRequest.java index c473e6f82..52309a365 100644 --- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/MandateRetrievalRequest.java +++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/MandateRetrievalRequest.java @@ -8,10 +8,18 @@ import at.gv.egovernment.moa.id.config.auth.OAAuthParameter;  import at.gv.egovernment.moa.id.moduls.IAction;  import at.gv.egovernment.moa.id.moduls.IRequest;  import at.gv.egovernment.moa.logging.Logger; -import eu.stork.peps.auth.commons.*; +import eu.stork.peps.auth.commons.IPersonalAttributeList; +import eu.stork.peps.auth.commons.PersonalAttribute; +import eu.stork.peps.auth.commons.PersonalAttributeList; +import eu.stork.peps.auth.commons.STORKAttrQueryResponse; +import eu.stork.peps.complex.attributes.MandateContentType; +import eu.stork.peps.complex.attributes.MandateType; +import eu.stork.peps.complex.attributes.RepresentationPersonType; +import org.w3c.dom.Node;  import javax.servlet.http.HttpServletRequest;  import javax.servlet.http.HttpServletResponse; +import java.io.UnsupportedEncodingException;  import java.util.ArrayList;  import java.util.List; @@ -29,7 +37,7 @@ public class MandateRetrievalRequest implements IAction {          this.moaSession = moasession;          if ((req instanceof MOASTORKRequest)) { -            this.moaStorkRequest = (MOASTORKRequest)req; +            this.moaStorkRequest = (MOASTORKRequest) req;          } else {              return null; // TODO @@ -37,6 +45,7 @@ public class MandateRetrievalRequest implements IAction {          if (moaStorkRequest.isAttrRequest() && moaStorkRequest.getStorkAttrQueryRequest() != null) { +            populateRepresented(moasession);              Logger.debug("Entering AttributeRequest for MandateProvider"); @@ -96,7 +105,7 @@ public class MandateRetrievalRequest implements IAction {              Logger.debug("Data container prepared");              // ask for consent if necessary -            if(oaParam.isRequireConsentForStorkAttributes()) +            if (oaParam.isRequireConsentForStorkAttributes())                  new ConsentEvaluator().requestConsent(container, httpResp, oaParam);              else                  new ConsentEvaluator().generateSTORKResponse(httpResp, container); @@ -106,10 +115,57 @@ public class MandateRetrievalRequest implements IAction {          } -          return null;  //      } +    private void populateMandatingData(AuthenticationSession moasession) { +        MandateType mandateType = new MandateType(); +        RepresentationPersonType representationPersonType = new RepresentationPersonType(); +        MandateContentType mandateContentType = new MandateContentType(); +    } + + +    private void populateRepresented(AuthenticationSession moasession) { + +        try { +            CorporateBodyMandateContainer corporateBodyMandateContainer = new CorporateBodyMandateContainer(new String(moaSession.getMISMandate().getMandate(), "UTF-8")); + + +        } catch (Exception ex) { + +        } +    } + + +    private Node extractChildNode(Node node, String childName) throws MOAIDException { +        if (!node.hasChildNodes()) { +            throw new MOAIDException("stork.11", null); // TODO description +        } +        for (int n = 0; n < node.getChildNodes().getLength(); n++) { +            if (node.getChildNodes().item(n).getNodeName().equals(childName)) { +                return node.getChildNodes().item(n); +            } +        } +        throw new MOAIDException("stork.11", null); // TODO description + +    } + +    private String extractNodeTextContent(Node node, String childName) throws MOAIDException { +        if (!node.hasChildNodes()) { +            throw new MOAIDException("stork.11", null); // TODO description +        } +        for (int n = 0; n < node.getChildNodes().getLength(); n++) { +            if (node.getChildNodes().item(n).getNodeName().equals(childName)) { +                return node.getTextContent(); +            } +        } +        throw new MOAIDException("stork.11", null); // TODO description +    } + +    private void populateMandateType(AuthenticationSession moasession) { + +    } +      public boolean needAuthentication(IRequest req, HttpServletRequest httpReq, HttpServletResponse httpResp) {          return true;  //      } @@ -119,5 +175,4 @@ public class MandateRetrievalRequest implements IAction {      } -  } diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/S2Constants.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/S2Constants.java new file mode 100644 index 000000000..296bb4396 --- /dev/null +++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/S2Constants.java @@ -0,0 +1,34 @@ +package at.gv.egovernment.moa.id.protocols.stork2; + +/** + * @author bsuzic + *         Date: 4/29/14, Time: 5:34 PM + */ +public interface S2Constants { +    public static final String MANDATE_PREFIX = "mandate"; +    public static final String PERSONDATA_PREFIX = "persondata"; +    public static final String XMLDSIG_PREFIX = "xmldsig"; + +    public static final String MANDATE_NS = "http://reference.e-government.gv.at/namespace/mandates/20040701#"; +    public static final String PERSONDATA_NS = "http://reference.e-government.gv.at/namespace/persondata/20020228#"; +    public static final String XMLDSIG_NS = "http://www.w3.org/2000/09/xmldsig#"; + +    public static final String MANDATE_ANNOTATION_QUERY = "/mandate:Mandate/mandate:Annotation/text()"; +    public static final String MANDATE_REPRESENTATIVE_PHYPERS_IDVALUE_QUERY = "/mandate:Mandate/mandate:Representative/persondata:PhysicalPerson/persondata:Identification/persondata:Value/text()"; +    public static final String MANDATE_REPRESENTATIVE_PHYPERS_IDTYPE_QUERY = "/mandate:Mandate/mandate:Representative/persondata:PhysicalPerson/persondata:Identification/persondata:Type/text()"; +    public static final String MANDATE_REPRESENTATIVE_PHYPERS_GIVENNAME_QUERY = "/mandate:Mandate/mandate:Representative/persondata:PhysicalPerson/persondata:Name/persondata:GivenName/text()"; +    public static final String MANDATE_REPRESENTATIVE_PHYPERS_FAMILYNAME_QUERY = "/mandate:Mandate/mandate:Representative/persondata:PhysicalPerson/persondata:Name/persondata:FamilyName/text()"; +    public static final String MANDATE_REPRESENTATIVE_PHYPERS_DATEOFBIRTH_QUERY = "/mandate:Mandate/mandate:Representative/persondata:PhysicalPerson/persondata:DateOfBirth/text()"; +    public static final String MANDATE_MANDATOR_CORPBODY_IDVALUE_QUERY = "/mandate:Mandate/mandate:Mandator/persondata:CorporateBody/persondata:Identification/persondata:Value/text()"; +    public static final String MANDATE_MANDATOR_CORPBODY_IDTYPE_QUERY = "/mandate:Mandate/mandate:Mandator/persondata:CorporateBody/persondata:Identification/persondata:Type/text()"; +    public static final String MANDATE_MANDATOR_CORPBODY_FULLNAME_QUERY = "/mandate:Mandate/mandate:Mandator/persondata:CorporateBody/persondata:FullName/text()"; +    public static final String MANDATE_ISSUEDPLACE_QUERY = "/mandate:Mandate/mandate:Issued/mandate:Place/text()"; +    public static final String MANDATE_ISSUEDDATE_QUERY = "/mandate:Mandate/mandate:Issued/mandate:Date/text()"; +    public static final String MANDATE_ISSUEDTIME_QUERY = "/mandate:Mandate/mandate:Issued/mandate:Time/text()"; +    public static final String MANDATE_SIMPLEMANDATECONTENT_TXTDESC_QUERY = "/mandate:Mandate/mandate:SimpleMandateContent/mandate:TextualDescription/text()"; +    public static final String MANDATE_SIMPLEMANDATECONTENT_VALIDFROM_QUERY = "/mandate:Mandate/mandate:SimpleMandateContent/mandate:TimeConstraint/mandate:ValidFrom/text()"; +    public static final String MANDATE_SIMPLEMANDATECONTENT_VALIDTO_QUERY = "/mandate:Mandate/mandate:SimpleMandateContent/mandate:TimeConstraint/mandate:ValidTo/text()"; + + + +} | 
