diff options
12 files changed, 225 insertions, 11 deletions
| diff --git a/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/Constants.java b/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/Constants.java index 54f7f8fa..15057600 100644 --- a/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/Constants.java +++ b/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/Constants.java @@ -33,6 +33,7 @@ public class Constants {    public static final String DATA_REQUESTED_LOA_COMPERISON = "req_requestedLoAComperision";    public static final String DATA_FULL_EIDAS_RESPONSE = "resp_fulleIDASResponse";    public static final String DATA_RESULT_MATCHING_BPK = "matching-result-bpk"; +  public static final String DATA_SIMPLE_EIDAS = "simple_eidas_data";    // templates for post-binding forwarding    public static final String TEMPLATE_POST_FORWARD_NAME = "eidas_node_forward.html"; diff --git a/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/ernp/DummyErnpClient.java b/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/ernp/DummyErnpClient.java index e514c808..22482638 100644 --- a/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/ernp/DummyErnpClient.java +++ b/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/ernp/DummyErnpClient.java @@ -62,5 +62,11 @@ public class DummyErnpClient implements IErnpClient {      //TODO    } +  @Override +  public boolean createNewEntry(SimpleEidasData simpleEidasData) { +    //TODO +    return false; +  } +  } diff --git a/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/ernp/IErnpClient.java b/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/ernp/IErnpClient.java index b9641c5c..cb499ca5 100644 --- a/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/ernp/IErnpClient.java +++ b/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/ernp/IErnpClient.java @@ -40,4 +40,6 @@ public interface IErnpClient {    List<RegisterResult> searchItSpecific(String taxNumber);    void update(RegisterResult registerResult, SimpleEidasData eidData); + +  boolean createNewEntry(SimpleEidasData simpleEidasData);  } diff --git a/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/CreateNewErnpEntryTask.java b/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/CreateNewErnpEntryTask.java index 6f7304c9..09af0e24 100644 --- a/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/CreateNewErnpEntryTask.java +++ b/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/CreateNewErnpEntryTask.java @@ -23,8 +23,12 @@  package at.asitplus.eidas.specific.modules.auth.eidas.v2.tasks; +import at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants; +import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.SimpleEidasData; +import at.asitplus.eidas.specific.modules.auth.eidas.v2.ernp.IErnpClient;  import at.gv.egiz.eaaf.core.api.idp.process.ExecutionContext;  import at.gv.egiz.eaaf.core.exceptions.TaskExecutionException; +import at.gv.egiz.eaaf.core.impl.idp.auth.data.AuthProcessDataWrapper;  import at.gv.egiz.eaaf.core.impl.idp.auth.modules.AbstractAuthServletTask;  import lombok.extern.slf4j.Slf4j;  import org.springframework.stereotype.Component; @@ -41,15 +45,34 @@ import javax.servlet.http.HttpServletResponse;  @Component("CreateNewErnbEntryTask")  public class CreateNewErnpEntryTask extends AbstractAuthServletTask { +  private final IErnpClient ernpClient; + +  /** +   * Constructor. +   * @param ernpClient ErnP client +   */ +  public CreateNewErnpEntryTask(IErnpClient ernpClient) { +    this.ernpClient = ernpClient; +  } +    @Override    public void execute(ExecutionContext executionContext, HttpServletRequest request, HttpServletResponse response)        throws TaskExecutionException {      try { -      //TODO +      final AuthProcessDataWrapper authProcessData = pendingReq.getSessionData(AuthProcessDataWrapper.class); +      SimpleEidasData simpleEidasData = authProcessData.getGenericDataFromSession(Constants.DATA_SIMPLE_EIDAS, +          SimpleEidasData.class); +      step9CreateNewErnpEntry(simpleEidasData);      } catch (final Exception e) {        log.error("Initial search FAILED.", e);        throw new TaskExecutionException(pendingReq, "Initial search FAILED.", e);      }    } +  private void step9CreateNewErnpEntry(SimpleEidasData simpleEidasData) { + +    //TODO can i get bpk from response? +    ernpClient.createNewEntry(simpleEidasData); +  } +  } diff --git a/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/GenerateGuiQueryAustrianResidenceTask.java b/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/GenerateGuiQueryAustrianResidenceTask.java new file mode 100644 index 00000000..a80b8550 --- /dev/null +++ b/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/GenerateGuiQueryAustrianResidenceTask.java @@ -0,0 +1,77 @@ +/* + * Copyright 2021 A-SIT Plus GmbH + * AT-specific eIDAS Connector has been developed in a cooperation between EGIZ, + * A-SIT Plus GmbH, A-SIT, and Graz University of Technology. + * + * Licensed under the EUPL, Version 1.2 or - as soon they will be approved by + * the European Commission - subsequent versions of the EUPL (the "License"); + * You may not use this work except in compliance with the License. + * You may obtain a copy of the License at: + * https://joinup.ec.europa.eu/news/understanding-eupl-v12 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * This product combines work with different licenses. See the "NOTICE" text + * file for details on the various modules and licenses. + * The "NOTICE" text file is part of the distribution. Any derivative works + * that you distribute must include a readable copy of the "NOTICE" text file. + */ + +package at.asitplus.eidas.specific.modules.auth.eidas.v2.tasks; + +import at.asitplus.eidas.specific.connector.MsEidasNodeConstants; +import at.asitplus.eidas.specific.connector.gui.StaticGuiBuilderConfiguration; +import at.gv.egiz.eaaf.core.api.gui.IGuiBuilderConfiguration; +import at.gv.egiz.eaaf.core.api.gui.ISpringMvcGuiFormBuilder; +import at.gv.egiz.eaaf.core.api.idp.IConfiguration; +import at.gv.egiz.eaaf.core.api.idp.process.ExecutionContext; +import at.gv.egiz.eaaf.core.exceptions.TaskExecutionException; +import at.gv.egiz.eaaf.core.impl.idp.auth.modules.AbstractAuthServletTask; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * Task that generates a GUI that queries whether the user has an addional eidas eID or an Austrian mobile phone + * signature. + * + * @author amarsalek + */ +@Slf4j +@Component("GenerateGuiQueryAustrianResidenceTask") +public class GenerateGuiQueryAustrianResidenceTask extends AbstractAuthServletTask { + +  @Autowired +  ISpringMvcGuiFormBuilder guiBuilder; +  @Autowired +  IConfiguration basicConfig; + +  @Override +  public void execute(ExecutionContext executionContext, HttpServletRequest request, HttpServletResponse response) +      throws TaskExecutionException { +    try { +      final IGuiBuilderConfiguration config = new StaticGuiBuilderConfiguration( +          basicConfig, +          pendingReq, +          basicConfig.getBasicConfiguration(//TODO +              MsEidasNodeConstants.PROP_CONFIG_WEBCONTENT_TEMPLATES_OTHER_LOGIN_METHOD_SELECTION, +              MsEidasNodeConstants.TEMPLATE_HTML_OTHERLOGINMETHODS), +          MsEidasNodeConstants.ENDPOINT_OTHERLOGINMETHODSELECTION, +          resourceLoader); + +      guiBuilder.build(request, response, config, "Other login methods selection form"); + +    } catch (final Exception e) { +      log.error("Initial search FAILED.", e); +      throw new TaskExecutionException(pendingReq, "Gui creation FAILED.", e); +    } +  } + +} diff --git a/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/GenerateMobilePhoneSignatureRequestTask.java b/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/GenerateMobilePhoneSignatureRequestTask.java index 7c154705..0f2fc8a3 100644 --- a/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/GenerateMobilePhoneSignatureRequestTask.java +++ b/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/GenerateMobilePhoneSignatureRequestTask.java @@ -46,6 +46,9 @@ public class GenerateMobilePhoneSignatureRequestTask extends AbstractAuthServlet    public void execute(ExecutionContext executionContext, HttpServletRequest request, HttpServletResponse response)        throws TaskExecutionException {      try { +      log.trace("Starting GenerateMobilePhoneSignatureRequestTask"); +      //step 15a +        //TODO      } catch (final Exception e) {        log.error("Initial search FAILED.", e); diff --git a/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/InitialSearchTask.java b/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/InitialSearchTask.java index ae89a4a0..34e258ca 100644 --- a/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/InitialSearchTask.java +++ b/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/InitialSearchTask.java @@ -69,6 +69,7 @@ public class InitialSearchTask extends AbstractAuthServletTask {    private final IErnpClient ernpClient;    private final IZmrClient zmrClient;    private ExecutionContext executionContext; +    /**     * Constructor.     * @param handlers List of countrySpecificSearchProcessors @@ -97,6 +98,7 @@ public class InitialSearchTask extends AbstractAuthServletTask {        String bpK = step2RegisterSearchWithPersonidentifier(eidData);        authProcessData.setGenericDataToSession(Constants.DATA_RESULT_MATCHING_BPK, bpK); +      authProcessData.setGenericDataToSession(Constants.DATA_SIMPLE_EIDAS, eidasResponse);      } catch (final Exception e) {        log.error("Initial search FAILED.", e);        throw new TaskExecutionException(pendingReq, "Initial search FAILED.", e); @@ -154,7 +156,7 @@ public class InitialSearchTask extends AbstractAuthServletTask {        }      }      if (foundHandler == null) { -      return step8RegisterSearchWithMds(result, eidData); +      return step8RegisterSearchWithMds(eidData);      } else {        return step6CountrySpecificSearch(foundHandler, result, eidData);      } @@ -169,7 +171,7 @@ public class InitialSearchTask extends AbstractAuthServletTask {      switch (countrySpecificDetailSearchResult.getResultCount()) {        case 0: -        return step8RegisterSearchWithMds(initialSearchResult, eidData); +        return step8RegisterSearchWithMds(eidData);        case 1:          return step7aKittProcess(initialSearchResult, countrySpecificDetailSearchResult, eidData);        default: @@ -202,8 +204,7 @@ public class InitialSearchTask extends AbstractAuthServletTask {      }    } -  private String step8RegisterSearchWithMds(MergedRegisterSearchResult initialSearchResult, -                                            SimpleEidasData eidData) { +  private String step8RegisterSearchWithMds(SimpleEidasData eidData) {      log.trace("Starting step8RegisterSearchWithMds");      List<RegisterResult> resultsZmr =          zmrClient.searchWithMds(eidData.getGivenName(), eidData.getFamilyName(), eidData.getDateOfBirth()); diff --git a/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/ReceiveGuiAustrianResidenceResponseTask.java b/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/ReceiveGuiAustrianResidenceResponseTask.java new file mode 100644 index 00000000..3bbb59d1 --- /dev/null +++ b/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/ReceiveGuiAustrianResidenceResponseTask.java @@ -0,0 +1,77 @@ +/* + * Copyright 2021 A-SIT Plus GmbH + * AT-specific eIDAS Connector has been developed in a cooperation between EGIZ, + * A-SIT Plus GmbH, A-SIT, and Graz University of Technology. + * + * Licensed under the EUPL, Version 1.2 or - as soon they will be approved by + * the European Commission - subsequent versions of the EUPL (the "License"); + * You may not use this work except in compliance with the License. + * You may obtain a copy of the License at: + * https://joinup.ec.europa.eu/news/understanding-eupl-v12 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * This product combines work with different licenses. See the "NOTICE" text + * file for details on the various modules and licenses. + * The "NOTICE" text file is part of the distribution. Any derivative works + * that you distribute must include a readable copy of the "NOTICE" text file. + */ + +package at.asitplus.eidas.specific.modules.auth.eidas.v2.tasks; + +import at.asitplus.eidas.specific.modules.auth.eidas.v2.dao.SelectedLoginMethod; +import at.gv.egiz.eaaf.core.api.data.EaafConstants; +import at.gv.egiz.eaaf.core.api.idp.process.ExecutionContext; +import at.gv.egiz.eaaf.core.exceptions.TaskExecutionException; +import at.gv.egiz.eaaf.core.impl.idp.auth.modules.AbstractAuthServletTask; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringEscapeUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Component; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.Enumeration; + +/** + * Task receives the response of GenerateGuiQueryAustrianResidenceTask and handles it. + * + * @author amarsalek + */ +@Slf4j +@Component("ReceiveGuiAustrianResidenceResponseTask") +public class ReceiveGuiAustrianResidenceResponseTask extends AbstractAuthServletTask { + +  final String loginMethod = "loginSelection"; + +  //TODO +  @Override +  public void execute(ExecutionContext executionContext, HttpServletRequest request, HttpServletResponse response) +      throws TaskExecutionException { +    try { +      log.trace("Starting ReceiveGuiAustrianResidenceResponseTask"); +      // set parameter execution context +      final Enumeration<String> reqParamNames = request.getParameterNames(); +      while (reqParamNames.hasMoreElements()) { +        final String paramName = reqParamNames.nextElement(); +        if (StringUtils.isNotEmpty(paramName) +            && !EaafConstants.PROCESS_ENGINE_PENDINGREQUESTID.equalsIgnoreCase(paramName) +            && loginMethod.equalsIgnoreCase(paramName)) { + +          String value = StringEscapeUtils.escapeHtml(request.getParameter(paramName)); +          SelectedLoginMethod selection = SelectedLoginMethod.valueOf(value); +          executionContext.put(loginMethod, selection); + +        } +      } +    } catch (final Exception e) { +      log.error("Parsing selected login method FAILED.", e); +      throw new TaskExecutionException(pendingReq, "Parsing selected login method FAILED.", e); +    } +  } + +} diff --git a/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/ReceiveGuiResponseTask.java b/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/ReceiveGuiResponseTask.java index fc51ce2d..fa787792 100644 --- a/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/ReceiveGuiResponseTask.java +++ b/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/ReceiveGuiResponseTask.java @@ -57,12 +57,12 @@ public class ReceiveGuiResponseTask extends AbstractAuthServletTask {        while (reqParamNames.hasMoreElements()) {          final String paramName = reqParamNames.nextElement();          if (StringUtils.isNotEmpty(paramName) -            && !EaafConstants.PROCESS_ENGINE_PENDINGREQUESTID.equalsIgnoreCase(paramName)) { -          if (loginMethod.equalsIgnoreCase(paramName)) { -            String value = StringEscapeUtils.escapeHtml(request.getParameter(paramName)); -            SelectedLoginMethod selection = SelectedLoginMethod.valueOf(value); -            executionContext.put(loginMethod, selection); -          } +            && !EaafConstants.PROCESS_ENGINE_PENDINGREQUESTID.equalsIgnoreCase(paramName) +            && loginMethod.equalsIgnoreCase(paramName)) { +          String value = StringEscapeUtils.escapeHtml(request.getParameter(paramName)); +          SelectedLoginMethod selection = SelectedLoginMethod.valueOf(value); +          executionContext.put(loginMethod, selection); +          }        }      } catch (final Exception e) { diff --git a/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/ReceiveMobilePhoneSignatureResponseTask.java b/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/ReceiveMobilePhoneSignatureResponseTask.java index 95eeca4c..4329fc2e 100644 --- a/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/ReceiveMobilePhoneSignatureResponseTask.java +++ b/eidas_modules/authmodule-eIDAS-v2/src/main/java/at/asitplus/eidas/specific/modules/auth/eidas/v2/tasks/ReceiveMobilePhoneSignatureResponseTask.java @@ -45,6 +45,7 @@ public class ReceiveMobilePhoneSignatureResponseTask extends AbstractAuthServlet    public void execute(ExecutionContext executionContext, HttpServletRequest request, HttpServletResponse response)        throws TaskExecutionException {      try { +      log.trace("Starting ReceiveMobilePhoneSignatureResponseTask");        //TODO      } catch (final Exception e) {        log.error("Initial search FAILED.", e); diff --git a/eidas_modules/authmodule-eIDAS-v2/src/main/resources/eIDAS.Authentication.process.xml b/eidas_modules/authmodule-eIDAS-v2/src/main/resources/eIDAS.Authentication.process.xml index 5299093e..992ad766 100644 --- a/eidas_modules/authmodule-eIDAS-v2/src/main/resources/eIDAS.Authentication.process.xml +++ b/eidas_modules/authmodule-eIDAS-v2/src/main/resources/eIDAS.Authentication.process.xml @@ -24,6 +24,10 @@    <pd:Task id="receiveMobilePhoneSignatureResponseTask"             class="ReceiveMobilePhoneSignatureResponseTask" /> +  <pd:Task id="generateGuiQueryAustrianResidenceTask" +           class="GenerateGuiQueryAustrianResidenceTask" /> +  <pd:Task id="receiveGuiAustrianResidenceResponseTask" +           class="ReceiveGuiAustrianResidenceResponseTask" />    <pd:StartEvent id="start" /> @@ -51,7 +55,19 @@    <pd:Transition  from="receiveMobilePhoneSignatureResponseTask"                    to="createNewErnpEntryTask" />    <pd:Transition  from="receiveGuiResponseTask" +                  to="generateGuiQueryAustrianResidenceTask" /> + +  <pd:Transition  from="generateGuiQueryAustrianResidenceTask" +                  to="receiveGuiAustrianResidenceResponseTask" /> + +  <pd:Transition  from="receiveGuiAustrianResidenceResponseTask" +                  to="generateIdentityLink" +                  conditionExpression="ctx['TASK_TODO']"/> + +  <pd:Transition  from="receiveGuiAustrianResidenceResponseTask"                    to="createNewErnpEntryTask" /> + +    <pd:Transition  from="createNewErnpEntryTask"                    to="generateIdentityLink" />    <!-- TODO end--> diff --git a/eidas_modules/authmodule-eIDAS-v2/src/main/resources/eidas_v2_auth.beans.xml b/eidas_modules/authmodule-eIDAS-v2/src/main/resources/eidas_v2_auth.beans.xml index 4c3a47fd..32e3241c 100644 --- a/eidas_modules/authmodule-eIDAS-v2/src/main/resources/eidas_v2_auth.beans.xml +++ b/eidas_modules/authmodule-eIDAS-v2/src/main/resources/eidas_v2_auth.beans.xml @@ -125,4 +125,11 @@          class="at.asitplus.eidas.specific.modules.auth.eidas.v2.tasks.ReceiveMobilePhoneSignatureResponseTask"          scope="prototype" /> +  <bean id="GenerateGuiQueryAustrianResidenceTask" +        class="at.asitplus.eidas.specific.modules.auth.eidas.v2.tasks.GenerateGuiQueryAustrianResidenceTask" +        scope="prototype" /> + +  <bean id="ReceiveGuiAustrianResidenceResponseTask" +        class="at.asitplus.eidas.specific.modules.auth.eidas.v2.tasks.ReceiveGuiAustrianResidenceResponseTask" +        scope="prototype" />  </beans>
\ No newline at end of file | 
