diff options
Diffstat (limited to 'id/server/idserverlib/src')
8 files changed, 8 insertions, 814 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 307715324..4ea32c602 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 @@ -17,6 +17,7 @@ import at.gv.egovernment.moa.id.data.SLOInformationImpl;  import at.gv.egovernment.moa.id.data.SLOInformationInterface;  import at.gv.egovernment.moa.id.moduls.IAction;  import at.gv.egovernment.moa.id.moduls.IRequest; +import at.gv.egovernment.moa.id.protocols.stork2.attributeproviders.AttributeProvider;  import at.gv.egovernment.moa.id.storage.AssertionStorage;  import at.gv.egovernment.moa.logging.Logger;  import eu.stork.peps.auth.commons.*; diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/AttributeProvider.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/AttributeProvider.java deleted file mode 100644 index 7647c8e89..000000000 --- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/AttributeProvider.java +++ /dev/null @@ -1,70 +0,0 @@ -package at.gv.egovernment.moa.id.protocols.stork2; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import at.gv.egovernment.moa.id.auth.data.AuthenticationSession; -import at.gv.egovernment.moa.id.auth.exception.MOAIDException; -import at.gv.egovernment.moa.id.config.auth.OAAuthParameter; -import at.gv.egovernment.moa.id.data.IAuthData; - -import eu.stork.peps.auth.commons.IPersonalAttributeList; -import eu.stork.peps.auth.commons.PersonalAttribute; - -import java.util.List; - -/** - * An {@link AttributeProvider} can fetch a set of stork attributes. It might complete the query within one method call, - * but might also need to redirect to another webservice to accomplish its task. - */ -public interface AttributeProvider { -	 -	/** -	 * Acquire the specified attribute. Returns {@code null} when attribute retrieval is in progress, but requires for -	 * for redirecting the user to an external service. Use {@link AttributeProvider#parse(HttpServletRequest)} to parse -	 * the response. -	 * -	 * @param attributes the list of attributes to be acquired -	 * @param spCountyCode the sp county code -	 * @param authData the moasession -	 * @return the personal attribute -	 * @throws UnsupportedAttributeException the unsupported attribute exception -	 * @throws ExternalAttributeRequestRequiredException an attribute request to an external service has to be done -	 * @throws MOAIDException the mOAID exception -	 */ -	public IPersonalAttributeList acquire(PersonalAttribute attributes, String spCountyCode, IAuthData authData) throws UnsupportedAttributeException, ExternalAttributeRequestRequiredException, MOAIDException; - -    public IPersonalAttributeList acquire(List<PersonalAttribute> attributes, String spCountyCode, IAuthData authData) throws UnsupportedAttributeException, ExternalAttributeRequestRequiredException, MOAIDException; - -    /** -	 * Perform redirect. -	 * -	 * @param url the return URL ending with ?artifactId=... -	 * @param req the request we got from the S-PEPS and for which we have to ask our APs -	 * @param resp the response to the preceding request -	 * @param oaParam the oa param -	 * @throws MOAIDException the mOAID exception -	 */ -	public void performRedirect(String url, HttpServletRequest req, HttpServletResponse resp, OAAuthParameter oaParam) throws MOAIDException; -	 -	/** -	 * Parses the response we got from the external attribute provider. -	 * -	 * @param httpReq the http req -	 * @return a list of attributes -	 * @throws UnsupportedAttributeException if the provider cannot find anything familiar in the provided httpReq -	 * @throws MOAIDException if something went wrong -	 */ -	public IPersonalAttributeList parse(HttpServletRequest httpReq) throws UnsupportedAttributeException, MOAIDException; - -    /** -     * Returns the list of supported attributes -     * -     * @return a list of attributes -     * @throws MOAIDException if something went wrong -     */ -    public List<String> getSupportedAttributeNames() throws MOAIDException; - - - -} diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/AttributeProviderFactory.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/AttributeProviderFactory.java index a339cff23..d8c1949ff 100644 --- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/AttributeProviderFactory.java +++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/AttributeProviderFactory.java @@ -1,6 +1,11 @@  package at.gv.egovernment.moa.id.protocols.stork2;  import at.gv.egovernment.moa.id.commons.db.dao.config.AttributeProviderPlugin; +import at.gv.egovernment.moa.id.protocols.stork2.attributeproviders.AttributeProvider; +import at.gv.egovernment.moa.id.protocols.stork2.attributeproviders.EHvdAttributeProviderPlugin; +import at.gv.egovernment.moa.id.protocols.stork2.attributeproviders.MandateAttributeRequestProvider; +import at.gv.egovernment.moa.id.protocols.stork2.attributeproviders.SignedDocAttributeRequestProvider; +import at.gv.egovernment.moa.id.protocols.stork2.attributeproviders.StorkAttributeRequestProvider;  import at.gv.egovernment.moa.logging.Logger;  import java.util.ArrayList; diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/EHvdAttributeProviderPlugin.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/EHvdAttributeProviderPlugin.java deleted file mode 100644 index 2c4793f8f..000000000 --- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/EHvdAttributeProviderPlugin.java +++ /dev/null @@ -1,241 +0,0 @@ -package at.gv.egovernment.moa.id.protocols.stork2; - -import java.io.StringWriter; -import java.util.*; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.Marshaller; -import javax.xml.soap.MessageFactory; -import javax.xml.soap.SOAPBody; -import javax.xml.soap.SOAPConnection; -import javax.xml.soap.SOAPConnectionFactory; -import javax.xml.soap.SOAPElement; -import javax.xml.soap.SOAPEnvelope; -import javax.xml.soap.SOAPMessage; -import javax.xml.soap.SOAPPart; -import at.gv.egovernment.moa.id.auth.builder.BPKBuilder; -import at.gv.egovernment.moa.id.auth.data.AuthenticationSession; -import at.gv.egovernment.moa.id.auth.exception.MOAIDException; -import at.gv.egovernment.moa.id.config.auth.OAAuthParameter; -import at.gv.egovernment.moa.id.data.IAuthData; -import at.gv.egovernment.moa.logging.Logger; -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.complex.attributes.IsHealthCareProfessionalType; -import eu.stork.peps.complex.attributes.ObjectFactory; - -/** - * Fetches the attribute IsHealthcareProfessional from the BAGDAD SOAP service - */ -public class EHvdAttributeProviderPlugin implements AttributeProvider { -	 -	/** The destination. */ -	private Object destination; -	 -	/** The attributes. */ -	private String attributes; - -	/** -	 * Instantiates a new e hvd attribute provider plugin. -	 * -	 * @param url the service url -	 * @param attributes  -	 */ -	public EHvdAttributeProviderPlugin(String url, String supportedAttributes) { -		destination = url; -		attributes = supportedAttributes; -	} - -	/* (non-Javadoc) -	 * @see at.gv.egovernment.moa.id.protocols.stork2.AttributeProvider#acquire(eu.stork.peps.auth.commons.PersonalAttribute) -	 */ -	public IPersonalAttributeList acquire(PersonalAttribute attribute, String spCountryCode, IAuthData authData) -			throws UnsupportedAttributeException, -			ExternalAttributeRequestRequiredException, MOAIDException { - -		// break when we cannot handle the requested attribute -		if(!attributes.contains(attribute.getName())) -			throw new UnsupportedAttributeException(); -		 -		try { -	    	Logger.debug("initializing SOAP connections..."); -			// create SOAP connection -			SOAPConnection soapConnection = SOAPConnectionFactory.newInstance().createConnection(); -			 -			// assemble SOAP request -			MessageFactory messageFactory = MessageFactory.newInstance(); -			SOAPMessage requestMessage = messageFactory.createMessage(); -			SOAPPart requestPart = requestMessage.getSOAPPart(); - -			// (soap 1.1 relevant part. could not find a solution to use soap 1.2 in time. -			requestMessage.getMimeHeaders().setHeader("SOAPAction", "http://gesundheit.gv.at/BAGDAD/DataAccessService/IsHealthcareProfessional"); - -            /* -            Construct SOAP Request Message: -			<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> -			  <soap:Body> -			    <IsHealthcareProfessional xmlns="http://gesundheit.gv.at/BAGDAD/DataAccessService"> -			      <bPK>string</bPK> -			    </IsHealthcareProfessional> -			  </soap:Body> -			</soap:Envelope> - -			see https://stork.ehealth.gv.at/GDAService.asmx?op=IsHealthcareProfessional -             */ - -			// SOAP Envelope -			SOAPEnvelope envelope = requestPart.getEnvelope(); - -			// SOAP Body -			SOAPBody requestBody = envelope.getBody(); -			SOAPElement requestBodyElem = requestBody.addChildElement("IsHealthcareProfessional"); -			requestBodyElem.addAttribute(envelope.createName("xmlns"), "http://gesundheit.gv.at/BAGDAD/DataAccessService"); - -			SOAPElement requestBodyElem1 = requestBodyElem.addChildElement("bPK"); -			 -			//TODO: CHECK: IdentificationValue containts wbPK if MOA-ID is used as VIDP  -			requestBodyElem1.addTextNode(new BPKBuilder().buildBPK(authData.getIdentificationValue(), "GH")); - -			requestMessage.saveChanges(); - -			// perform SOAP call -	    	Logger.debug("call..."); -			SOAPMessage responseMessage = soapConnection.call(requestMessage, destination); - -			// parse SOAP response - -            /* -			<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> -			  <soap:Body> -			    <IsHealthcareProfessionalResponse xmlns="http://gesundheit.gv.at/BAGDAD/DataAccessService"> -			      <IsHealthcareProfessionalResult> -			        <RequestOK>boolean</RequestOK> -			        <Message>string</Message> -			        <IsHealthcareProfessional>boolean</IsHealthcareProfessional> -			        <NameOfOrganisation>string</NameOfOrganisation> -			        <Type>string</Type> -			        <Specialization>string</Specialization> -			      </IsHealthcareProfessionalResult> -			    </IsHealthcareProfessionalResponse> -			  </soap:Body> -			</soap:Envelope> - -			see https://stork.ehealth.gv.at/GDAService.asmx?op=IsHealthcareProfessional -             */ -	    	Logger.debug("call successful. Parse..."); -			SOAPBody responseBody = responseMessage.getSOAPBody(); - -			// iterate through tree -			SOAPElement responseElement = (SOAPElement) responseBody.getChildElements().next(); -			SOAPElement resultElement = (SOAPElement) responseElement.getChildElements().next(); - -			// collect all info in a map -			Iterator<?> it = resultElement.getChildElements(); -			Map<String, String> collection = new HashMap<String, String>(); -			while (it.hasNext()) { -				SOAPElement current = (SOAPElement) it.next(); - -				collection.put(current.getNodeName(), current.getTextContent()); -			} - -			// check if there is anything valid in the map -			if (collection.isEmpty() || collection.size() != 6) { -				Logger.warn("eHVD returned an unexpected count of values. Expected 6 got " + collection.size()); -				throw new IndexOutOfBoundsException("response attributes not like specified"); -			} - -			// - fetch request validity -			if (collection.get("RequestOK").equals("false")) { -				Logger.warn("eHVD reported an invalid request. The error message is: " + collection.get("Message")); -				throw new Exception("eHVD reported an invalid request"); -			} - -			PersonalAttribute acquiredAttribute = null; - -			if (collection.get("IsHealthcareProfessional").equals("false")) { -				// the citizen is no HCP -				acquiredAttribute = new PersonalAttribute("isHealthCareProfessional", false, new ArrayList<String>(), "NotAvailable"); -			} else { -				// go on and parse the data -				IsHealthCareProfessionalType result = new IsHealthCareProfessionalType(); -				result.setNameOfOrganisation(collection.get("NameOfOrganisation")); - -				if (collection.get("Type").equals("Medical doctor")) -					result.setHCPType("D"); -				else -					result.setHCPType("?"); - -				if (collection.get("Specialization").contains("Arzt für Allgemeinmedizin")) -					result.setSpecialisation("GP"); -				else -					result.setSpecialisation("??"); - -				result.setAQAA(4); - -				final Marshaller m = JAXBContext.newInstance(IsHealthCareProfessionalType.class).createMarshaller(); -			    m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); -			     -			    StringWriter stringWriter = new StringWriter(); -			    m.marshal(new ObjectFactory().createIsHealthCareProfessional(result), stringWriter);		     -				 -				ArrayList<String> value = new ArrayList<String>(); -				value.add(stringWriter.toString()); - -				acquiredAttribute = new PersonalAttribute("isHealthCareProfessional", false, value, "Available"); -			} - -			// pack and return the result -			PersonalAttributeList result = new PersonalAttributeList(); -			result.add(acquiredAttribute); - -			// add stork id for verification -			ArrayList<String> value = new ArrayList<String>(); -			value.add(new BPKBuilder().buildStorkeIdentifier(authData.getIdentityLink(), spCountryCode)); -			result.add(new PersonalAttribute("eIdentifier", false, value, "Available")); - -			return result; -		} catch (Exception e) { -			throw new MOAIDException("stork.13", new Object[] { e }); -		} -	} - -    @Override -    public IPersonalAttributeList acquire(List<PersonalAttribute> attributes, String spCountyCode, IAuthData authData) throws UnsupportedAttributeException, ExternalAttributeRequestRequiredException, MOAIDException { -        if (attributes.size() == 1) { -            return acquire(attributes.get(0), spCountyCode, authData); -        } else { -            throw new MOAIDException("stork.13", new Object[] {  });  // TODO message only one attribute supported by this provider - -        } -    } - -    /* (non-Javadoc) -     * @see at.gv.egovernment.moa.id.protocols.stork2.AttributeProvider#performRedirect(java.lang.String, java.lang.String, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, at.gv.egovernment.moa.id.config.auth.OAAuthParameter) -     */ -	public void performRedirect(String url, -			HttpServletRequest req, HttpServletResponse resp, -			OAAuthParameter oaParam) throws MOAIDException { -		// there is no redirect required -	} - -	/* (non-Javadoc) -	 * @see at.gv.egovernment.moa.id.protocols.stork2.AttributeProvider#parse(javax.servlet.http.HttpServletRequest) -	 */ -	public IPersonalAttributeList parse(HttpServletRequest httpReq) -			throws UnsupportedAttributeException, MOAIDException { -		// there is no redirect required, so we throw an exception when someone asks us to parse a response -		throw new UnsupportedAttributeException(); -	} - -    @Override -    public List<String> getSupportedAttributeNames() throws MOAIDException { -        ArrayList<String> supportedAttributeNames = new ArrayList<String>(); -        for (String attributeName : this.attributes.split(",")) { -            supportedAttributeNames.add(attributeName); -        } -        return supportedAttributeNames; -    } -} diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/ExternalAttributeRequestRequiredException.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/ExternalAttributeRequestRequiredException.java index 67fbd50f8..867624ff7 100644 --- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/ExternalAttributeRequestRequiredException.java +++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/ExternalAttributeRequestRequiredException.java @@ -1,5 +1,7 @@  package at.gv.egovernment.moa.id.protocols.stork2; +import at.gv.egovernment.moa.id.protocols.stork2.attributeproviders.AttributeProvider; +  public class ExternalAttributeRequestRequiredException extends Exception {  	/** The Constant serialVersionUID. */ diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/MandateAttributeRequestProvider.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/MandateAttributeRequestProvider.java deleted file mode 100644 index edba7b754..000000000 --- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/MandateAttributeRequestProvider.java +++ /dev/null @@ -1,167 +0,0 @@ -package at.gv.egovernment.moa.id.protocols.stork2; - -import at.gv.egovernment.moa.id.auth.data.AuthenticationSession; -import at.gv.egovernment.moa.id.auth.exception.MOAIDException; -import at.gv.egovernment.moa.id.commons.db.dao.config.AttributeProviderPlugin; -import at.gv.egovernment.moa.id.config.auth.OAAuthParameter; -import at.gv.egovernment.moa.id.data.IAuthData; -import at.gv.egovernment.moa.id.util.HTTPUtils; -import at.gv.egovernment.moa.id.util.VelocityProvider; -import at.gv.egovernment.moa.logging.Logger; -import at.gv.egovernment.moa.util.StringUtils; -import eu.stork.peps.auth.commons.*; -import eu.stork.peps.auth.engine.STORKSAMLEngine; -import eu.stork.peps.exceptions.STORKSAMLEngineException; -import org.apache.velocity.Template; -import org.apache.velocity.VelocityContext; -import org.apache.velocity.app.VelocityEngine; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.StringWriter; -import java.util.ArrayList; -import java.util.List; - -/** - * Provides mandate attribute from MIS - */ -public class MandateAttributeRequestProvider implements AttributeProvider { -    /** -     * The destination. -     */ -    private String destination; - -    /** -     * The attributes. -     */ -    private String attributes; - -    private String spCountryCode; - -    private PersonalAttributeList requestedAttributes; - -    public MandateAttributeRequestProvider(String aPurl, String supportedAttributes) throws MOAIDException { -        destination = aPurl; -        attributes = supportedAttributes; -    } - -    public String getAttrProviderName() { -        return "MandateAttributeRequestProvider"; -    } - -    public IPersonalAttributeList acquire(PersonalAttribute attribute, String spCountryCode, IAuthData authData) throws UnsupportedAttributeException, ExternalAttributeRequestRequiredException, MOAIDException { -        Logger.info("Acquiring attribute: " + attribute.getName() + ", by: " + getAttrProviderName()); -        this.spCountryCode = spCountryCode; -        requestedAttributes = new PersonalAttributeList(1); -        requestedAttributes.add(attribute); - -        // break if we cannot handle the requested attribute -        if (!attributes.contains(attribute.getName())) { -            Logger.info("Attribute " + attribute.getName() + " not supported by the provider: " + getAttrProviderName()); -            throw new UnsupportedAttributeException(); -        } -        PersonalAttributeList result = new PersonalAttributeList(); -        //return result; - - - -        Logger.info("Thrown external request by: " + getAttrProviderName()); -        throw new ExternalAttributeRequestRequiredException(this); -    } - -    @Override -    public IPersonalAttributeList acquire(List<PersonalAttribute> attributes, String spCountryCode, IAuthData moasession) throws UnsupportedAttributeException, ExternalAttributeRequestRequiredException, MOAIDException { -        Logger.info("Acquiring " + attributes.size() + "  attributes, by: " + getAttrProviderName()); -        this.spCountryCode = spCountryCode; -        requestedAttributes = new PersonalAttributeList(attributes.size()); - -        for (PersonalAttribute personalAttribute : attributes) { -            // break if we cannot handle the requested attribute -            if (!this.attributes.contains(personalAttribute.getName())) { -                Logger.info("Attribute " + personalAttribute.getName() + " not supported by the provider: " + getAttrProviderName()); -                throw new UnsupportedAttributeException(); -            } -            requestedAttributes.add(personalAttribute); -        } - -        Logger.info("Thrown external request by: " + getAttrProviderName()); -        throw new ExternalAttributeRequestRequiredException(this); -    } - - - - -    public void performRedirect(String url, HttpServletRequest req, HttpServletResponse resp, OAAuthParameter oaParam) throws MOAIDException { - -        String spSector = "Business"; -        String spInstitution = StringUtils.isEmpty(oaParam.getFriendlyName()) ? "UNKNOWN" : oaParam.getFriendlyName(); -        String spApplication = spInstitution; - -        //generate AttrQueryRequest -        STORKAttrQueryRequest attributeRequest = new STORKAttrQueryRequest(); -        attributeRequest.setDestination(destination); -        attributeRequest.setAssertionConsumerServiceURL(url); -        attributeRequest.setIssuer(HTTPUtils.getBaseURL(req)); -        attributeRequest.setQaa(oaParam.getQaaLevel()); -        attributeRequest.setSpInstitution(spInstitution); -        attributeRequest.setCountry(spCountryCode); -        attributeRequest.setSpCountry(spCountryCode); -        attributeRequest.setSpApplication(spApplication); -        attributeRequest.setSpSector(spSector); -        attributeRequest.setPersonalAttributeList(requestedAttributes); - -        attributeRequest.setCitizenCountryCode("AT"); - - - - - -        Logger.info("STORK AttrRequest successfully assembled."); - -        STORKSAMLEngine samlEngine = STORKSAMLEngine.getInstance("VIDP"); -        try { -            attributeRequest = samlEngine.generateSTORKAttrQueryRequest(attributeRequest); -        } catch (STORKSAMLEngineException e) { -            Logger.error("Could not sign STORK SAML AttrRequest.", e); -            throw new MOAIDException("stork.00", null); -        } - -        Logger.info("STORK AttrRequest successfully signed!"); - -        try { -            Logger.trace("Initialize VelocityEngine..."); - -            VelocityEngine velocityEngine = VelocityProvider.getClassPathVelocityEngine(); -            Template template = velocityEngine.getTemplate("/resources/templates/saml2-post-binding-moa.vm"); -            VelocityContext context = new VelocityContext(); -            context.put("SAMLRequest", PEPSUtil.encodeSAMLToken(attributeRequest.getTokenSaml())); -            context.put("action", destination); - -            StringWriter writer = new StringWriter(); -            template.merge(context, writer); - -            resp.getOutputStream().write(writer.toString().getBytes()); -        } catch (Exception e) { -            Logger.error("Error sending STORK SAML AttrRequest.", e); -            throw new MOAIDException("stork.11", null); -        } -        Logger.info("STORK AttrRequest successfully rendered!"); - -    } - -    public IPersonalAttributeList parse(HttpServletRequest httpReq) throws UnsupportedAttributeException, MOAIDException { -        return null;  // -    } - -    @Override -    public List<String> getSupportedAttributeNames() throws MOAIDException { -        ArrayList<String> supportedAttributeNames = new ArrayList<String>(); -        for (String attributeName : this.attributes.split(",")) { -            supportedAttributeNames.add(attributeName); -        } -        return supportedAttributeNames; -    } - - -} - diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/SignedDocAttributeRequestProvider.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/SignedDocAttributeRequestProvider.java deleted file mode 100644 index 553063ae8..000000000 --- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/SignedDocAttributeRequestProvider.java +++ /dev/null @@ -1,150 +0,0 @@ -package at.gv.egovernment.moa.id.protocols.stork2; - -import java.io.StringWriter; -import java.io.UnsupportedEncodingException; -import java.util.ArrayList; -import java.util.List; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.commons.codec.binary.Base64; -import org.apache.velocity.Template; -import org.apache.velocity.VelocityContext; -import org.apache.velocity.app.VelocityEngine; - -import at.gv.egovernment.moa.id.auth.data.AuthenticationSession; -import at.gv.egovernment.moa.id.auth.exception.MOAIDException; -import at.gv.egovernment.moa.id.config.auth.OAAuthParameter; -import at.gv.egovernment.moa.id.data.IAuthData; -import at.gv.egovernment.moa.id.util.VelocityProvider; -import at.gv.egovernment.moa.logging.Logger; -import eu.stork.peps.auth.commons.IPersonalAttributeList; -import eu.stork.peps.auth.commons.PersonalAttribute; -import eu.stork.peps.auth.commons.PersonalAttributeList; - -/** - * Forwards a signedDoc attribute request to the oasis-dss service instance - */ -public class SignedDocAttributeRequestProvider implements AttributeProvider { - -	private PersonalAttribute requestedAttribute; - -	/** -	 * The URL of the service listening for the oasis dss webform post request -	 */ -	private String oasisDssWebFormURL; - -	/** The attributes. */ -	private String attributes; - -	/** -	 * Instantiates a new signed doc attribute request provider. -	 *  -	 * @param oasisDssWebFormURL -	 *            the AP location -	 * @param attributes  -	 */ -	public SignedDocAttributeRequestProvider(String oasisDssWebFormURL, String attributes) { -		this.oasisDssWebFormURL = oasisDssWebFormURL; -		this.attributes = attributes; -	} - -	/* -	 * (non-Javadoc) -	 *  -	 * @see -	 * at.gv.egovernment.moa.id.protocols.stork2.AttributeProvider#acquire(java -	 * .lang.String) -	 */ -	public IPersonalAttributeList acquire(PersonalAttribute attribute, String spCountyCode, IAuthData authData) throws UnsupportedAttributeException, -			ExternalAttributeRequestRequiredException { -		if(!attributes.contains(attribute.getName())) { -			throw new UnsupportedAttributeException(); -		} -		 -		requestedAttribute = attribute; - -		throw new ExternalAttributeRequestRequiredException(this); -	} - -	/* -	 * (non-Javadoc) -	 *  -	 * @see -	 * at.gv.egovernment.moa.id.protocols.stork2.AttributeProvider#parse(javax -	 * .servlet.http.HttpServletRequest) -	 */ -	public IPersonalAttributeList parse(HttpServletRequest httpReq) throws MOAIDException, UnsupportedAttributeException { -		Logger.debug("Beginning to extract OASIS-DSS response out of HTTP Request"); - -		try { -			String signResponse = new String(Base64.decodeBase64(httpReq.getParameter("signresponse")), "UTF8"); -			List<String> values = new ArrayList<String>(); -			values.add(signResponse); - -			Logger.debug("Assembling signedDoc attribute"); -			PersonalAttribute signedDocAttribute = new PersonalAttribute("signedDoc", false, values, -					"Available"); - -			// pack and return the result -			PersonalAttributeList result = new PersonalAttributeList(); -			result.add(signedDocAttribute); -			return result; -		} catch (UnsupportedEncodingException e) { -			Logger.error("Failed to assemble signedDoc attribute"); -			throw new MOAIDException("stork.05", null); -		} -	} - -	/* -	 * (non-Javadoc) -	 *  -	 * @see -	 * at.gv.egovernment.moa.id.protocols.stork2.AttributeProvider#performRedirect -	 * (java.lang.String) -	 */ -	public void performRedirect(String url, HttpServletRequest req, HttpServletResponse resp, OAAuthParameter oaParam) -			throws MOAIDException { - -		try { -			Logger.trace("Initialize VelocityEngine..."); - -			VelocityEngine velocityEngine = VelocityProvider.getClassPathVelocityEngine(); -			Template template = velocityEngine.getTemplate("/resources/templates/oasis_dss_webform_binding.vm"); -			VelocityContext context = new VelocityContext(); -			context.put("signrequest", Base64.encodeBase64String(requestedAttribute.getValue().get(0).getBytes("UTF8"))); -			context.put("clienturl", url); -			context.put("action", oasisDssWebFormURL); - -			StringWriter writer = new StringWriter(); -			template.merge(context, writer); - -			resp.getOutputStream().write(writer.toString().getBytes()); -		} catch (Exception e) { -			Logger.error("Error sending DSS signrequest.", e); -			throw new MOAIDException("stork.11", null); -		} -	} - -	/* (non-Javadoc) -	 * @see at.gv.egovernment.moa.id.protocols.stork2.AttributeProvider#acquire(java.util.List, java.lang.String, at.gv.egovernment.moa.id.data.IAuthData) -	 */ -	@Override -	public IPersonalAttributeList acquire(List<PersonalAttribute> attributes, -			String spCountyCode, IAuthData authData) -			throws UnsupportedAttributeException, -			ExternalAttributeRequestRequiredException, MOAIDException { -		// TODO Auto-generated method stub -		return null; -	} - -	/* (non-Javadoc) -	 * @see at.gv.egovernment.moa.id.protocols.stork2.AttributeProvider#getSupportedAttributeNames() -	 */ -	@Override -	public List<String> getSupportedAttributeNames() throws MOAIDException { -		// TODO Auto-generated method stub -		return null; -	} -} diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/StorkAttributeRequestProvider.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/StorkAttributeRequestProvider.java deleted file mode 100644 index 3a73dafae..000000000 --- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/StorkAttributeRequestProvider.java +++ /dev/null @@ -1,186 +0,0 @@ -package at.gv.egovernment.moa.id.protocols.stork2; - -import java.io.StringWriter; -import java.util.List; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.apache.velocity.Template; -import org.apache.velocity.VelocityContext; -import org.apache.velocity.app.VelocityEngine; - -import at.gv.egovernment.moa.id.auth.data.AuthenticationSession; -import at.gv.egovernment.moa.id.auth.exception.MOAIDException; -import at.gv.egovernment.moa.id.config.auth.OAAuthParameter; -import at.gv.egovernment.moa.id.data.IAuthData; -import at.gv.egovernment.moa.id.util.HTTPUtils; -import at.gv.egovernment.moa.id.util.VelocityProvider; -import at.gv.egovernment.moa.logging.Logger; -import at.gv.egovernment.moa.util.StringUtils; - -import eu.stork.peps.auth.commons.IPersonalAttributeList; -import eu.stork.peps.auth.commons.PEPSUtil; -import eu.stork.peps.auth.commons.PersonalAttribute; -import eu.stork.peps.auth.commons.PersonalAttributeList; -import eu.stork.peps.auth.commons.STORKAttrQueryRequest; -import eu.stork.peps.auth.commons.STORKAttrQueryResponse; -import eu.stork.peps.auth.engine.STORKSAMLEngine; -import eu.stork.peps.exceptions.STORKSAMLEngineException; - -/** - * creates a STORK attribute request for a configurable set of attributes - */ -public class StorkAttributeRequestProvider implements AttributeProvider { - -	private PersonalAttributeList requestedAttributes; -	 -	/** The destination. */ -	private String destination; - -	/** The attributes. */ -	private String attributes; - -	/** The sp country code. */ -	private String spCountryCode; - -	/** -	 * Instantiates a new stork attribute request provider. -	 * -	 * @param apUrl the AP location -	 * @param supportedAttributes the supported attributes as csv -	 */ -	public StorkAttributeRequestProvider(String apUrl, String supportedAttributes) { -		destination = apUrl; -		attributes = supportedAttributes; -	} - -	/* (non-Javadoc) -	 * @see at.gv.egovernment.moa.id.protocols.stork2.AttributeProvider#acquire(java.lang.String) -	 */ -	public IPersonalAttributeList acquire(PersonalAttribute attribute, String spCountyCode, IAuthData authData) -			throws UnsupportedAttributeException, ExternalAttributeRequestRequiredException { - -		if (!attributes.contains(attribute.getName())) -			throw new UnsupportedAttributeException(); -		 -		this.spCountryCode = spCountyCode; - -		requestedAttributes = new PersonalAttributeList(1); -		requestedAttributes.add(attribute); -		throw new ExternalAttributeRequestRequiredException(this); -	} - -	/* (non-Javadoc) -	 * @see at.gv.egovernment.moa.id.protocols.stork2.AttributeProvider#parse(javax.servlet.http.HttpServletRequest) -	 */ -	public IPersonalAttributeList parse(HttpServletRequest httpReq) throws MOAIDException, UnsupportedAttributeException { - -		Logger.info(this.getClass().getSimpleName() + " tries to extract SAMLResponse out of HTTP Request"); -		 -		//extract STORK Response from HTTP Request -		//Decodes SAML Response -		byte[] decSamlToken; -		try { -			decSamlToken = PEPSUtil.decodeSAMLToken(httpReq.getParameter("SAMLResponse")); -		} catch(NullPointerException e) { -			throw new UnsupportedAttributeException(); -		} - -		//Get SAMLEngine instance -		STORKSAMLEngine engine = STORKSAMLEngine.getInstance("VIDP"); - -		STORKAttrQueryResponse attrResponse = null; -		try { -			//validate SAML Token -			Logger.debug("Starting validation of SAML response"); -			attrResponse = engine.validateSTORKAttrQueryResponse(decSamlToken, (String) httpReq.getRemoteHost()); -			Logger.info("SAML response successfully verified!"); -		}catch(STORKSAMLEngineException e){ -			Logger.error("Failed to verify STORK SAML Response", e); -			throw new MOAIDException("stork.05", null); -		} -		 -		return attrResponse.getPersonalAttributeList(); -	} - -	/* (non-Javadoc) -	 * @see at.gv.egovernment.moa.id.protocols.stork2.AttributeProvider#performRedirect(java.lang.String) -	 */ -	public void performRedirect(String url, HttpServletRequest req, HttpServletResponse resp, OAAuthParameter oaParam) throws MOAIDException { - -    	String spSector = "Business"; -    	String spInstitution = StringUtils.isEmpty(oaParam.getFriendlyName()) ? "UNKNOWN" : oaParam.getFriendlyName(); -    	String spApplication = spInstitution; - -    	//generate AuthnRquest -    	STORKAttrQueryRequest attributeRequest = new STORKAttrQueryRequest(); -    	attributeRequest.setDestination(destination); -    	attributeRequest.setAssertionConsumerServiceURL(url); -    	attributeRequest.setIssuer(HTTPUtils.getBaseURL(req)); -    	attributeRequest.setQaa(oaParam.getQaaLevel()); -    	attributeRequest.setSpInstitution(spInstitution); -    	attributeRequest.setCountry(spCountryCode); -    	attributeRequest.setSpCountry(spCountryCode); -    	attributeRequest.setSpApplication(spApplication); -    	attributeRequest.setSpSector(spSector); -    	attributeRequest.setPersonalAttributeList(requestedAttributes); - -    	attributeRequest.setCitizenCountryCode("AT"); - - -    	Logger.debug("STORK AttrRequest successfully assembled."); - -    	STORKSAMLEngine samlEngine = STORKSAMLEngine.getInstance("VIDP"); -    	try { -    		attributeRequest = samlEngine.generateSTORKAttrQueryRequest(attributeRequest); -    	} catch (STORKSAMLEngineException e) { -			Logger.error("Could not sign STORK SAML AttrRequest.", e); -			throw new MOAIDException("stork.00", null); -		} - -		Logger.info("STORK AttrRequest successfully signed!"); -		 -		try { -			Logger.trace("Initialize VelocityEngine..."); - -			VelocityEngine velocityEngine = VelocityProvider.getClassPathVelocityEngine(); -			Template template = velocityEngine.getTemplate("/resources/templates/saml2-post-binding-moa.vm"); -			VelocityContext context = new VelocityContext(); -			context.put("SAMLRequest", PEPSUtil.encodeSAMLToken(attributeRequest.getTokenSaml())); -			context.put("action", destination); - -			StringWriter writer = new StringWriter(); -			template.merge(context, writer); - -			resp.getOutputStream().write(writer.toString().getBytes()); -		} catch (Exception e) { -			Logger.error("Error sending STORK SAML AttrRequest.", e); -			throw new MOAIDException("stork.11", null); -		} -		Logger.info("STORK AttrRequest successfully rendered!"); -	} - -	/* (non-Javadoc) -	 * @see at.gv.egovernment.moa.id.protocols.stork2.AttributeProvider#acquire(java.util.List, java.lang.String, at.gv.egovernment.moa.id.data.IAuthData) -	 */ -	@Override -	public IPersonalAttributeList acquire(List<PersonalAttribute> attributes, -			String spCountyCode, IAuthData authData) -			throws UnsupportedAttributeException, -			ExternalAttributeRequestRequiredException, MOAIDException { -		// TODO Auto-generated method stub -		return null; -	} - -	/* (non-Javadoc) -	 * @see at.gv.egovernment.moa.id.protocols.stork2.AttributeProvider#getSupportedAttributeNames() -	 */ -	@Override -	public List<String> getSupportedAttributeNames() throws MOAIDException { -		// TODO Auto-generated method stub -		return null; -	} - -} - | 
