diff options
9 files changed, 75 insertions, 37 deletions
| diff --git a/id/ConfigWebTool/src/main/java/at/gv/egovernment/moa/id/configuration/validation/oa/OASTORKConfigValidation.java b/id/ConfigWebTool/src/main/java/at/gv/egovernment/moa/id/configuration/validation/oa/OASTORKConfigValidation.java index 25e0d751c..067e85aa6 100644 --- a/id/ConfigWebTool/src/main/java/at/gv/egovernment/moa/id/configuration/validation/oa/OASTORKConfigValidation.java +++ b/id/ConfigWebTool/src/main/java/at/gv/egovernment/moa/id/configuration/validation/oa/OASTORKConfigValidation.java @@ -58,6 +58,10 @@ public class OASTORKConfigValidation {  				log.info("AttributeProviderPlugin Name is empty.");  				errors.add(LanguageHelper.getErrorString("validation.stork.ap.name.valid"));  			} +			if (MiscUtil.isEmpty(current.getAttributes()) || !current.getAttributes().matches("[a-zA-Z]+(, ?[a-zA-Z]+)*")) { +				log.info("AttributeProviderPlugin attributes are empty or do not match csv format."); +				errors.add(LanguageHelper.getErrorString("validation.stork.ap.attributes.valid")); +			}  		}  		return errors; diff --git a/id/ConfigWebTool/src/main/resources/applicationResources.properties b/id/ConfigWebTool/src/main/resources/applicationResources.properties index 5859ce477..ef52892b3 100644 --- a/id/ConfigWebTool/src/main/resources/applicationResources.properties +++ b/id/ConfigWebTool/src/main/resources/applicationResources.properties @@ -422,6 +422,7 @@ validation.stork.qaa.outofrange=G\u00FCltige QAA Werte sind 1, 2, 3, und 4  validation.stork.attributes.empty=Es muss mindestens ein Attribut definiert sein  validation.stork.ap.url.valid=Ung\u00FCltige AttributProvider Url  validation.stork.ap.name.valid=Ung\u00FCltiger AttributProvider Name +validation.stork.ap.attributes.valid=Ung\u00FCltige Attributconfiguration f\u00FCr ein Attribut Provider Plugin. Feld darf nicht leer sein und ist als csv anzugeben.  validation.pvp2.metadataurl.empty=Keine Metadaten URL angegeben.  validation.pvp2.metadataurl.valid=Die Metadaten URL wei\u00DFt kein g\u00FCltiges URL Format auf. diff --git a/id/ConfigWebTool/src/main/webapp/js/common.js b/id/ConfigWebTool/src/main/webapp/js/common.js index 7e42eaf30..a14a287db 100644 --- a/id/ConfigWebTool/src/main/webapp/js/common.js +++ b/id/ConfigWebTool/src/main/webapp/js/common.js @@ -61,21 +61,21 @@ function oaSSOService() {  	}  }  function oaStork() { -	if ($('#OAuseSTORKLogon').attr('checked') == 'checked') { +	if ($('#OAuseSTORKLogon').is(':checked')) {  		$('#stork_block').css('display', "block");  	} else {  		$('#stork_block').css('display', "none");  	}  }  function oaVIDP() { -	if ($('#oa_vidp_area').css('display') == "block") { -		$('#oa_vidp_area').css('display', "none"); -		$('#button_vidp_show').css('display', "block"); -		$('#button_vidp_hidden').css('display', "none"); -	} else { +	if ($('#oa_vidp_area').css('display') == "none" || $('#OAuseVidp').is(':checked')) {  		$('#oa_vidp_area').css('display', "block");  		$('#button_vidp_show').css('display', "none");  		$('#button_vidp_hidden').css('display', "block"); +	} else { +		$('#oa_vidp_area').css('display', "none"); +		$('#button_vidp_show').css('display', "block"); +		$('#button_vidp_hidden').css('display', "none");  	}  }  function oaSAML1() { @@ -218,9 +218,12 @@ function oaOnLoad() {      oaStorkService();  	oaSSOService();  	oaLegacyService(); +	oaStork();  	AdminTarget();  	oaTargetSubSector(); +	oaVIDP(); +	  	$(".colorfield").each(  		function() {  			$(this).ColorPicker({ diff --git a/id/ConfigWebTool/src/main/webapp/jsp/editOAGeneral.jsp b/id/ConfigWebTool/src/main/webapp/jsp/editOAGeneral.jsp index cf8626ae3..78ad500ef 100644 --- a/id/ConfigWebTool/src/main/webapp/jsp/editOAGeneral.jsp +++ b/id/ConfigWebTool/src/main/webapp/jsp/editOAGeneral.jsp @@ -528,7 +528,7 @@  						</div> -						<div id="oa_vidp_area" class="oa_protocol_area hidden"> +						<div id="oa_vidp_area" class="oa_protocol_area">  							<h4><%=LanguageHelper.getGUIString("webpages.oaconfig.stork.header", request) %></h4>  							<p><s:checkbox name="storkOA.vidpEnabled"  @@ -539,10 +539,11 @@  								id="OAuseVidp" /></p>  							<h5><%=LanguageHelper.getGUIString("webpages.oaconfig.vidp.ap.list", request) %></h5>  							<table id="stork_aplist"> -								<tr><th>AP Plugin</th><th>URL</th> +								<tr><th>AP Plugin</th><th>URL</th><th>Attribute (CSV)</th></tr>  								<s:iterator value="storkOA.attributeProviderPlugins" status="stat">  								  <tr><td><s:select name="storkOA.attributeProviderPlugins[%{#stat.index}].name" value="%{name}" list="%{storkOA.availableAttributeProviderPlugins}"/></td> -								      <td><s:textfield name="storkOA.attributeProviderPlugins[%{#stat.index}].url" value="%{url}" cssClass="textfield"/></td> +								      <td><s:textfield name="storkOA.attributeProviderPlugins[%{#stat.index}].url" value="%{url}" cssClass="textfield_mail"/></td> +								      <td><s:textfield name="storkOA.attributeProviderPlugins[%{#stat.index}].attributes" value="%{attributes}" cssClass="textfield_mail"/></td>  								      <td><input type="button" value="<%=LanguageHelper.getGUIString("webpages.oaconfig.vidp.ap.remove", request) %>" onclick='this.parentNode.parentNode.parentNode.removeChild(this.parentNode.parentNode);'/></td></tr>  								</s:iterator>  							</table> 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 0317322ee..f660e1b33 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 @@ -119,6 +119,7 @@ public class AttributeCollector implements IAction {  				 */  				IPersonalAttributeList aquiredAttributes = new PersonalAttributeList();  				currentAttribute.setStatus("notAvailable"); +				aquiredAttributes.add((PersonalAttribute) currentAttribute.clone());  				addOrUpdateAll(container.getResponse().getPersonalAttributeList(), aquiredAttributes);              	// - check if we can find a suitable AttributeProvider Plugin @@ -252,11 +253,19 @@ public class AttributeCollector implements IAction {       *       * @param target the target       * @param source the source +     * @throws MOAIDException        */ -	private void addOrUpdateAll(IPersonalAttributeList target, IPersonalAttributeList source) { +	private void addOrUpdateAll(IPersonalAttributeList target, IPersonalAttributeList source) throws MOAIDException {  		for (PersonalAttribute current : source) {  			// check if we need to update the current pa  			if (target.containsKey(current.getName())) { +				PersonalAttribute existing = target.get(current.getName()); +				if(!(existing.isEmptyValue() && existing.isEmptyComplexValue())) +					if(!(existing.getValue().equals(current.getValue()) || existing.getComplexValue().equals(current.getComplexValue()))) { +		                Logger.error("Attribute Value does not match the value from first authentication!"); +		                throw new MOAIDException("stork.14", null); +					} +  				target.get(current.getName()).setStatus(current.getStatus());  				target.get(current.getName()).setValue(current.getValue());  				target.get(current.getName()).setComplexValue(current.getComplexValue()); 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 538e59401..dbeaf94e9 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,10 +1,10 @@  package at.gv.egovernment.moa.id.protocols.stork2; -import at.gv.egovernment.moa.id.commons.db.dao.config.AttributeProviderPlugin; -  import java.util.ArrayList;  import java.util.List; +import at.gv.egovernment.moa.id.commons.db.dao.config.AttributeProviderPlugin; +  /**   * A factory for creating AttributeProvider objects.   */ @@ -34,9 +34,9 @@ public class AttributeProviderFactory {  	 *            the simpleName for the providers class  	 * @return the attribute provider  	 */ -	public static AttributeProvider create(String shortname, String url) { +	public static AttributeProvider create(String shortname, String url, String attributes) {          	if (shortname.equals("StorkAttributeRequestProvider"))  { -			return new StorkAttributeRequestProvider(url); +			return new StorkAttributeRequestProvider(url, attributes);  		} else if(shortname.equals("EHvdAttributeProvider")) {  			return new EHvdAttributeProviderPlugin(url);  		}  else if(shortname.equals("SignedDocAttributeRequestProvider")) { @@ -44,23 +44,25 @@ public class AttributeProviderFactory {          }  else if (shortname.equals("MISAttributeProvider")) {                  return new MISAttributeProvider(url);          }    else { +			return new EHvdAttributeProviderPlugin(url, attributes); +		}       else {  			return null;  		}  	} -    /** -     * Gets fresh instances of the configured plugins. -     * -     * @param configuredAPs the configured a ps -     * @return the configured plugins -     */ -    public static List<AttributeProvider> getConfiguredPlugins( -            List<AttributeProviderPlugin> configuredAPs) { - -        List<AttributeProvider> result = new ArrayList<AttributeProvider>(); -        for (AttributeProviderPlugin current : configuredAPs) -            result.add(create(current.getName(), current.getUrl())); - -        return result; -    } +	/** +	 * Gets fresh instances of the configured plugins. +	 * +	 * @param configuredAPs the configured a ps +	 * @return the configured plugins +	 */ +	public static List<AttributeProvider> getConfiguredPlugins( +			List<AttributeProviderPlugin> configuredAPs) { +		 +		List<AttributeProvider> result = new ArrayList<AttributeProvider>(); +		for(AttributeProviderPlugin current : configuredAPs) +			result.add(create(current.getName(), current.getUrl(), current.getAttributes())); +		 +		return result; +	}  } 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 index d387bfcea..a36855d33 100644 --- 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 @@ -44,25 +44,31 @@ 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) { +	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 attributes, AuthenticationSession moasession) +	@Override +	public IPersonalAttributeList acquire(PersonalAttribute attribute, AuthenticationSession moasession)  			throws UnsupportedAttributeException,  			ExternalAttributeRequestRequiredException, MOAIDException {  		// break when we cannot handle the requested attribute -		if(!attributes.getName().equals("isHealthCareProfessional")) +		if(!attributes.contains(attribute.getName()))  			throw new UnsupportedAttributeException();  		try { @@ -219,7 +225,8 @@ public class EHvdAttributeProviderPlugin implements AttributeProvider {  	/* (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, String citizenCountyCode, +	@Override +	public void performRedirect(String url, String spCountyCode,  			HttpServletRequest req, HttpServletResponse resp,  			OAAuthParameter oaParam) throws MOAIDException {  		// there is no redirect required @@ -228,6 +235,7 @@ public class EHvdAttributeProviderPlugin implements AttributeProvider {  	/* (non-Javadoc)  	 * @see at.gv.egovernment.moa.id.protocols.stork2.AttributeProvider#parse(javax.servlet.http.HttpServletRequest)  	 */ +	@Override  	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 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 index 797695a00..d8becaaf7 100644 --- 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 @@ -34,14 +34,19 @@ public class StorkAttributeRequestProvider implements AttributeProvider {  	/** The destination. */  	private String destination; -	 + +	/** The attributes. */ +	private String attributes; +  	/**  	 * Instantiates a new stork attribute request provider.  	 *  	 * @param apUrl the AP location +	 * @param supportedAttributes the supported attributes as csv  	 */ -	public StorkAttributeRequestProvider(String apUrl) { +	public StorkAttributeRequestProvider(String apUrl, String supportedAttributes) {  		destination = apUrl; +		attributes = supportedAttributes;  	}  	/* (non-Javadoc) @@ -49,6 +54,10 @@ public class StorkAttributeRequestProvider implements AttributeProvider {  	 */  	public IPersonalAttributeList acquire(PersonalAttribute attribute, AuthenticationSession moasession)  			throws UnsupportedAttributeException, ExternalAttributeRequestRequiredException { + +		if (!attributes.contains(attribute.getName())) +			throw new UnsupportedAttributeException(); +  		requestedAttributes = new PersonalAttributeList(1);  		requestedAttributes.add(attribute);  		throw new ExternalAttributeRequestRequiredException(this); diff --git a/id/server/moa-id-commons/src/main/resources/config/moaid_config_2.0.xsd b/id/server/moa-id-commons/src/main/resources/config/moaid_config_2.0.xsd index b2c9eb58c..b7e8f6ff3 100644 --- a/id/server/moa-id-commons/src/main/resources/config/moaid_config_2.0.xsd +++ b/id/server/moa-id-commons/src/main/resources/config/moaid_config_2.0.xsd @@ -959,8 +959,9 @@      		<xsd:sequence>      			<xsd:element name="name" type="xsd:string"></xsd:element>      			<xsd:element name="url" type="xsd:anyURI"></xsd:element> - 		</xsd:sequence> -	</xsd:complexType> +    			<xsd:element name="attributes" type="xsd:string"></xsd:element> +    		</xsd:sequence> +    	</xsd:complexType>  	<xsd:element name="AttributeProviders" type="AttributeProviderPlugin"></xsd:element>  	<xsd:element name="Attributes" type="StorkAttribute"/> | 
