diff options
9 files changed, 120 insertions, 57 deletions
| diff --git a/id/server/auth/src/main/webapp/WEB-INF/urlrewrite.xml b/id/server/auth/src/main/webapp/WEB-INF/urlrewrite.xml index 59d6d6cce..d6df363c5 100644 --- a/id/server/auth/src/main/webapp/WEB-INF/urlrewrite.xml +++ b/id/server/auth/src/main/webapp/WEB-INF/urlrewrite.xml @@ -68,6 +68,10 @@          <from>^/moa-id-auth/SendPEPSAuthnRequest$</from>          <to type="forward">/dispatcher?mod=id_stork2&action=AuthenticationRequest&%{query-string}</to>      </rule> +    <rule match-type="regex"> +        <from>^/moa-id-auth/RetrieveMandate$</from> +        <to type="forward">/dispatcher?mod=id_stork2&action=MandateRetrievalRequest&%{query-string}</to> +    </rule>      <rule match-type="regex"> diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/entrypoints/DispatcherServlet.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/entrypoints/DispatcherServlet.java index 3af8bcfe5..647c8bb39 100644 --- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/entrypoints/DispatcherServlet.java +++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/entrypoints/DispatcherServlet.java @@ -491,7 +491,7 @@ public class DispatcherServlet extends AuthServlet{  				}  			} catch (Throwable e) { -				Logger.info("An authentication error occous: " + e.getMessage());; +				Logger.info("An authentication error occured: " + e.getMessage());;  				// Try handle module specific, if not possible rethrow  				if (!info.generateErrorMessage(e, req, resp, protocolRequest)) {  					throw e; 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 57c68e94c..030d7c497 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 @@ -124,15 +124,18 @@ public class AttributeCollector implements IAction {          try {              // for each attribute still missing              for (PersonalAttribute currentAttribute : missingAttributes) { +                Logger.error("Checking missing attribute: " + currentAttribute.getName());                  // - check if we can find a suitable AttributeProvider Plugin                  for (AttributeProvider currentProvider : AttributeProviderFactory.getConfiguredPlugins(oaParam.getStorkAPs())) {                      try {                          // - hand over control to the suitable plugin +                        Logger.error("Going to acquire missing attribute: " + currentAttribute.getName() + " at provider: " + currentProvider.getClass().getName());                          IPersonalAttributeList aquiredAttributes = currentProvider.acquire(currentAttribute, moasession);                          // - add the aquired attribute to the container -                        for (PersonalAttribute current : aquiredAttributes) -                            container.getResponse().getPersonalAttributeList().add(current); + +                        try { for (PersonalAttribute current : aquiredAttributes) +                            container.getResponse().getPersonalAttributeList().add(current); } catch (NullPointerException ex) { Logger.error ("Nothing found");}                      } catch (UnsupportedAttributeException e) {                          // ok, try the next attributeprovider                      } catch (MOAIDException e) { @@ -154,6 +157,7 @@ public class AttributeCollector implements IAction {          } catch (ExternalAttributeRequestRequiredException e) {              // the attribute request is ongoing and requires an external service. +            Logger.error("EXTERNAL EXCEPTION CAUGHT");              try {                  // memorize the container again                  // - generate new key @@ -163,19 +167,19 @@ public class AttributeCollector implements IAction {                  AssertionStorage.getInstance().put(newArtifactId, container);                  // add container-key to redirect embedded within the return URL +                Logger.info("Performing redirect to gather attributes to: " + AuthConfigurationProvider.getInstance().getPublicURLPrefix());                  e.getAp().performRedirect(AuthConfigurationProvider.getInstance().getPublicURLPrefix() + "?" + ARTIFACT_ID + "=" + newArtifactId, container.getRequest().getCitizenCountryCode(), request, response, oaParam);              } catch (Exception e1) {                  // TODO should we return the response as is to the PEPS?                  Logger.error("Error putting incomplete Stork response into temporary storage", e); +                e1.printStackTrace();                  throw new MOAIDException("stork.11", null);              }              return "12345"; // TODO what to do here?          } - -      } 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 index 59376fef6..2ecae1288 100644 --- 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 @@ -52,4 +52,5 @@ public interface AttributeProvider {  	 */  	public IPersonalAttributeList parse(HttpServletRequest httpReq) throws UnsupportedAttributeException, 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 23edf69f9..953758dc3 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,59 +1,61 @@  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.   */  public class AttributeProviderFactory { -	/** -	 * Gets the available plugins. -	 *  -	 * @return the available plugins -	 */ -	public static List<String> getAvailablePlugins() { -		List<String> result = new ArrayList<String>(); -		result.add("StorkAttributeRequestProvider"); -		result.add("EHvdAttributeProvider"); - -		return result; -	} - -	/** -	 * Creates an AttributeProvider object for the given shortname. Returns -	 * {@code null} if there is no such provider available. -	 *  -	 * @param shortname -	 *            the simpleName for the providers class -	 * @return the attribute provider -	 */ -	public static AttributeProvider create(String shortname, String url) { -        	if (shortname.equals("StorkAttributeRequestProvider"))  { -			return new StorkAttributeRequestProvider(url); -		} else if(shortname.equals("EHvdAttributeProvider")) { -			return new EHvdAttributeProviderPlugin(url); -		}       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 the available plugins. +     * +     * @return the available plugins +     */ +    public static List<String> getAvailablePlugins() { +        List<String> result = new ArrayList<String>(); +        result.add("StorkAttributeRequestProvider"); +        result.add("EHvdAttributeProvider"); +        result.add("MISAttributeProvider"); + +        return result; +    } + +    /** +     * Creates an AttributeProvider object for the given shortname. Returns +     * {@code null} if there is no such provider available. +     * +     * @param shortname the simpleName for the providers class +     * @return the attribute provider +     */ +    public static AttributeProvider create(String shortname, String url) { +        if (shortname.equals("StorkAttributeRequestProvider")) { +            return new StorkAttributeRequestProvider(url); +        } else if (shortname.equals("EHvdAttributeProvider")) { +            return new EHvdAttributeProviderPlugin(url); +        } else if (shortname.equals("MISAttributeProvider")) { +            return new MISAttributeProvider(url); +        } 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; +    }  } diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/MISAttributeProvider.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/MISAttributeProvider.java index 7665bb239..8cdbfd37c 100644 --- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/MISAttributeProvider.java +++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/MISAttributeProvider.java @@ -3,6 +3,7 @@ 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.config.auth.OAAuthParameter; +import at.gv.egovernment.moa.logging.Logger;  import eu.stork.peps.auth.commons.IPersonalAttributeList;  import eu.stork.peps.auth.commons.PersonalAttribute; @@ -13,15 +14,34 @@ import javax.servlet.http.HttpServletResponse;   * Implements Attribute Provider for Mandates   */  public class MISAttributeProvider implements AttributeProvider { + +    String url = null; + +    public MISAttributeProvider(String url) { +        this.url = url; +    } +      public IPersonalAttributeList acquire(PersonalAttribute attributes, AuthenticationSession moasession) throws UnsupportedAttributeException, ExternalAttributeRequestRequiredException, MOAIDException { +        Logger.error("Entering MIS for attribute: " + attributes.getName()); + +        if (attributes.getName().equals("residencePermit")) { +            Logger.error("MIS EXCEPTION: " + attributes.getName()); +            throw new ExternalAttributeRequestRequiredException(this); +        } +          return null;  //      }      public void performRedirect(String url, String citizenCountyCode, HttpServletRequest req, HttpServletResponse resp, OAAuthParameter oaParam) throws MOAIDException { -        // +        Logger.error("Entering MIS redirect for attribute: " ); +      }      public IPersonalAttributeList parse(HttpServletRequest httpReq) throws UnsupportedAttributeException, MOAIDException {          return null;  //      } + +    public String getName() { +        return "MandateProvider"; +    }  } diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/MOASTORKRequest.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/MOASTORKRequest.java index 47a86174f..39a6907c1 100644 --- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/MOASTORKRequest.java +++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/MOASTORKRequest.java @@ -52,7 +52,7 @@ public class MOASTORKRequest implements IRequest {          return this.storkAttrQueryRequest;      } -    public String getOAURL() { +    public String getOAURL() {     // TODO CHECK IT          if (isAuthnRequest)              return storkAuthnRequest.getAssertionConsumerServiceURL();          else if (isAttrRequest) 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 new file mode 100644 index 000000000..bad711dbb --- /dev/null +++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/MandateRetrievalRequest.java @@ -0,0 +1,28 @@ +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.moduls.IAction; +import at.gv.egovernment.moa.id.moduls.IRequest; +import com.sun.xml.ws.security.trust.WSTrustConstants; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * Processes mandate data after authentication is done in AT + * @author bsuzic + */ +public class MandateRetrievalRequest implements IAction { +    public String processRequest(IRequest req, HttpServletRequest httpReq, HttpServletResponse httpResp, AuthenticationSession moasession) throws MOAIDException { +        return null;  // +    } + +    public boolean needAuthentication(IRequest req, HttpServletRequest httpReq, HttpServletResponse httpResp) { +        return true; +    } + +    public String getDefaultActionName() { +        return STORKProtocol.MANDATERETRIEVALREQUEST; +    } +} diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/STORKProtocol.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/STORKProtocol.java index e68b66510..3762a5101 100644 --- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/STORKProtocol.java +++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/stork2/STORKProtocol.java @@ -31,6 +31,7 @@ public class STORKProtocol implements IModulInfo, MOAIDAuthConstants {      public static final String AUTHENTICATIONREQUEST = "AuthenticationRequest";      public static final String ATTRIBUTE_COLLECTOR = "AttributeCollector"; +    public static final String MANDATERETRIEVALREQUEST = "MandateRetrievalRequest";      private static HashMap<String, IAction> actions = new HashMap<String, IAction>(); @@ -102,16 +103,19 @@ public class STORKProtocol implements IModulInfo, MOAIDAuthConstants {              authnRequest = authnEngine.validateSTORKAuthnRequest(decSamlToken);          } catch (STORKSAMLEngineException ex) {              Logger.error("Unable to validate Stork AuthenticationRequest: " + ex.getMessage()); +        }  catch (ClassCastException e) { +            Logger.error("Could not extract authenticaiton request");          } -        // check if a valid attr request is container +        // check if a valid attr request is containerd          try {              attrRequest = attrEngine.validateSTORKAttrQueryRequest(decSamlToken);          } catch (STORKSAMLEngineException ex) {              Logger.error("Unable to validate Stork AuthenticationRequest: " + ex.getMessage()); +        } catch (ClassCastException e) { +            Logger.error("Could not extract attribute request");          } -          // if there is no authn or attr request, raise error          if ((authnRequest == null) && (attrRequest == null)) {              Logger.error("There is no authentication or attribute request contained."); | 
