diff options
| author | Thomas <> | 2022-03-08 13:41:31 +0100 | 
|---|---|---|
| committer | Thomas <> | 2022-03-08 13:41:31 +0100 | 
| commit | 300bd1b44f521a2b33c259be1f8d21eba58c1a31 (patch) | |
| tree | e79350ab707ba404cd7324da23e8f893d683b697 /connector/src | |
| parent | 3bf2bf567fd0cc990bba9ad600f0c9c93c3ece37 (diff) | |
| download | National_eIDAS_Gateway-300bd1b44f521a2b33c259be1f8d21eba58c1a31.tar.gz National_eIDAS_Gateway-300bd1b44f521a2b33c259be1f8d21eba58c1a31.tar.bz2 National_eIDAS_Gateway-300bd1b44f521a2b33c259be1f8d21eba58c1a31.zip | |
refactor(core): split 'ms-connector' WebApp into 'core' and 'ms-connector' to reuse some code for 'ms-proxy' WebApp
Diffstat (limited to 'connector/src')
48 files changed, 56 insertions, 2953 deletions
| diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/MsSpecificEidasNodeSpringResourceProvider.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/MsSpecificEidasNodeSpringResourceProvider.java index 40ed283b..45e5c7d4 100644 --- a/connector/src/main/java/at/asitplus/eidas/specific/connector/MsSpecificEidasNodeSpringResourceProvider.java +++ b/connector/src/main/java/at/asitplus/eidas/specific/connector/MsSpecificEidasNodeSpringResourceProvider.java @@ -33,14 +33,12 @@ public class MsSpecificEidasNodeSpringResourceProvider implements SpringResource    @Override    public Resource[] getResourcesToLoad() {      final ClassPathResource generic = -        new ClassPathResource("/applicationContext.xml", MsSpecificEidasNodeSpringResourceProvider.class); -     +        new ClassPathResource("/applicationContext.xml", MsSpecificEidasNodeSpringResourceProvider.class);         final ClassPathResource msEidasNode = new ClassPathResource(          "/specific_eIDAS_connector.beans.xml", MsSpecificEidasNodeSpringResourceProvider.class); +         +    return new Resource[] { generic, msEidasNode}; -    final ClassPathResource msEidasNodeStorage = new ClassPathResource( -        "/specific_eIDAS_connector.storage.beans.xml", MsSpecificEidasNodeSpringResourceProvider.class); -    return new Resource[] { generic, msEidasNode, msEidasNodeStorage };    }    @Override @@ -50,7 +48,7 @@ public class MsSpecificEidasNodeSpringResourceProvider implements SpringResource    @Override    public String getName() { -    return "MS-specific eIDAS Node SpringResourceProvider"; +    return "MS-specific eIDAS-Connector SpringResourceProvider";    }  } diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/SpringContextCloseHandler.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/SpringContextCloseHandler.java deleted file mode 100644 index e884b5c6..00000000 --- a/connector/src/main/java/at/asitplus/eidas/specific/connector/SpringContextCloseHandler.java +++ /dev/null @@ -1,170 +0,0 @@ -package at.asitplus.eidas.specific.connector; - -import java.util.Iterator; -import java.util.Map; -import java.util.Map.Entry; - -import org.slf4j.Logger; -import org.springframework.beans.BeansException; -import org.springframework.beans.factory.config.BeanPostProcessor; -import org.springframework.context.ApplicationContext; -import org.springframework.context.ApplicationContextAware; -import org.springframework.context.ApplicationListener; -import org.springframework.context.event.ContextClosedEvent; -import org.springframework.context.event.EventListener; -import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; -import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; - -import at.gv.egiz.components.spring.api.IDestroyableObject; -import eu.eidas.auth.cache.IgniteInstanceInitializerSpecificCommunication; - -/** - * SpringContext CloseHandler. - * - * @author tlenz - * - */ - -public class SpringContextCloseHandler -    implements ApplicationListener<ContextClosedEvent>, ApplicationContextAware, BeanPostProcessor { - -  private static final Logger log = -      org.slf4j.LoggerFactory.getLogger(SpringContextCloseHandler.class); - -  private ApplicationContext context; - -  /* -   * (non-Javadoc) -   * -   * @see org.springframework.context.ApplicationListener#onApplicationEvent(org. -   * springframework.context. ApplicationEvent) -   */ -  @Override -  @EventListener -  public void onApplicationEvent(final ContextClosedEvent arg0) { -    log.info("MS-specific eIDAS-Node shutdown process started ..."); - -    try { -      log.debug("CleanUp objects with implements the IDestroyable interface ... "); -      final Map<String, IDestroyableObject> objectsToDestroy = -          context.getBeansOfType(IDestroyableObject.class); -      internalIDestroyableObject(objectsToDestroy); -      log.info("Object cleanUp complete"); - -      log.debug("Stopping Spring Thread-Pools ... "); -      // shut-down task schedulers -      final Map<String, ThreadPoolTaskScheduler> schedulers = -          context.getBeansOfType(ThreadPoolTaskScheduler.class); -      internalThreadPoolTaskScheduler(schedulers); - -      // shut-down task executors -      final Map<String, ThreadPoolTaskExecutor> executers = -          context.getBeansOfType(ThreadPoolTaskExecutor.class); -      internalThreadPoolTaskExecutor(executers); -      log.debug("Spring Thread-Pools stopped"); -       -       -      //clean-up eIDAS node -      Map<String, IgniteInstanceInitializerSpecificCommunication> nodeIgnite =  -          context.getBeansOfType(IgniteInstanceInitializerSpecificCommunication.class); -      log.info("Find #{} Apache Ignite instances from eIDAS Ref. impl.", nodeIgnite.size()); -      for (Entry<String, IgniteInstanceInitializerSpecificCommunication> el : nodeIgnite.entrySet()) { -        if (el.getValue().getInstance() != null) { -          el.getValue().getInstance().close(); -          el.getValue().destroyInstance(); -          log.debug("Shutdown Apache-Ignite: {}", el.getKey()); -           -        }         -      } -             -      log.info("MS-specific eIDAS-Node shutdown process finished"); - -    } catch (final Exception e) { -      log.warn("MS-specific eIDAS-Node shutdown process has an error.", e); - -    } - -  } - -  /* -   * (non-Javadoc) -   * -   * @see org.springframework.beans.factory.config.BeanPostProcessor# -   * postProcessAfterInitialization(java. lang.Object, java.lang.String) -   */ -  @Override -  public Object postProcessAfterInitialization(final Object arg0, final String arg1) -      throws BeansException { -    if (arg0 instanceof ThreadPoolTaskScheduler) { -      ((ThreadPoolTaskScheduler) arg0).setWaitForTasksToCompleteOnShutdown(true); -    } -    if (arg0 instanceof ThreadPoolTaskExecutor) { -      ((ThreadPoolTaskExecutor) arg0).setWaitForTasksToCompleteOnShutdown(true); -    } -    return arg0; - -  } - -  /* -   * (non-Javadoc) -   * -   * @see org.springframework.beans.factory.config.BeanPostProcessor# -   * postProcessBeforeInitialization(java .lang.Object, java.lang.String) -   */ -  @Override -  public Object postProcessBeforeInitialization(final Object arg0, final String arg1) -      throws BeansException { -    return arg0; - -  } - -  /* -   * (non-Javadoc) -   * -   * @see -   * org.springframework.context.ApplicationContextAware#setApplicationContext(org -   * .springframework. context.ApplicationContext) -   */ -  @Override -  public void setApplicationContext(final ApplicationContext arg0) throws BeansException { -    this.context = arg0; - -  } - -  private void internalThreadPoolTaskExecutor(final Map<String, ThreadPoolTaskExecutor> executers) { -    for (final ThreadPoolTaskExecutor executor : executers.values()) { -      executor.shutdown(); -      log.debug("Executer {} with active {} work has killed", executor.getThreadNamePrefix(), -          executor.getActiveCount()); - -    } - -  } - -  // Not required at the moment -  private void internalThreadPoolTaskScheduler( -      final Map<String, ThreadPoolTaskScheduler> schedulers) { -    log.trace("Stopping #{} task-schedulers", schedulers.size()); -     -  } - -  private void internalIDestroyableObject(final Map<String, IDestroyableObject> objectsToDestroy) { -    if (objectsToDestroy != null) { -      final Iterator<Entry<String, IDestroyableObject>> interator = -          objectsToDestroy.entrySet().iterator(); -      while (interator.hasNext()) { -        final Entry<String, IDestroyableObject> object = interator.next(); -        try { -          object.getValue().fullyDestroy(); -          log.debug("Object with ID: {} is destroyed", object.getKey()); - -        } catch (final Exception e) { -          log.warn("Destroing object with ID: {} FAILED!", object.getKey(), null, e); - -        } -      } -    } - -  } - -} diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/attributes/AuthBlockAttributeBuilder.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/attributes/AuthBlockAttributeBuilder.java index 1833f377..17eb0704 100644 --- a/connector/src/main/java/at/asitplus/eidas/specific/connector/attributes/AuthBlockAttributeBuilder.java +++ b/connector/src/main/java/at/asitplus/eidas/specific/connector/attributes/AuthBlockAttributeBuilder.java @@ -27,7 +27,7 @@ import java.util.Base64;  import org.apache.commons.lang3.StringUtils; -import at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants; +import at.asitplus.eidas.specific.core.MsEidasNodeConstants;  import at.gv.egiz.eaaf.core.api.idp.IAttributeGenerator;  import at.gv.egiz.eaaf.core.api.idp.IAuthData;  import at.gv.egiz.eaaf.core.api.idp.IPvpAttributeBuilder; @@ -49,7 +49,7 @@ public class AuthBlockAttributeBuilder implements IPvpAttributeBuilder {    public <ATT> ATT build(final ISpConfiguration oaParam, final IAuthData authData,                           final IAttributeGenerator<ATT> g) throws AttributeBuilderException { -    String authBlock = authData.getGenericData(Constants.SZR_AUTHBLOCK, String.class); +    String authBlock = authData.getGenericData(MsEidasNodeConstants.AUTH_DATA_SZR_AUTHBLOCK, String.class);      if (StringUtils.isNotEmpty(authBlock)) {        return g.buildStringAttribute(EID_AUTHBLOCK_SIGNED_FRIENDLY_NAME, EID_AUTHBLOCK_SIGNED_NAME,             Base64.getEncoder().encodeToString(authBlock.getBytes(StandardCharsets.UTF_8))); diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/attributes/EidasBindAttributeBuilder.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/attributes/EidasBindAttributeBuilder.java index a4fe8c6c..18eb74f8 100644 --- a/connector/src/main/java/at/asitplus/eidas/specific/connector/attributes/EidasBindAttributeBuilder.java +++ b/connector/src/main/java/at/asitplus/eidas/specific/connector/attributes/EidasBindAttributeBuilder.java @@ -19,7 +19,12 @@  package at.asitplus.eidas.specific.connector.attributes; -import at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants; +import static at.gv.egiz.eaaf.core.api.data.ExtendedPvpAttributeDefinitions.EID_EIDBIND_FRIENDLY_NAME; +import static at.gv.egiz.eaaf.core.api.data.ExtendedPvpAttributeDefinitions.EID_EIDBIND_NAME; + +import org.apache.commons.lang3.StringUtils; + +import at.asitplus.eidas.specific.core.MsEidasNodeConstants;  import at.gv.egiz.eaaf.core.api.idp.IAttributeGenerator;  import at.gv.egiz.eaaf.core.api.idp.IAuthData;  import at.gv.egiz.eaaf.core.api.idp.IPvpAttributeBuilder; @@ -27,10 +32,6 @@ import at.gv.egiz.eaaf.core.api.idp.ISpConfiguration;  import at.gv.egiz.eaaf.core.exceptions.AttributeBuilderException;  import at.gv.egiz.eaaf.core.exceptions.UnavailableAttributeException;  import at.gv.egiz.eaaf.core.impl.idp.builder.attributes.PvpMetadata; -import org.apache.commons.lang3.StringUtils; - -import static at.gv.egiz.eaaf.core.api.data.ExtendedPvpAttributeDefinitions.EID_EIDBIND_FRIENDLY_NAME; -import static at.gv.egiz.eaaf.core.api.data.ExtendedPvpAttributeDefinitions.EID_EIDBIND_NAME;  @PvpMetadata  public class EidasBindAttributeBuilder implements IPvpAttributeBuilder { @@ -45,7 +46,7 @@ public class EidasBindAttributeBuilder implements IPvpAttributeBuilder {    public <ATT> ATT build(final ISpConfiguration oaParam, final IAuthData authData,                           final IAttributeGenerator<ATT> g) throws AttributeBuilderException { -    String eidasBind = authData.getGenericData(Constants.EIDAS_BIND, String.class); +    String eidasBind = authData.getGenericData(MsEidasNodeConstants.AUTH_DATA_EIDAS_BIND, String.class);      if (StringUtils.isNotEmpty(eidasBind)) {        return g.buildStringAttribute(EID_EIDBIND_FRIENDLY_NAME, EID_EIDBIND_NAME, eidasBind); diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/auth/AuthenticationManager.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/auth/AuthenticationManager.java deleted file mode 100644 index abda468d..00000000 --- a/connector/src/main/java/at/asitplus/eidas/specific/connector/auth/AuthenticationManager.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright 2018 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.connector.auth; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Service; - -import at.gv.egiz.eaaf.core.api.IRequest; -import at.gv.egiz.eaaf.core.api.idp.process.ExecutionContext; -import at.gv.egiz.eaaf.core.api.idp.slo.ISloInformationContainer; -import at.gv.egiz.eaaf.core.exceptions.EaafException; -import at.gv.egiz.eaaf.core.impl.idp.auth.AbstractAuthenticationManager; -import at.gv.egiz.eaaf.core.impl.idp.controller.protocols.RequestImpl; - -@Service("AuthenticationManager") -public class AuthenticationManager extends AbstractAuthenticationManager { -  private static final Logger log = LoggerFactory.getLogger(AuthenticationManager.class); - -  @Override -  public ISloInformationContainer performSingleLogOut(HttpServletRequest httpReq, -      HttpServletResponse httpResp, -      IRequest pendingReq, String internalSsoId) throws EaafException { -    throw new RuntimeException("Single LogOut is NOT supported by this implementation"); - -  } - -  @Override -  protected void populateExecutionContext(ExecutionContext executionContext, -      RequestImpl pendingReq, HttpServletRequest httpReq) -      throws EaafException { -    log.trace("No implementation-specific population of execution-context required ... "); - -  } - -} diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/builder/AuthenticationDataBuilder.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/builder/AuthenticationDataBuilder.java deleted file mode 100644 index 05704de9..00000000 --- a/connector/src/main/java/at/asitplus/eidas/specific/connector/builder/AuthenticationDataBuilder.java +++ /dev/null @@ -1,257 +0,0 @@ -/* - * Copyright 2018 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.connector.builder; - -import java.util.Date; -import java.util.Optional; -import java.util.Set; -import java.util.stream.Collectors; - -import org.springframework.stereotype.Service; - -import com.google.common.collect.Streams; - -import at.asitplus.eidas.specific.connector.MsEidasNodeConstants; -import at.asitplus.eidas.specific.modules.auth.idaustria.IdAustriaAuthConstants; -import at.asitplus.eidas.specific.modules.msproxyservice.MsProxyServiceConstants; -import at.gv.egiz.eaaf.core.api.IRequest; -import at.gv.egiz.eaaf.core.api.data.ExtendedPvpAttributeDefinitions; -import at.gv.egiz.eaaf.core.api.data.PvpAttributeDefinitions; -import at.gv.egiz.eaaf.core.api.data.PvpAttributeDefinitions.EidIdentityStatusLevelValues; -import at.gv.egiz.eaaf.core.api.idp.IAuthData; -import at.gv.egiz.eaaf.core.api.idp.ISpConfiguration; -import at.gv.egiz.eaaf.core.api.idp.auth.data.IAuthProcessDataContainer; -import at.gv.egiz.eaaf.core.exceptions.EaafAuthenticationException; -import at.gv.egiz.eaaf.core.exceptions.EaafBuilderException; -import at.gv.egiz.eaaf.core.exceptions.EaafException; -import at.gv.egiz.eaaf.core.exceptions.EaafStorageException; -import at.gv.egiz.eaaf.core.impl.data.Pair; -import at.gv.egiz.eaaf.core.impl.data.Triple; -import at.gv.egiz.eaaf.core.impl.idp.AuthenticationData; -import at.gv.egiz.eaaf.core.impl.idp.EidAuthenticationData; -import at.gv.egiz.eaaf.core.impl.idp.auth.builder.AbstractAuthenticationDataBuilder; -import at.gv.egiz.eaaf.core.impl.idp.auth.data.EidAuthProcessDataWrapper; -import lombok.extern.slf4j.Slf4j; - -@Service("AuthenticationDataBuilder") -@Slf4j -public class AuthenticationDataBuilder extends AbstractAuthenticationDataBuilder { - -  private static final String ERROR_B11 = "builder.11"; - -  @Override -  protected IAuthData buildDeprecatedAuthData(IRequest pendingReq) throws EaafException { -    final EidAuthProcessDataWrapper authProcessData = -        pendingReq.getSessionData(EidAuthProcessDataWrapper.class); -    final EidAuthenticationData authData = new EidAuthenticationData(); - -    // set basis infos -    super.generateDeprecatedBasicAuthData(authData, pendingReq, authProcessData); - -    // set specific informations -    authData.setSsoSessionValidTo( -        new Date(new Date().getTime() + MsEidasNodeConstants.DEFAULT_PVP_ASSERTION_VALIDITY * 60 * 1000)); - -    authData.setEidStatus(authProcessData.isTestIdentity() -        ? EidIdentityStatusLevelValues.TESTIDENTITY -        : EidIdentityStatusLevelValues.IDENTITY); - -    return authData; - -  } - -  @Override -  protected void buildServiceSpecificAuthenticationData(IAuthData authData, IRequest pendingReq) -      throws EaafException { -    if (authData instanceof EidAuthenticationData) { -      ((EidAuthenticationData) authData).setGenericData( -          ExtendedPvpAttributeDefinitions.EID_PII_TRANSACTION_ID_NAME, -          pendingReq.getUniquePiiTransactionIdentifier()); -      log.trace("Inject piiTransactionId: {} into AuthData", pendingReq.getUniquePiiTransactionIdentifier()); - -      // set specific informations -      ((EidAuthenticationData) authData).setSsoSessionValidTo( -          new Date(new Date().getTime() + MsEidasNodeConstants.DEFAULT_PVP_ASSERTION_VALIDITY * 60 * 1000)); - -      // set E-ID status-level -      final EidAuthProcessDataWrapper authProcessData = -          pendingReq.getSessionData(EidAuthProcessDataWrapper.class); -      ((EidAuthenticationData) authData).setEidStatus(authProcessData.isTestIdentity() -          ? EidIdentityStatusLevelValues.TESTIDENTITY -          : EidIdentityStatusLevelValues.IDENTITY); - -      // handle mandate informations -      buildMandateInformation((EidAuthenticationData) authData, pendingReq, authProcessData); - -    } else { -      throw new RuntimeException("Can not inject PiiTransactionId because AuthData is of unknown type: " -          + authData.getClass().getName()); - -    } - -  } - -  @Override -  protected IAuthData getAuthDataInstance(IRequest arg0) throws EaafException { -    return new EidAuthenticationData(); - -  } - -  @Override -  protected Pair<String, String> buildOAspecificbPK(IRequest pendingReq, AuthenticationData authData) -      throws EaafBuilderException { -    return super.buildOAspecificbPK(pendingReq, authData); - -  } - -  @Override -  protected Pair<String, String> getEncryptedBpkFromPvpAttribute(IAuthProcessDataContainer arg0, -      AuthenticationData arg1, ISpConfiguration arg2) throws EaafBuilderException { -    return null; - -  } - -  @Override -  protected Pair<String, String> getbaseIdFromSzr(AuthenticationData arg0, String arg1, String arg2) { -    return null; - -  } - -  private void buildMandateInformation(EidAuthenticationData authData, IRequest pendingReq, -      EidAuthProcessDataWrapper authProcessData) throws EaafAuthenticationException, EaafBuilderException, -      EaafStorageException { -    authData.setUseMandate(authProcessData.isMandateUsed()); -    if (authProcessData.isMandateUsed()) { -      log.debug("Build mandate-releated authentication data ... "); -      if (authProcessData.isForeigner()) { -        buildMandateInformationForEidasIncoming(); - -      } else { -        buildMandateInformationForEidasOutgoing(authData, pendingReq, authProcessData); - -      } - -      // inject mandate information into authdata -      final Set<String> mandateAttributes = Streams.concat( -          IdAustriaAuthConstants.DEFAULT_REQUIRED_MANDATE_NAT_PVP_ATTRIBUTES.stream(), -          IdAustriaAuthConstants.DEFAULT_REQUIRED_MANDATE_JUR_PVP_ATTRIBUTES.stream()) -          .map(el -> el.getFirst()) -          .collect(Collectors.toSet()); - -      authProcessData.getGenericSessionDataStream() -          .filter(el -> mandateAttributes.contains(el.getKey())) -          .forEach(el -> { -            try { -              authData.setGenericData(el.getKey(), el.getValue()); - -            } catch (final EaafStorageException e) { -              log.error("Can not store attribute: {} into session.", el.getKey(), e); -              throw new RuntimeException(e); - -            } -          }); -    } -  } - -  private void buildMandateInformationForEidasIncoming() { -    log.debug("Find eIDAS incoming process. Generated mandate-information for ID-Austria system ... "); - -    // TODO: implement IDA specific processing of foreign mandate - -  } - -  private void buildMandateInformationForEidasOutgoing(EidAuthenticationData authData, IRequest pendingReq, -      EidAuthProcessDataWrapper authProcessData) throws EaafAuthenticationException, EaafBuilderException, -      EaafStorageException { -    log.debug("Find eIDAS outgoing process. Generated mandate-information for other country ... "); -    if (authProcessData.getGenericDataFromSession( -        PvpAttributeDefinitions.MANDATE_NAT_PER_BPK_NAME) != null) { -      final Optional<Triple<String, String, Boolean>> missingAttribute = -          IdAustriaAuthConstants.DEFAULT_REQUIRED_MANDATE_NAT_PVP_ATTRIBUTES.stream() -              .filter(el -> authProcessData.getGenericDataFromSession(el.getFirst()) == null) -              .findFirst(); -      if (missingAttribute.isPresent()) { -        log.error("ID-Austria response contains not all attributes for nat. person mandator. Missing: {}", -            missingAttribute.get().getFirst()); -        throw new EaafAuthenticationException(ERROR_B11, new Object[] { "Nat. person mandate" }); - -      } else { -        log.trace("Find nat. person mandate. Mandate can be used as it is "); -        authData.setGenericData(MsProxyServiceConstants.ATTR_EIDAS_NAT_MANDATOR_PERSONAL_IDENTIFIER, -            extractBpkFromResponse(authProcessData.getGenericDataFromSession( -                PvpAttributeDefinitions.MANDATE_NAT_PER_BPK_NAME, String.class))); - -      } - -    } else { -      final Optional<Triple<String, String, Boolean>> missingAttribute = -          IdAustriaAuthConstants.DEFAULT_REQUIRED_MANDATE_JUR_PVP_ATTRIBUTES.stream() -              .filter(el -> authProcessData.getGenericDataFromSession(el.getFirst()) == null) -              .findFirst(); -      if (missingAttribute.isPresent()) { -        log.error("ID-Austria response contains not all attributes for legal. person mandator. Missing: {}", -            missingAttribute.get().getFirst()); -        throw new EaafAuthenticationException(ERROR_B11, new Object[] { "Legal. person mandate" }); - -      } else { -        log.trace( -            "Find jur. person mandate. Generate eIDAS identifier from legal-person sourcePin and type ... "); -        final String sourcePin = authProcessData.getGenericDataFromSession( -            PvpAttributeDefinitions.MANDATE_LEG_PER_SOURCE_PIN_NAME, String.class); -        final String sourcePinType = authProcessData.getGenericDataFromSession( -            PvpAttributeDefinitions.MANDATE_LEG_PER_SOURCE_PIN_TYPE_NAME, String.class); - -        // build leagl-person identifier for eIDAS out-going  -        final String[] splittedTarget =   -            pendingReq.getServiceProviderConfiguration().getAreaSpecificTargetIdentifier().split("\\+");        -        StringBuilder sb = new StringBuilder(); -        sb.append(splittedTarget[1]) -          .append("/") -          .append(splittedTarget[2]) -          .append("/") -          .append(sourcePinType) -          .append("+") -          .append(sourcePin); -                 -        log.debug("Use legal-person eIDAS identifer: {} from baseId: {} and baseIdType: {}", -            sb.toString(), sourcePin, sourcePinType); -        authData.setGenericData(MsProxyServiceConstants.ATTR_EIDAS_JUR_MANDATOR_PERSONAL_IDENTIFIER, sb.toString()); - -      } -    } -  } - -  private String extractBpkFromResponse(String pvpBpkAttrValue) { -    final String[] split = pvpBpkAttrValue.split(":", 2); -    if (split.length == 2) { -      return split[1]; - -    } else { -      log.warn("PVP bPK attribute: {} has wrong format. Use it as it is.", pvpBpkAttrValue); -      return pvpBpkAttrValue; - -    } -  } - -} diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/config/PvpEndPointConfiguration.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/config/PvpEndPointConfiguration.java index d7d88017..c62cbeef 100644 --- a/connector/src/main/java/at/asitplus/eidas/specific/connector/config/PvpEndPointConfiguration.java +++ b/connector/src/main/java/at/asitplus/eidas/specific/connector/config/PvpEndPointConfiguration.java @@ -41,7 +41,7 @@ import org.slf4j.LoggerFactory;  import org.springframework.beans.factory.annotation.Autowired;  import org.springframework.stereotype.Service; -import at.asitplus.eidas.specific.connector.MsEidasNodeConstants; +import at.asitplus.eidas.specific.core.MsEidasNodeConstants;  import at.gv.egiz.eaaf.core.api.idp.IConfiguration;  import at.gv.egiz.eaaf.core.exceptions.EaafConfigurationException;  import at.gv.egiz.eaaf.core.exceptions.EaafException; diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/config/PvpMetadataConfiguration.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/config/PvpMetadataConfiguration.java index 0fc061ff..e83fd4cf 100644 --- a/connector/src/main/java/at/asitplus/eidas/specific/connector/config/PvpMetadataConfiguration.java +++ b/connector/src/main/java/at/asitplus/eidas/specific/connector/config/PvpMetadataConfiguration.java @@ -34,7 +34,7 @@ import org.opensaml.saml.saml2.metadata.RequestedAttribute;  import org.slf4j.Logger;  import org.slf4j.LoggerFactory; -import at.asitplus.eidas.specific.connector.MsEidasNodeConstants; +import at.asitplus.eidas.specific.core.MsEidasNodeConstants;  import at.gv.egiz.eaaf.core.api.idp.IConfiguration;  import at.gv.egiz.eaaf.core.exceptions.EaafException;  import at.gv.egiz.eaaf.modules.pvp2.api.IPvp2BasicConfiguration; diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/config/StaticResourceConfiguration.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/config/StaticResourceConfiguration.java deleted file mode 100644 index b4d58cdd..00000000 --- a/connector/src/main/java/at/asitplus/eidas/specific/connector/config/StaticResourceConfiguration.java +++ /dev/null @@ -1,220 +0,0 @@ -/* - * Copyright 2019 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.connector.config; - -import java.net.MalformedURLException; -import java.util.List; - -import org.apache.commons.lang3.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.support.ReloadableResourceBundleMessageSource; -import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; -import org.springframework.web.servlet.i18n.CookieLocaleResolver; -import org.thymeleaf.templateresolver.FileTemplateResolver; - -import at.asitplus.eidas.specific.connector.MsEidasNodeConstants; -import at.gv.egiz.eaaf.core.api.idp.IConfiguration; -import at.gv.egiz.eaaf.core.api.logging.IMessageSourceLocation; -import at.gv.egiz.eaaf.core.impl.utils.FileUtils; - -/** - * Spring configurator for Web resources. - *  - * @author tlenz - * - */ -@Configuration -public class StaticResourceConfiguration implements WebMvcConfigurer { -  private static final Logger log = LoggerFactory.getLogger(StaticResourceConfiguration.class); -  private static final String[] CLASSPATH_RESOURCE_LOCATIONS = { -      "/" -  }; - -  private static final String DEFAULT_MESSAGE_SOURCE = "classpath:properties/status_messages"; - -  @Autowired -  private IConfiguration basicConfig; - -  @Override -  public void addResourceHandlers(ResourceHandlerRegistry registry) { -    final String staticResources = basicConfig.getBasicConfiguration( -        MsEidasNodeConstants.PROP_CONFIG_WEBCONTENT_STATIC_PATH); -    try { -      if (StringUtils.isNotEmpty(staticResources)) { -        String absPath = FileUtils.makeAbsoluteUrl(staticResources, basicConfig -            .getConfigurationRootDirectory()); -        if (!absPath.endsWith("/")) { -          absPath += "/"; -        } - -        registry.addResourceHandler("/static/**").addResourceLocations(absPath); -        log.info("Add Ressourcefolder: " + absPath + " for static Web content"); - -      } else { -        log.debug("No Ressourcefolder for static Web content"); -      } - -    } catch (final MalformedURLException e) { -      log.warn("Can NOT initialize ressourcefolder for static Web content", e); - -    } - -    registry.addResourceHandler("/**").addResourceLocations(CLASSPATH_RESOURCE_LOCATIONS); - -  } - -  /** -   * Get a message source with only internal message properties. -   * -   * @param ressourceLocations List of source-locations -   * @return -   */ -  @Bean -  public ReloadableResourceBundleMessageSource internalMessageSource( -      @Autowired(required = false) final List<IMessageSourceLocation> ressourceLocations) { -    final ReloadableResourceBundleMessageSource messageSource = -        new ReloadableResourceBundleMessageSource(); - -    // add default message source -    messageSource.setBasename(DEFAULT_MESSAGE_SOURCE); - -    if (ressourceLocations != null) { -      // load more message sources -      for (final IMessageSourceLocation el : ressourceLocations) { -        if (el.getMessageSourceLocation() != null) { -          for (final String source : el.getMessageSourceLocation()) { -            messageSource.addBasenames(source); -            log.debug("Add additional messageSources: {}", el.getMessageSourceLocation().toArray()); - -          } -        } -      } -    } - -    messageSource.setDefaultEncoding("UTF-8"); -    return messageSource; - -  } - -  /** -   * Get full message source with internal and external message-properties files. -   * -   * @param ressourceLocations List of source-locations -   * @return -   */ -  @Bean -  public ReloadableResourceBundleMessageSource messageSource( -      @Autowired(required = false) final List<IMessageSourceLocation> ressourceLocations) { -    final ReloadableResourceBundleMessageSource messageSource = -        new ReloadableResourceBundleMessageSource(); -    messageSource.setDefaultEncoding("UTF-8"); -    messageSource.setParentMessageSource(internalMessageSource(ressourceLocations)); - -    final String staticResources = basicConfig -        .getBasicConfiguration(MsEidasNodeConstants.PROP_CONFIG_WEBCONTENT_PROPERTIES_PATH); -    try { -      if (StringUtils.isNotEmpty(staticResources)) { -        final String absPath = -            FileUtils.makeAbsoluteUrl(staticResources, basicConfig.getConfigurationRootDirectory()); -        messageSource.setBasename(absPath); - -      } else { -        log.debug("No Ressourcefolder for dynamic Web content templates"); - -      } - -    } catch (final MalformedURLException e) { -      log.warn("Can NOT initialize ressourcefolder for dynamic Web content templates", e); - -    } - -    return messageSource; - -  } -     -  /** -   * Get a i18n resolver based on cookies. -   * -   * @return -   */ -  @Bean -  public CookieLocaleResolver localeResolver() { -    final CookieLocaleResolver localeResolver = new CookieLocaleResolver(); -    localeResolver.setCookieName("currentLanguage"); -    localeResolver.setCookieMaxAge(3600); -    return localeResolver; -     -  } -   -  /** -   * Get a Tyhmeleaf Template-Resolver with external configuration path. -   * -   * @return -   */ -  @Bean(name = "templateResolver") -  public FileTemplateResolver templateResolver() { -    final String staticResources = basicConfig -        .getBasicConfiguration(MsEidasNodeConstants.PROP_CONFIG_WEBCONTENT_TEMPLATES_PATH); -    try { -      if (StringUtils.isNotEmpty(staticResources)) { -        String absPath = -            FileUtils.makeAbsoluteUrl(staticResources, basicConfig.getConfigurationRootDirectory()); -        if (!absPath.endsWith("/")) { -          absPath += "/"; - -        } - -        if (absPath.startsWith("file:")) { -          absPath = absPath.substring("file:".length()); - -        } - -        final FileTemplateResolver viewResolver = new FileTemplateResolver(); -        viewResolver.setPrefix(absPath); -        viewResolver.setSuffix(".html"); -        viewResolver.setTemplateMode("HTML"); -        viewResolver.setCacheable(false); - -        log.info("Add Ressourcefolder: {} for dynamic Web content templates", absPath); -        return viewResolver; - -      } else { -        log.debug("No Ressourcefolder for dynamic Web content templates"); - -      } - -    } catch (final MalformedURLException e) { -      log.warn("Can NOT initialize ressourcefolder for dynamic Web content templates", e); - -    } - -    throw new RuntimeException("Can NOT initialize HTML template resolver"); - -  } -} diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/controller/ProcessEngineSignalController.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/controller/ProcessEngineSignalController.java index 1bf1ad67..e649fd3a 100644 --- a/connector/src/main/java/at/asitplus/eidas/specific/connector/controller/ProcessEngineSignalController.java +++ b/connector/src/main/java/at/asitplus/eidas/specific/connector/controller/ProcessEngineSignalController.java @@ -32,7 +32,7 @@ import org.springframework.stereotype.Controller;  import org.springframework.web.bind.annotation.RequestMapping;  import org.springframework.web.bind.annotation.RequestMethod; -import at.asitplus.eidas.specific.connector.MsEidasNodeConstants; +import at.asitplus.eidas.specific.core.MsEidasNodeConstants;  import at.gv.egiz.eaaf.core.exceptions.EaafException;  import at.gv.egiz.eaaf.core.impl.idp.controller.AbstractProcessEngineSignalController; diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/controller/Pvp2SProfileEndpoint.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/controller/Pvp2SProfileEndpoint.java index d2ec5a7c..923864cc 100644 --- a/connector/src/main/java/at/asitplus/eidas/specific/connector/controller/Pvp2SProfileEndpoint.java +++ b/connector/src/main/java/at/asitplus/eidas/specific/connector/controller/Pvp2SProfileEndpoint.java @@ -30,7 +30,7 @@ import org.springframework.stereotype.Controller;  import org.springframework.web.bind.annotation.RequestMapping;  import org.springframework.web.bind.annotation.RequestMethod; -import at.asitplus.eidas.specific.connector.MsEidasNodeConstants; +import at.asitplus.eidas.specific.core.MsEidasNodeConstants;  import at.gv.egiz.eaaf.core.exceptions.EaafException;  import at.gv.egiz.eaaf.modules.pvp2.idp.impl.AbstractPvp2XProtocol;  import at.gv.egiz.eaaf.modules.pvp2.idp.impl.PvpSProfilePendingRequest; diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/health/EidasNodeMetadataHealthIndicator.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/health/EidasNodeMetadataHealthIndicator.java deleted file mode 100644 index f160916c..00000000 --- a/connector/src/main/java/at/asitplus/eidas/specific/connector/health/EidasNodeMetadataHealthIndicator.java +++ /dev/null @@ -1,69 +0,0 @@ -package at.asitplus.eidas.specific.connector.health; - -import java.io.ByteArrayInputStream; - -import javax.xml.transform.TransformerFactoryConfigurationError; - -import org.apache.commons.lang3.StringUtils; -import org.apache.http.StatusLine; -import org.apache.http.client.methods.HttpGet; -import org.apache.http.client.methods.HttpUriRequest; -import org.apache.http.client.utils.URIBuilder; -import org.apache.http.entity.ContentType; -import org.apache.http.impl.client.CloseableHttpClient; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.actuate.health.Health; -import org.springframework.boot.actuate.health.HealthIndicator; - -import at.asitplus.eidas.specific.connector.MsEidasNodeConstants; -import at.gv.egiz.eaaf.core.api.idp.IConfiguration; -import at.gv.egiz.eaaf.core.impl.data.Triple; -import at.gv.egiz.eaaf.core.impl.http.HttpUtils; -import at.gv.egiz.eaaf.core.impl.http.IHttpClientFactory; -import at.gv.egiz.eaaf.core.impl.utils.DomUtils; -import lombok.extern.slf4j.Slf4j; - -@Slf4j -public class EidasNodeMetadataHealthIndicator implements HealthIndicator { - -  @Autowired IConfiguration config; -  @Autowired IHttpClientFactory httpClientFactory; -   -  @Override -  public Health health() { -    try { -      final String urlString = config.getBasicConfiguration( -          MsEidasNodeConstants.PROP_CONFIG_MONITORING_EIDASNODE_METADATAURL); -      if (StringUtils.isEmpty(urlString)) { -        log.trace("No eIDASNode metadata URL. Skipping test ... "); -        return Health.unknown().build(); - -      } - -      // create HTTP client -      CloseableHttpClient httpClient = httpClientFactory.getHttpClient();       -      URIBuilder uriBuilder = new URIBuilder(urlString);       -      HttpUriRequest request = new HttpGet(uriBuilder.build()); - -      final Triple<StatusLine, ByteArrayInputStream, ContentType> respCode = httpClient.execute(request, -          HttpUtils.bodyStatusCodeResponseHandler()); -      if (respCode.getFirst().getStatusCode() != 200) { -        log.warn("Monitoring: Get http StatusCode: {} from eIDAS-Node Metadata endpoint",  -            respCode.getFirst().getStatusCode()); -        return Health.down().withDetail("http StatusCode", respCode.getFirst().getStatusCode()).build(); - -      } - -      // parse metadata -      DomUtils.parseXmlNonValidating(respCode.getSecond()); - -      return Health.up().build(); - -    } catch (Exception | TransformerFactoryConfigurationError e) { -      log.warn("Monitoring: Can not read SAML2 metadata from eIDAS-Node", e); -      return Health.down().down(e).build(); - -    } -  } - -} diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/health/IgniteClusterHealthIndicator.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/health/IgniteClusterHealthIndicator.java deleted file mode 100644 index 10517565..00000000 --- a/connector/src/main/java/at/asitplus/eidas/specific/connector/health/IgniteClusterHealthIndicator.java +++ /dev/null @@ -1,52 +0,0 @@ -package at.asitplus.eidas.specific.connector.health; - -import org.apache.ignite.Ignite; -import org.springframework.boot.actuate.health.Health; -import org.springframework.boot.actuate.health.HealthIndicator; - -import eu.eidas.auth.cache.IgniteInstanceInitializerSpecificCommunication; -import lombok.Setter; -import lombok.extern.slf4j.Slf4j; - -/** - * HealthCheck that validate Nodes in Apache-Ignite Cluster. - *  - * @author tlenz - * - */ -@Slf4j -public class IgniteClusterHealthIndicator implements HealthIndicator { - -  @Setter -  protected IgniteInstanceInitializerSpecificCommunication igniteInstanceInitializerSpecificCommunication; - -  @Override -  public Health health() { -    final Ignite instance = igniteInstanceInitializerSpecificCommunication.getInstance(); - -    // check if Apache Ignite cluster is active -    if (!instance.cluster().active()) { -      return Health.outOfService().build(); - -    } - -    final Health.Builder healthBuilder; -    // Status UP requires more than 1 node because MS-Connector and eIDAS-Node operations as -    // micro-services -    if (instance.cluster().nodes().size() > 1) { -      healthBuilder = Health.up(); - -    } else { -      // Something looks wrong if only a single node was found because MS-Connector and eIDAS-Node -      // operations as micro-services -      healthBuilder = Health.outOfService(); - -    } - -    healthBuilder.withDetail("#Nodes", instance.cluster().nodes().size()); -    log.trace("Ignite state. #Nodes: {}", instance.cluster().nodes().size()); -    return healthBuilder.build(); - -  } - -} diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/interceptor/WebFrontEndSecurityInterceptor.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/interceptor/WebFrontEndSecurityInterceptor.java deleted file mode 100644 index d90cd22b..00000000 --- a/connector/src/main/java/at/asitplus/eidas/specific/connector/interceptor/WebFrontEndSecurityInterceptor.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright 2018 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.connector.interceptor; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.springframework.web.servlet.HandlerInterceptor; -import org.springframework.web.servlet.ModelAndView; - -/** - * Spring interceptor to inject securtiy headers into http response. - *  - * @author tlenz - * - */ -public class WebFrontEndSecurityInterceptor implements HandlerInterceptor { - -  /* -   * (non-Javadoc) -   *  -   * @see -   * org.springframework.web.servlet.HandlerInterceptor#preHandle(javax.servlet. -   * http.HttpServletRequest, javax.servlet.http.HttpServletResponse, -   * java.lang.Object) -   */ -  @Override -  public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) -      throws Exception { - -    // set security headers -    response.setHeader("Expires", "Sat, 6 May 1995 12:00:00 GMT"); -    response.setHeader("Pragma", "no-cache"); -    response.setHeader("Cache-control", "no-store, no-cache, must-revalidate"); - -    return true; - -  } - -  /* -   * (non-Javadoc) -   *  -   * @see -   * org.springframework.web.servlet.HandlerInterceptor#postHandle(javax.servlet. -   * http.HttpServletRequest, javax.servlet.http.HttpServletResponse, -   * java.lang.Object, org.springframework.web.servlet.ModelAndView) -   */ -  @Override -  public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, -      ModelAndView modelAndView) throws Exception { - -  } - -  /* -   * (non-Javadoc) -   *  -   * @see -   * org.springframework.web.servlet.HandlerInterceptor#afterCompletion(javax. -   * servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, -   * java.lang.Object, java.lang.Exception) -   */ -  @Override -  public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, -      Exception ex) -      throws Exception { - -  } - -} diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/logger/RevisionLogger.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/logger/RevisionLogger.java deleted file mode 100644 index 16385e10..00000000 --- a/connector/src/main/java/at/asitplus/eidas/specific/connector/logger/RevisionLogger.java +++ /dev/null @@ -1,110 +0,0 @@ -/* - * Copyright 2018 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.connector.logger; - -import java.util.Date; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; - -import at.asitplus.eidas.specific.connector.MsEidasNodeConstants; -import at.gv.egiz.components.eventlog.api.Event; -import at.gv.egiz.components.eventlog.api.EventConstants; -import at.gv.egiz.components.eventlog.api.EventLogFactory; -import at.gv.egiz.components.eventlog.api.EventLoggingException; -import at.gv.egiz.eaaf.core.api.IRequest; -import at.gv.egiz.eaaf.core.api.idp.IConfiguration; -import at.gv.egiz.eaaf.core.api.idp.ISpConfiguration; -import at.gv.egiz.eaaf.core.api.logging.IRevisionLogger; - -public class RevisionLogger extends EventLogFactory implements IRevisionLogger { -  private static final Logger log = LoggerFactory.getLogger(RevisionLogger.class); - -  @Autowired -  private IConfiguration basicConfig; - -  @Override -  public void logEvent(ISpConfiguration oaConfig, int eventCode, String message) { -    logEvent(createNewEvent(new Date().getTime(), eventCode, message)); - -  } - -  @Override -  public void logEvent(IRequest pendingRequest, int eventCode) { -    logEvent(createNewEvent(new Date().getTime(), eventCode, -        pendingRequest.getUniqueSessionIdentifier(), pendingRequest.getUniqueTransactionIdentifier())); - -  } - -  @Override -  public void logEvent(IRequest pendingRequest, int eventCode, String message) { -    logEvent(createNewEvent(new Date().getTime(), eventCode, message, -        pendingRequest.getUniqueSessionIdentifier(), pendingRequest.getUniqueTransactionIdentifier())); - -  } - -  @Override -  public void logEvent(int eventCode, String message) { -    logEvent(createNewEvent(new Date().getTime(), eventCode, message)); - -  } - -  @Override -  public void logEvent(String sessionID, String transactionID, int eventCode, String message) { -    logEvent(createNewEvent(new Date().getTime(), eventCode, message, sessionID, transactionID)); - -  } - -  @Override -  public void logEvent(String sessionID, String transactionID, int eventCode) { -    logEvent(createNewEvent(new Date().getTime(), eventCode, sessionID, transactionID)); - -  } - -  private void logEvent(Event event) { -    try { -      if (event.getEventCode() >= 1100) { -        if (event.getEventCode() == EventConstants.TRANSACTION_IP -            && !basicConfig.getBasicConfigurationBoolean( -                MsEidasNodeConstants.PROP_CONFIG_REVISIONLOG_LOG_IP_ADDRESS_OF_USER, true)) { -          log.trace("Ignore Event: " + event.getEventCode() + " because IP adresse logging prohibited"); -          return; - -        } - -        getEventLog().logEvent(event); - -      } else { -        log.trace("Ignore Event: " + event.getEventCode() -            + " because session functionallity is not implemented"); -      } - -    } catch (final EventLoggingException e) { -      log.warn("Event logging FAILED! Reason: " + e.getMessage()); - -    } - -  } -} diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/logger/StatisticLogger.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/logger/StatisticLogger.java deleted file mode 100644 index 3483f367..00000000 --- a/connector/src/main/java/at/asitplus/eidas/specific/connector/logger/StatisticLogger.java +++ /dev/null @@ -1,141 +0,0 @@ -/* - * Copyright 2018 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.connector.logger; - -import org.apache.commons.lang3.StringUtils; -import org.joda.time.DateTime; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import at.asitplus.eidas.specific.connector.MsEidasNodeConstants; -import at.gv.egiz.eaaf.core.api.IRequest; -import at.gv.egiz.eaaf.core.api.idp.IAuthData; -import at.gv.egiz.eaaf.core.api.logging.IStatisticLogger; -import at.gv.egiz.eaaf.core.exceptions.EaafException; - -public class StatisticLogger implements IStatisticLogger { - -  private static final Logger log = LoggerFactory.getLogger(StatisticLogger.class); - -  private static final String DATEFORMATER = "yyyy.MM.dd-HH:mm:ss+z"; -  private static final String STATUS_SUCCESS = "success"; -  private static final String STATUS_ERROR = "error"; - -  @Override -  public void logSuccessOperation(IRequest protocolRequest, IAuthData authData, boolean isSsoSession) { -    log.info(buildLogMessage( -        protocolRequest.getUniqueTransactionIdentifier(), -        protocolRequest.getSpEntityId(), -        protocolRequest.getRawData(MsEidasNodeConstants.DATA_REQUESTERID), -        protocolRequest.getServiceProviderConfiguration().getAreaSpecificTargetIdentifier(), -        authData.getCiticenCountryCode(), -        STATUS_SUCCESS, -        StringUtils.EMPTY, -        StringUtils.EMPTY)); - -  } - -  @Override -  public void logErrorOperation(Throwable throwable) { -    String errorId = "TODO"; -    if (throwable instanceof EaafException) { -      errorId = ((EaafException) throwable).getErrorId(); -    } - -    log.info(buildLogMessage( -        StringUtils.EMPTY, -        StringUtils.EMPTY, -        StringUtils.EMPTY, -        StringUtils.EMPTY, -        StringUtils.EMPTY, -        STATUS_ERROR, -        errorId, -        throwable.getMessage())); - -  } - -  @Override -  public void logErrorOperation(Throwable throwable, IRequest errorRequest) { -    String errorId = "TODO"; -    if (throwable instanceof EaafException) { -      errorId = ((EaafException) throwable).getErrorId(); -    } - -    if (errorRequest != null) { -      log.info(buildLogMessage( -          errorRequest.getUniqueTransactionIdentifier(), -          errorRequest.getSpEntityId(), -          errorRequest.getRawData(MsEidasNodeConstants.DATA_REQUESTERID), -          errorRequest.getServiceProviderConfiguration().getAreaSpecificTargetIdentifier(), -          StringUtils.EMPTY, -          STATUS_ERROR, -          errorId, -          throwable.getMessage())); -    } else { -      log.info(buildLogMessage( -          StringUtils.EMPTY, -          StringUtils.EMPTY, -          StringUtils.EMPTY, -          StringUtils.EMPTY, -          StringUtils.EMPTY, -          STATUS_ERROR, -          errorId, -          throwable.getMessage())); -    } - -  } - -  @Override -  public void internalTesting() throws Exception { -    log.trace("Not implemented for a File-based logger"); - -  } - -  private String buildLogMessage(String transId, String entityId, Object requesterId, String target, -      String cc, -      String status, String errorCode, String errorMsg) { -    String logMsg = StringUtils.EMPTY; - -    // data,tId,MOAID-Id,SP-Id,bPKTarget,CC,status,error-code,error-msg - -    logMsg += DateTime.now().toString(DATEFORMATER) + ","; -    logMsg += transId + ","; -    logMsg += entityId + ","; - -    if (requesterId instanceof String && StringUtils.isNotEmpty((String) requesterId)) { -      logMsg += (String) requesterId + ","; -    } else { -      logMsg += StringUtils.EMPTY + ","; -    } - -    logMsg += target + ","; -    logMsg += cc + ","; - -    logMsg += status + ","; -    logMsg += errorCode + ","; -    logMsg += errorMsg; - -    return logMsg; -  } -} diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/mapper/LoALevelMapper.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/mapper/LoALevelMapper.java deleted file mode 100644 index 564160be..00000000 --- a/connector/src/main/java/at/asitplus/eidas/specific/connector/mapper/LoALevelMapper.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright 2018 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.connector.mapper; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Service; - -import at.gv.egiz.eaaf.core.api.data.EaafConstants; -import at.gv.egiz.eaaf.core.api.data.ILoALevelMapper; - -@Service("LoALevelMapper") -public class LoALevelMapper implements ILoALevelMapper { -  private static final Logger log = LoggerFactory.getLogger(LoALevelMapper.class); - -  @Override -  public String mapToSecClass(String loa) { -    log.info("Mapping to PVP SecClass is NOT supported"); -    return null; -  } - -  @Override -  public String mapToEidasLoa(String loa) { -    if (loa.startsWith(EaafConstants.EIDAS_LOA_PREFIX)) { -      return loa; -    } else { -      log.info("Can NOT map '" + loa + "' to eIDAS LoA"); -    } - -    return null; - -  } - -  @Override -  public String mapEidasQaaToStorkQaa(String eidasqaaLevel) { -    return null; -  } - -} diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/processes/CountrySelectionProcessImpl.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/processes/CountrySelectionProcessImpl.java index 805148f7..2ec86f53 100644 --- a/connector/src/main/java/at/asitplus/eidas/specific/connector/processes/CountrySelectionProcessImpl.java +++ b/connector/src/main/java/at/asitplus/eidas/specific/connector/processes/CountrySelectionProcessImpl.java @@ -25,7 +25,7 @@ package at.asitplus.eidas.specific.connector.processes;  import org.apache.commons.lang3.StringUtils; -import at.asitplus.eidas.specific.connector.MsEidasNodeConstants; +import at.asitplus.eidas.specific.core.MsEidasNodeConstants;  import at.gv.egiz.eaaf.core.api.IRequest;  import at.gv.egiz.eaaf.core.api.idp.auth.modules.AuthModule;  import at.gv.egiz.eaaf.core.api.idp.process.ExecutionContext; diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/processes/tasks/EvaluateCountrySelectionTask.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/processes/tasks/EvaluateCountrySelectionTask.java index 727653b3..b2c5c51d 100644 --- a/connector/src/main/java/at/asitplus/eidas/specific/connector/processes/tasks/EvaluateCountrySelectionTask.java +++ b/connector/src/main/java/at/asitplus/eidas/specific/connector/processes/tasks/EvaluateCountrySelectionTask.java @@ -34,7 +34,7 @@ import org.slf4j.Logger;  import org.slf4j.LoggerFactory;  import org.springframework.stereotype.Component; -import at.asitplus.eidas.specific.connector.MsEidasNodeConstants; +import at.asitplus.eidas.specific.core.MsEidasNodeConstants;  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; diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/processes/tasks/GenerateCountrySelectionFrameTask.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/processes/tasks/GenerateCountrySelectionFrameTask.java index d3b8116a..e87979fb 100644 --- a/connector/src/main/java/at/asitplus/eidas/specific/connector/processes/tasks/GenerateCountrySelectionFrameTask.java +++ b/connector/src/main/java/at/asitplus/eidas/specific/connector/processes/tasks/GenerateCountrySelectionFrameTask.java @@ -29,9 +29,9 @@ import javax.servlet.http.HttpServletResponse;  import org.springframework.beans.factory.annotation.Autowired;  import org.springframework.stereotype.Component; -import at.asitplus.eidas.specific.connector.MsConnectorEventCodes; -import at.asitplus.eidas.specific.connector.MsEidasNodeConstants; -import at.asitplus.eidas.specific.connector.gui.StaticGuiBuilderConfiguration; +import at.asitplus.eidas.specific.core.MsConnectorEventCodes; +import at.asitplus.eidas.specific.core.MsEidasNodeConstants; +import at.asitplus.eidas.specific.core.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; diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/provider/PvpEndPointCredentialProvider.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/provider/PvpEndPointCredentialProvider.java index 3a3e9664..98e88eff 100644 --- a/connector/src/main/java/at/asitplus/eidas/specific/connector/provider/PvpEndPointCredentialProvider.java +++ b/connector/src/main/java/at/asitplus/eidas/specific/connector/provider/PvpEndPointCredentialProvider.java @@ -25,7 +25,7 @@ package at.asitplus.eidas.specific.connector.provider;  import org.springframework.beans.factory.annotation.Autowired; -import at.asitplus.eidas.specific.connector.MsEidasNodeConstants; +import at.asitplus.eidas.specific.core.MsEidasNodeConstants;  import at.gv.egiz.eaaf.core.api.idp.IConfiguration;  import at.gv.egiz.eaaf.core.exceptions.EaafConfigurationException;  import at.gv.egiz.eaaf.core.impl.credential.KeyStoreConfiguration; diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/provider/PvpMetadataProvider.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/provider/PvpMetadataProvider.java index 8dbb74c7..6161c271 100644 --- a/connector/src/main/java/at/asitplus/eidas/specific/connector/provider/PvpMetadataProvider.java +++ b/connector/src/main/java/at/asitplus/eidas/specific/connector/provider/PvpMetadataProvider.java @@ -41,7 +41,7 @@ import org.slf4j.LoggerFactory;  import org.springframework.beans.factory.annotation.Autowired;  import org.springframework.stereotype.Service; -import at.asitplus.eidas.specific.connector.MsEidasNodeConstants; +import at.asitplus.eidas.specific.core.MsEidasNodeConstants;  import at.gv.egiz.eaaf.core.api.idp.IConfigurationWithSP;  import at.gv.egiz.eaaf.core.api.idp.ISpConfiguration;  import at.gv.egiz.eaaf.core.exceptions.EaafConfigurationException; diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/provider/StatusMessageProvider.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/provider/StatusMessageProvider.java deleted file mode 100644 index 5565bc63..00000000 --- a/connector/src/main/java/at/asitplus/eidas/specific/connector/provider/StatusMessageProvider.java +++ /dev/null @@ -1,182 +0,0 @@ -/* - * Copyright 2018 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.connector.provider; - -import java.text.MessageFormat; -import java.util.Locale; -import java.util.MissingResourceException; -import java.util.ResourceBundle; - -import org.apache.commons.lang3.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.context.MessageSource; -import org.springframework.context.MessageSourceAware; -import org.springframework.context.NoSuchMessageException; -import org.springframework.context.i18n.LocaleContextHolder; -import org.springframework.stereotype.Service; - -import at.gv.egiz.eaaf.core.api.IStatusMessenger; -import at.gv.egiz.eaaf.core.exceptions.EaafException; -import at.gv.egiz.eaaf.core.impl.logging.LogMessageProviderFactory; - -@Service("StatusMessageProvider") -public class StatusMessageProvider implements IStatusMessenger, MessageSourceAware { -  private static final Logger log = LoggerFactory.getLogger(StatusMessageProvider.class); - -  private static final String ERROR_MESSAGES_UNAVAILABLE = -      "Error messages can NOT be load from application. Only errorCode: {0} is availabe"; -  private static final String ERROR_NO_MESSAGE = "No errormesseage for error with number.={0}"; - -  private static final String ERROR_EXTERNALERROR_CODES_UNAVAILABLE = -      "External error-codes can NOT be load from application. Only internal errorCode: {0} is availabe"; -  private static final String ERROR_NO_EXTERNALERROR_CODE = -      "No external error for internal error with number.={0}"; -  private static final String MSG_WARN_NO_SOURCE = "MessageCode: {} is NOT SET for locale: {}"; -  private static final String MSG_INFO = "Use locale: {} as default"; -   -  // external error codes -  private static final String DEFAULT_EXTERNALERROR_RESOURCES = "properties/external_statuscodes_map"; -  private static final Locale DEFAULT_EXTERNALERROR_LOCALES = new Locale("en", "GB"); -  private ResourceBundle externalError = null; - -  //internal messanges -  private MessageSource messageSource; - -  @Override -  public String getMessageWithoutDefault(final String messageId, final Object[] parameters) { -    if (messageSource == null) { -      return null; - -    } else { -      try { -        final Locale locale = LocaleContextHolder.getLocale(); -        return messageSource.getMessage(messageId, parameters, locale); - -      } catch (final NoSuchMessageException e) { -        log.info(MSG_WARN_NO_SOURCE, messageId, LocaleContextHolder.getLocale()); -        log.debug(MSG_INFO, Locale.ENGLISH); - -        try { -          return messageSource.getMessage(messageId, parameters, Locale.ENGLISH); - -        } catch (final NoSuchMessageException e2) { -          log.info(MSG_WARN_NO_SOURCE, messageId, Locale.ENGLISH); - -        } - -      } catch (final MissingResourceException e2) { -        log.warn("No message source", e2); - -      } -    } - -    return null; - -  } - -  @Override -  public String getMessage(final String messageId, final Object[] parameters) { -    if (messageSource == null) { -      return MessageFormat.format(ERROR_MESSAGES_UNAVAILABLE, new Object[]{messageId}); - -    } else { -      try { -        final Locale locale = LocaleContextHolder.getLocale(); -        return messageSource.getMessage(messageId, parameters, locale); - -      } catch (final NoSuchMessageException e) { -        log.info(MSG_WARN_NO_SOURCE, messageId, LocaleContextHolder.getLocale()); -        log.debug(MSG_INFO, Locale.ENGLISH); - -        try { -          return messageSource.getMessage(messageId, parameters, Locale.ENGLISH); - -        } catch (final NoSuchMessageException e2) { -          return MessageFormat.format(ERROR_NO_MESSAGE, new Object[]{messageId}); - -        } - -      } catch (final MissingResourceException e2) { -        return MessageFormat.format(ERROR_NO_MESSAGE, new Object[]{messageId}); - -      } -    } -  } -   -  @Override -  public String getResponseErrorCode(Throwable throwable) { -    String errorCode = IStatusMessenger.CODES_EXTERNAL_ERROR_GENERIC; -    if (throwable instanceof EaafException) { -      errorCode = ((EaafException) throwable).getErrorId(); -       -    } -         -    return errorCode; - -  } - -  @Override -  public String mapInternalErrorToExternalError(String intErrorCode) { -    // initialize messages -    if (externalError == null) { -      this.externalError = ResourceBundle.getBundle( -          DEFAULT_EXTERNALERROR_RESOURCES, -          DEFAULT_EXTERNALERROR_LOCALES); - -    } - -    // create the message -    if (externalError == null) { -      log.warn(MessageFormat.format(ERROR_EXTERNALERROR_CODES_UNAVAILABLE, new Object[] { intErrorCode })); -      return IStatusMessenger.CODES_EXTERNAL_ERROR_GENERIC; - -    } else { -      try { -        if (StringUtils.isNotEmpty(intErrorCode)) { -          return externalError.getString(intErrorCode); - -        } else { -          return IStatusMessenger.CODES_EXTERNAL_ERROR_GENERIC; - -        } - -      } catch (final MissingResourceException e2) { -        log.info(MessageFormat.format(ERROR_NO_EXTERNALERROR_CODE, new Object[] { intErrorCode })); -        return IStatusMessenger.CODES_EXTERNAL_ERROR_GENERIC; - -      } -    } -  } - -  @Override -  public void setMessageSource(MessageSource messageSource) { -    this.messageSource = messageSource; - -    log.info("Injecting 'StatusMessanger' into 'LogMessageProviderFactory'"); -    LogMessageProviderFactory.setStatusMessager(this); -     -  } - -} diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/storage/CacheWithEidasBackend.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/storage/CacheWithEidasBackend.java deleted file mode 100644 index 87ebda92..00000000 --- a/connector/src/main/java/at/asitplus/eidas/specific/connector/storage/CacheWithEidasBackend.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright 2018 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.connector.storage; - -import eu.eidas.auth.commons.cache.ConcurrentCacheService; -import eu.eidas.auth.commons.tx.AbstractCache; - -public class CacheWithEidasBackend extends AbstractCache<String, TransactionStoreElement> { - -  protected CacheWithEidasBackend(ConcurrentCacheService concurrentMapService) { -    super(concurrentMapService); -  } -   -} diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/storage/EidasCacheTransactionStoreDecorator.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/storage/EidasCacheTransactionStoreDecorator.java deleted file mode 100644 index 634b3797..00000000 --- a/connector/src/main/java/at/asitplus/eidas/specific/connector/storage/EidasCacheTransactionStoreDecorator.java +++ /dev/null @@ -1,180 +0,0 @@ -/* - * Copyright 2018 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.connector.storage; - -import java.util.Arrays; -import java.util.Date; -import java.util.List; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.actuate.health.Health; -import org.springframework.boot.actuate.health.HealthIndicator; - -import at.gv.egiz.eaaf.core.api.storage.ITransactionStorage; -import at.gv.egiz.eaaf.core.exceptions.EaafException; -import at.gv.egiz.eaaf.core.exceptions.EaafStorageException; -import at.gv.egiz.eaaf.core.impl.utils.Random; - -public class EidasCacheTransactionStoreDecorator implements ITransactionStorage, HealthIndicator { -  private static final Logger log = LoggerFactory.getLogger(EidasCacheTransactionStoreDecorator.class); - -  @Autowired(required = true) -  private CacheWithEidasBackend storage; - -  @Override -  public Health health() { -    try { -      final String key = Random.nextHexRandom16(); -      final String value = Random.nextHexRandom16(); - -      this.put(key, value, -1); -      final String result = this.get(key, String.class); -      this.remove(key); - -      if (result != null && result.equals(value)) { -        return Health.up().build(); -       -      } else { -        log.warn("Montioring: TestValue: " + value + " does NOT match in Storage test"); -        return Health.down().build(); -         -      } - -    } catch (final EaafException e) { -      log.warn("Montioring: Can not read/write to storage.", e); -      return Health.down().down(e).build(); -       -    } -  } -   -  @Override -  public void changeKey(String oldKey, String newKey, Object value) throws EaafException { -    if (containsKey(oldKey)) { -      final TransactionStoreElement el = storage.get(oldKey); -      el.setKey(newKey); -      el.setData(value); -      storage.put(newKey, el); -      boolean delResult = storage.remove(oldKey); -      log.trace("Object: {} removed from cache: {}", oldKey, delResult); - -    } else { -      throw new EaafStorageException("No element in TransactionStorage with key: " + oldKey); -    } - -  } - -  @Override -  public List<String> clean(Date now, long dataTimeOut) { -    log.info("Clean is NOT implemented, because its not needed"); -    return Arrays.asList(); - -  } - -  @Override -  public boolean containsKey(String key) { -    return storage.containsKey(key); - -  } - -  @Override -  public Object get(String key) throws EaafException { -    if (key != null && containsKey(key)) { -      final TransactionStoreElement element = storage.get(key); -      return element.getData(); - -    } else { -      return null; -    } -  } - -  @Override -  public <T> T get(String key, Class<T> type) throws EaafException { -    return get(key, type, -1); - -  } - -  @Override -  public <T> T get(String key, Class<T> type, long dataTimeOut) throws EaafException { -    if (key != null && containsKey(key)) { -      final TransactionStoreElement value = storage.get(key); - -      if (dataTimeOut > -1) { -        final long now = new Date().getTime(); -        if (now - value.getCreated().getTime() > dataTimeOut) { -          log.info("Transaction-Data with key: " + key + " is out of time."); -          throw new EaafStorageException("Transaction-Data with key: " + key + " is out of time."); - -        } -      } - -      if (type.isAssignableFrom(value.getData().getClass())) { -        return (T) value.getData(); - -      } else { -        log.warn("Can NOT cast '" + value.getClass() + "' to '" + type + "'"); -      } - -    } - -    return null; -  } - -  @Override -  public Object getRaw(String key) throws EaafException { -    return storage.get(key); - -  } - -  @Override -  public void put(String key, Object value, int dataTimeOut) throws EaafException { -    final TransactionStoreElement element = new TransactionStoreElement(); -    element.setKey(key); -    element.setData(value); -    storage.put(key, element); - -  } - -  @Override -  public void putRaw(String key, Object value) throws EaafException { -    if (value instanceof TransactionStoreElement) { -      storage.put(((TransactionStoreElement) value).getKey(), (TransactionStoreElement) value); -    } else { -      log.info(value.getClass().getName() + " is NOT a RAW element of " + ITransactionStorage.class -          .getName()); -    } - -  } - -  @Override -  public void remove(String key) { -    if (containsKey(key)) { -      log.trace("Remove element with key: " + key + " from " + ITransactionStorage.class.getName()); -      boolean delResult = storage.remove(key); -      log.trace("Object: {} removed from cache: {}", key, delResult); - -    } -  } -} diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/storage/SimpleInMemoryTransactionStorage.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/storage/SimpleInMemoryTransactionStorage.java deleted file mode 100644 index 3bda2932..00000000 --- a/connector/src/main/java/at/asitplus/eidas/specific/connector/storage/SimpleInMemoryTransactionStorage.java +++ /dev/null @@ -1,169 +0,0 @@ -/* - * Copyright 2018 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.connector.storage; - -import java.util.ArrayList; -import java.util.Date; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.concurrent.ConcurrentHashMap; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import at.gv.egiz.eaaf.core.api.storage.ITransactionStorage; -import at.gv.egiz.eaaf.core.exceptions.EaafException; -import at.gv.egiz.eaaf.core.exceptions.EaafStorageException; - -public class SimpleInMemoryTransactionStorage implements ITransactionStorage { -  private static final Logger log = LoggerFactory.getLogger(SimpleInMemoryTransactionStorage.class); - -  private final Map<String, TransactionStoreElement> storage = -      new ConcurrentHashMap<>(); - -  @Override -  public void changeKey(String oldKey, String newKey, Object value) throws EaafException { -    if (containsKey(oldKey)) { -      final TransactionStoreElement el = storage.get(oldKey); -      el.setKey(newKey); -      storage.put(newKey, el); -      storage.remove(oldKey); - -    } else { -      throw new EaafStorageException("No element in TransactionStorage with key: " + oldKey); -    } - -  } - -  @Override -  public List<String> clean(Date now, long dataTimeOut) { -    final List<String> result = new ArrayList<>(); -    final Iterator<Entry<String, TransactionStoreElement>> iterator = storage.entrySet().iterator(); -    while (iterator.hasNext()) { -      final Entry<String, TransactionStoreElement> key = iterator.next(); -      synchronized (storage) { -        if (storage.containsKey(key.getKey())) { -          final TransactionStoreElement element = key.getValue(); -          if (now.getTime() - element.getCreated().getTime() > dataTimeOut) { -            result.add(key.getKey()); -          } -        } -      } -    } - -    return result; - -  } - -  @Override -  public boolean containsKey(String key) { -    if (key != null) { -      return storage.containsKey(key); -    } else { -      return false; -    } - -  } - -  @Override -  public Object get(String key) throws EaafException { -    if (key != null && containsKey(key)) { -      final TransactionStoreElement element = storage.get(key); -      return element.getData(); - -    } else { -      return null; -    } -  } - -  @Override -  public <T> T get(String key, Class<T> type) throws EaafException { -    return get(key, type, -1); - -  } - -  @Override -  public <T> T get(String key, Class<T> type, long dataTimeOut) throws EaafException { -    if (key != null && containsKey(key)) { -      final TransactionStoreElement value = storage.get(key); - -      if (dataTimeOut > -1) { -        final long now = new Date().getTime(); -        if (now - value.getCreated().getTime() > dataTimeOut) { -          log.info("Transaction-Data with key: " + key + " is out of time."); -          throw new EaafStorageException("Transaction-Data with key: " + key + " is out of time."); - -        } -      } - -      if (type.isAssignableFrom(value.getData().getClass())) { -        return (T) value.getData(); - -      } else { -        log.warn("Can NOT cast '" + value.getClass() + "' to '" + type + "'"); -      } - -    } - -    return null; -  } - -  @Override -  public Object getRaw(String key) throws EaafException { -    return storage.get(key); - -  } - -  @Override -  public void put(String key, Object value, int dataTimeOut) throws EaafException { -    final TransactionStoreElement element = new TransactionStoreElement(); -    element.setKey(key); -    element.setData(value); -    storage.put(key, element); - -  } - -  @Override -  public void putRaw(String key, Object value) throws EaafException { -    if (value instanceof TransactionStoreElement) { -      storage.put(((TransactionStoreElement) value).getKey(), (TransactionStoreElement) value); -    } else { -      log.info(value.getClass().getName() + " is NOT a RAW element of " + ITransactionStorage.class -          .getName()); -    } - -  } - -  @Override -  public void remove(String key) { -    if (containsKey(key)) { -      log.debug("Remove element with key: " + key + " from " + ITransactionStorage.class.getName()); -      storage.remove(key); - -    } -  } - -} diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/storage/TransactionStoreElement.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/storage/TransactionStoreElement.java deleted file mode 100644 index 4e9e737f..00000000 --- a/connector/src/main/java/at/asitplus/eidas/specific/connector/storage/TransactionStoreElement.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright 2018 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.connector.storage; - -import java.io.Serializable; -import java.util.Date; - -public class TransactionStoreElement implements Serializable { - -  private static final long serialVersionUID = 1L; -  private String key = null; -  private Object data = null; -  private Date created; - -  public String getKey() { -    return key; -  } - -  public void setKey(String key) { -    this.key = key; -  } - -  public Object getData() { -    return data; -  } - -  public void setData(Object data) { -    this.data = data; -  } - -  public Date getCreated() { -    return copyOrNull(created); -  } - -  public void setCreated(Date created) { -    this.created = copyOrNull(created); -  } - -  private Date copyOrNull(Date in) { -    if (in != null) { -      return new Date(in.getTime()); -       -    }  -     -    return null; -       -  } -   -} diff --git a/connector/src/main/java/at/asitplus/eidas/specific/connector/verification/AuthnRequestValidator.java b/connector/src/main/java/at/asitplus/eidas/specific/connector/verification/AuthnRequestValidator.java index e4c68004..23702264 100644 --- a/connector/src/main/java/at/asitplus/eidas/specific/connector/verification/AuthnRequestValidator.java +++ b/connector/src/main/java/at/asitplus/eidas/specific/connector/verification/AuthnRequestValidator.java @@ -42,8 +42,8 @@ import org.slf4j.Logger;  import org.slf4j.LoggerFactory;  import org.springframework.beans.factory.annotation.Autowired; -import at.asitplus.eidas.specific.connector.MsEidasNodeConstants; -import at.asitplus.eidas.specific.connector.config.ServiceProviderConfiguration; +import at.asitplus.eidas.specific.core.MsEidasNodeConstants; +import at.asitplus.eidas.specific.core.config.ServiceProviderConfiguration;  import at.gv.egiz.eaaf.core.api.IRequest;  import at.gv.egiz.eaaf.core.api.data.EaafConstants;  import at.gv.egiz.eaaf.core.api.data.ExtendedPvpAttributeDefinitions; diff --git a/connector/src/main/resources/applicationContext.xml b/connector/src/main/resources/applicationContext.xml index 15ce0a55..ec8e79f4 100644 --- a/connector/src/main/resources/applicationContext.xml +++ b/connector/src/main/resources/applicationContext.xml @@ -15,16 +15,10 @@    <context:annotation-config />    <context:component-scan base-package="at.gv.egiz.eaaf.utils.springboot.ajp"/> - -<!-- -  <context:annotation-config /> -  <mvc:annotation-driven /> -  <mvc:default-servlet-handler /> --->    <mvc:interceptors>      <bean -      class="at.asitplus.eidas.specific.connector.interceptor.WebFrontEndSecurityInterceptor" /> +      class="at.asitplus.eidas.specific.core.interceptor.WebFrontEndSecurityInterceptor" />      <bean        class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">        <property name="paramName" value="lang" /> @@ -32,22 +26,17 @@    </mvc:interceptors>    <bean id="springContextClosingHandler" -        class="at.asitplus.eidas.specific.connector.SpringContextCloseHandler" /> - -<!--  -  <context:property-placeholder -    location="${eidas.ms.configuration}" /> -  --> +        class="at.asitplus.eidas.specific.core.SpringContextCloseHandler" />    <beans profile="deprecatedConfig">    <bean id="BasicMSSpecificNodeConfig" -    class="at.asitplus.eidas.specific.connector.config.BasicConfigurationProvider"> +    class="at.asitplus.eidas.specific.core.config.BasicConfigurationProvider">      <constructor-arg value="#{systemProperties['eidas.ms.configuration']}" />    </bean>    </beans>    <beans profile="!deprecatedConfig">      <bean id="springBootMsSpecificNodeConfig" -          class="at.asitplus.eidas.specific.connector.config.SpringBootBasicConfigurationProvider" /> +          class="at.asitplus.eidas.specific.core.config.SpringBootBasicConfigurationProvider" />    </beans> diff --git a/connector/src/main/resources/specific_eIDAS_connector.beans.xml b/connector/src/main/resources/specific_eIDAS_connector.beans.xml index 34fd088b..7ac6236c 100644 --- a/connector/src/main/resources/specific_eIDAS_connector.beans.xml +++ b/connector/src/main/resources/specific_eIDAS_connector.beans.xml @@ -11,10 +11,8 @@      http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd      http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> -  <import resource="common_gui.beans.xml"/> +  <import resource="specific_eIDAS_core.beans.xml"/> -  <bean id="WebResourceConfiguration" -        class="at.asitplus.eidas.specific.connector.config.StaticResourceConfiguration" />    <bean id="processEngineSignalController"          class="at.asitplus.eidas.specific.connector.controller.ProcessEngineSignalController" /> @@ -24,15 +22,6 @@      <property name="pvpIdpCredentials" ref="PVPEndPointCredentialProvider" />    </bean> -  <bean id="eidasNodeMetadata" -        class="at.asitplus.eidas.specific.connector.health.EidasNodeMetadataHealthIndicator" /> - -  <bean id="AuthenticationManager" -        class="at.asitplus.eidas.specific.connector.auth.AuthenticationManager" /> - -  <bean id="AuthenticationDataBuilder" -        class="at.asitplus.eidas.specific.connector.builder.AuthenticationDataBuilder" /> -    <bean id="PVPEndPointConfiguration"          class="at.asitplus.eidas.specific.connector.config.PvpEndPointConfiguration" /> @@ -66,44 +55,12 @@      <property name="metadataProvider" ref="PVPMetadataProvider" />    </bean> -  <bean id="eaafProtocolAuthenticationService" -        class="at.gv.egiz.eaaf.core.impl.idp.auth.services.ProtocolAuthenticationService"> -    <property name="guiBuilder" ref="mvcGUIBuilderImpl" /> -  </bean> - -  <bean id="securePendingRequestIdGeneration" -        class="at.gv.egiz.eaaf.core.impl.utils.SecurePendingRequestIdGenerationStrategy" /> -    <bean id="PVPMetadataProvider"          class="at.asitplus.eidas.specific.connector.provider.PvpMetadataProvider" />    <bean id="PVPSubjectNameGenerator"          class="at.asitplus.eidas.specific.connector.builder.PvpSubjectNameGenerator" /> -  <bean id="LoALevelMapper" -        class="at.asitplus.eidas.specific.connector.mapper.LoALevelMapper" /> - -  <bean id="GUIBuilderConfigurationFactory" -        class="at.asitplus.eidas.specific.connector.gui.GuiBuilderConfigurationFactory" /> - -  <bean id="velocityGUIBuilderImpl" -        class="at.asitplus.eidas.specific.connector.gui.DefaultVelocityGuiBuilderImpl" /> - -  <bean id="mvcGUIBuilderImpl" -        class="at.gv.egiz.eaaf.core.impl.gui.builder.SpringMvcGuiFormBuilderImpl" /> - -  <bean id="StatusMessageProvider" -        class="at.asitplus.eidas.specific.connector.provider.StatusMessageProvider" /> - -  <bean id="eidasRevisionLogger" -        class="at.asitplus.eidas.specific.connector.logger.RevisionLogger" /> - -  <bean id="eidasStatisticLogger" -        class="at.asitplus.eidas.specific.connector.logger.StatisticLogger" /> - -  <bean id="defaultErrorHandler" -        class="at.gv.egiz.eaaf.core.impl.idp.auth.services.DefaultErrorService"/> -      <!-- Tasks -->    <bean id="GenerateCountrySelectionFrameTask" diff --git a/connector/src/main/resources/specific_eIDAS_connector.storage.beans.xml b/connector/src/main/resources/specific_eIDAS_connector.storage.beans.xml deleted file mode 100644 index 2e4d1742..00000000 --- a/connector/src/main/resources/specific_eIDAS_connector.storage.beans.xml +++ /dev/null @@ -1,52 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<beans xmlns="http://www.springframework.org/schema/beans" -  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" -  xmlns:context="http://www.springframework.org/schema/context" -  xmlns:tx="http://www.springframework.org/schema/tx" -  xmlns:aop="http://www.springframework.org/schema/aop" -  xmlns:mvc="http://www.springframework.org/schema/mvc" -  xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd -    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd -    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd -    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd -    http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> - -  <import -    resource="classpath:specificCommunicationDefinitionApplicationContext.xml" /> - -  <!-- <bean id="SimpleInMemoryTransactionStorage" class="at.asitplus.eidas.specific.connector.storage.SimpleInMemoryTransactionStorage"  -    /> --> - -  <bean id="eIDASCacheTransactionStoreDecorator" -    class="at.asitplus.eidas.specific.connector.storage.EidasCacheTransactionStoreDecorator" /> - -  <bean id="CacheWitheIDASBackend" -    class="at.asitplus.eidas.specific.connector.storage.CacheWithEidasBackend"> -    <constructor-arg ref="msNodeCacheImpl" /> -  </bean> - -  <bean id="msNodeCacheImpl" -    class="eu.eidas.auth.cache.ConcurrentCacheServiceIgniteSpecificCommunicationImpl"> -    <property name="igniteInstanceInitializerSpecificCommunication" ref="eidasIgniteInstanceInitializerSpecificCommunication" /> -    <property name="cacheName" value="msConnectorCache" /> -  </bean> - -  <bean id="IgniteClusterState" -        class="at.asitplus.eidas.specific.connector.health.IgniteClusterHealthIndicator"> -    <property name="igniteInstanceInitializerSpecificCommunication" ref="eidasIgniteInstanceInitializerSpecificCommunication" />         -  </bean> - - -  <!-- bean id="defaultHazelcastInstance" class="java.lang.String"> <constructor-arg  -    value="eidasHazelcastInstance"/> </bean> <bean id="eidasHazelcastInstanceInitializer"  -    class=" eu.eidas.auth.commons.cache.HazelcastInstanceInitializer" init-method="initializeInstance"  -    lazy-init="true"> <property name="hazelcastConfigfileName" value="#{eidasConfigRepository}hazelcast.xml"/>  -    <property name="hazelcastInstanceName" ref="defaultHazelcastInstance"/> </bean>  -    <bean id="springServiceCMapspecificMSSpCorProviderProd" class="eu.eidas.auth.commons.cache.ConcurrentMapServiceDistributedImpl"  -    lazy-init="true"> <property name="hazelcastInstanceInitializer" ref="eidasHazelcastInstanceInitializer"/>  -    <property name="cacheName" value="specificSpRequestCorrelationCacheService"/>  -    </bean> <bean id="springServiceCMapspecificMSSpCorProviderDev" class="eu.eidas.auth.commons.cache.ConcurrentMapServiceDefaultImpl">  -    <property name="expireAfterAccess" value="1800"/> <property name="maximumSize"  -    value="1000"/> </bean --> - -</beans>
\ No newline at end of file diff --git a/connector/src/test/java/at/asitplus/eidas/specific/connector/test/attributes/AuthBlockAttributeBuilderTest.java b/connector/src/test/java/at/asitplus/eidas/specific/connector/test/attributes/AuthBlockAttributeBuilderTest.java index 5c0a1420..6c6276c3 100644 --- a/connector/src/test/java/at/asitplus/eidas/specific/connector/test/attributes/AuthBlockAttributeBuilderTest.java +++ b/connector/src/test/java/at/asitplus/eidas/specific/connector/test/attributes/AuthBlockAttributeBuilderTest.java @@ -14,7 +14,7 @@ import org.springframework.test.context.ContextConfiguration;  import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;  import at.asitplus.eidas.specific.connector.attributes.AuthBlockAttributeBuilder; -import at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants; +import at.asitplus.eidas.specific.core.MsEidasNodeConstants;  import at.gv.egiz.eaaf.core.api.data.ExtendedPvpAttributeDefinitions;  import at.gv.egiz.eaaf.core.api.idp.IAttributeBuilder;  import at.gv.egiz.eaaf.core.api.idp.IAuthData; @@ -62,7 +62,7 @@ public class AuthBlockAttributeBuilderTest extends AbstractAttributeBuilderTest      log.info("starting: " + mTestName);      try {        final IAuthData authData = buildAuthData(); -      ((AuthenticationData) authData).setGenericData(Constants.SZR_AUTHBLOCK, JSW); +      ((AuthenticationData) authData).setGenericData(MsEidasNodeConstants.AUTH_DATA_SZR_AUTHBLOCK, JSW);        final String value = attrBuilde.build(spConfig, authData, gen); @@ -80,7 +80,7 @@ public class AuthBlockAttributeBuilderTest extends AbstractAttributeBuilderTest      log.info("starting: " + mTestName);      try {        final IAuthData authData = buildAuthData(); -      ((AuthenticationData) authData).setGenericData(Constants.SZR_AUTHBLOCK, null); +      ((AuthenticationData) authData).setGenericData(MsEidasNodeConstants.AUTH_DATA_SZR_AUTHBLOCK, null);        final String value = attrBuilde.build(spConfig, authData, gen);        Assert.fail("Attr. Builder provide no 'UnavailableAttributeException'"); @@ -99,7 +99,7 @@ public class AuthBlockAttributeBuilderTest extends AbstractAttributeBuilderTest      log.info("starting: " + mTestName);      try {        final IAuthData authData = buildAuthData(); -      ((AuthenticationData) authData).setGenericData(Constants.SZR_AUTHBLOCK, ""); +      ((AuthenticationData) authData).setGenericData(MsEidasNodeConstants.AUTH_DATA_SZR_AUTHBLOCK, "");        final String value = attrBuilde.build(spConfig, authData, gen);        Assert.fail("Attr. Builder provide no 'UnavailableAttributeException'"); diff --git a/connector/src/test/java/at/asitplus/eidas/specific/connector/test/attributes/EidasBindAttributeBuilderTest.java b/connector/src/test/java/at/asitplus/eidas/specific/connector/test/attributes/EidasBindAttributeBuilderTest.java index 9a2c6cdc..969a22fb 100644 --- a/connector/src/test/java/at/asitplus/eidas/specific/connector/test/attributes/EidasBindAttributeBuilderTest.java +++ b/connector/src/test/java/at/asitplus/eidas/specific/connector/test/attributes/EidasBindAttributeBuilderTest.java @@ -1,7 +1,5 @@  package at.asitplus.eidas.specific.connector.test.attributes; -import static at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants.EIDAS_BIND; -  import org.junit.Assert;  import org.junit.Before;  import org.junit.Rule; @@ -12,6 +10,7 @@ import org.springframework.test.context.ContextConfiguration;  import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;  import at.asitplus.eidas.specific.connector.attributes.EidasBindAttributeBuilder; +import at.asitplus.eidas.specific.core.MsEidasNodeConstants;  import at.gv.egiz.eaaf.core.api.data.ExtendedPvpAttributeDefinitions;  import at.gv.egiz.eaaf.core.api.idp.IAttributeBuilder;  import at.gv.egiz.eaaf.core.api.idp.IAuthData; @@ -54,7 +53,7 @@ public class EidasBindAttributeBuilderTest extends AbstractAttributeBuilderTest      log.info("starting: " + mTestName);      try {        final IAuthData authData = buildAuthData(); -      ((AuthenticationData) authData).setGenericData(EIDAS_BIND, "vuG8w29GT0"); +      ((AuthenticationData) authData).setGenericData(MsEidasNodeConstants.AUTH_DATA_EIDAS_BIND, "vuG8w29GT0");        final String value = attrBuilde.build(spConfig, authData, gen); @@ -70,7 +69,7 @@ public class EidasBindAttributeBuilderTest extends AbstractAttributeBuilderTest      log.info("starting: " + mTestName);      try {        final IAuthData authData = buildAuthData(); -      ((AuthenticationData) authData).setGenericData(EIDAS_BIND, null); +      ((AuthenticationData) authData).setGenericData(MsEidasNodeConstants.AUTH_DATA_EIDAS_BIND, null);        final String value = attrBuilde.build(spConfig, authData, gen);        Assert.fail("Attr. Builder provide no 'UnavailableAttributeException'"); @@ -89,7 +88,7 @@ public class EidasBindAttributeBuilderTest extends AbstractAttributeBuilderTest      log.info("starting: " + mTestName);      try {        final IAuthData authData = buildAuthData(); -      ((AuthenticationData) authData).setGenericData(EIDAS_BIND, ""); +      ((AuthenticationData) authData).setGenericData(MsEidasNodeConstants.AUTH_DATA_EIDAS_BIND, "");        final String value = attrBuilde.build(spConfig, authData, gen);        Assert.fail("Attr. Builder provide no 'UnavailableAttributeException'"); diff --git a/connector/src/test/java/at/asitplus/eidas/specific/connector/test/config/BasicConfigurationTest.java b/connector/src/test/java/at/asitplus/eidas/specific/connector/test/config/BasicConfigurationTest.java index 80307ea2..f9a43b52 100644 --- a/connector/src/test/java/at/asitplus/eidas/specific/connector/test/config/BasicConfigurationTest.java +++ b/connector/src/test/java/at/asitplus/eidas/specific/connector/test/config/BasicConfigurationTest.java @@ -17,7 +17,7 @@ import org.springframework.test.context.ContextConfiguration;  import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;  import org.springframework.test.context.web.WebAppConfiguration; -import at.asitplus.eidas.specific.connector.config.ServiceProviderConfiguration; +import at.asitplus.eidas.specific.core.config.ServiceProviderConfiguration;  import at.gv.egiz.eaaf.core.api.data.EaafConstants;  import at.gv.egiz.eaaf.core.api.idp.IConfigurationWithSP;  import at.gv.egiz.eaaf.core.api.idp.ISpConfiguration; @@ -28,7 +28,7 @@ import net.shibboleth.utilities.java.support.component.ComponentInitializationEx  @RunWith(SpringJUnit4ClassRunner.class)  @ContextConfiguration({      "/applicationContext.xml", -    "/specific_eIDAS_connector.beans.xml", +    "/spring/SpringTest_connector.beans.xml",      "/eaaf_core.beans.xml",      "/eaaf_pvp.beans.xml",      "/eaaf_pvp_idp.beans.xml", diff --git a/connector/src/test/java/at/asitplus/eidas/specific/connector/test/controller/ProcessEngineSignalControllerTest.java b/connector/src/test/java/at/asitplus/eidas/specific/connector/test/controller/ProcessEngineSignalControllerTest.java index 5b612036..499c5937 100644 --- a/connector/src/test/java/at/asitplus/eidas/specific/connector/test/controller/ProcessEngineSignalControllerTest.java +++ b/connector/src/test/java/at/asitplus/eidas/specific/connector/test/controller/ProcessEngineSignalControllerTest.java @@ -25,7 +25,7 @@ import at.gv.egiz.eaaf.core.exceptions.EaafStorageException;  @RunWith(SpringJUnit4ClassRunner.class)  @ContextConfiguration({      "/applicationContext.xml", -    "/specific_eIDAS_connector.beans.xml", +    "/spring/SpringTest_connector.beans.xml",      "/eaaf_core.beans.xml",      "/eaaf_pvp.beans.xml",      "/eaaf_pvp_idp.beans.xml", diff --git a/connector/src/test/java/at/asitplus/eidas/specific/connector/test/health/EidasNodeMetadataHealthIndicatorNoEndpointTest.java b/connector/src/test/java/at/asitplus/eidas/specific/connector/test/health/EidasNodeMetadataHealthIndicatorNoEndpointTest.java deleted file mode 100644 index b04a5bdb..00000000 --- a/connector/src/test/java/at/asitplus/eidas/specific/connector/test/health/EidasNodeMetadataHealthIndicatorNoEndpointTest.java +++ /dev/null @@ -1,70 +0,0 @@ -package at.asitplus.eidas.specific.connector.test.health; - -import java.io.IOException; - -import org.apache.commons.io.IOUtils; -import org.junit.AfterClass; -import org.junit.Assert; -import org.junit.BeforeClass; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.actuate.health.Health; -import org.springframework.http.MediaType; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.TestPropertySource; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.web.WebAppConfiguration; - -import at.asitplus.eidas.specific.connector.health.EidasNodeMetadataHealthIndicator; -import okhttp3.mockwebserver.MockResponse; -import okhttp3.mockwebserver.MockWebServer; - -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration({ -    "/spring/SpringTest-context_healthcheck.xml" }) -@TestPropertySource(locations = {"classpath:/config/junit_config_2_springboot.properties"}) -@WebAppConfiguration -public class EidasNodeMetadataHealthIndicatorNoEndpointTest { -  -  @Autowired EidasNodeMetadataHealthIndicator health; -   -  private static MockWebServer mockWebServer = null; -  -  /** -   * Testclass initializer. -   * -   * @throws IOException In case of an error -   */ -  @BeforeClass -  public static void classInitializer() throws IOException { -    mockWebServer = new MockWebServer(); -    mockWebServer.start(40900); -    mockWebServer.url("/mockup"); - -  } - -  @AfterClass -  public static void resetTestEnviroment() throws NoSuchFieldException, SecurityException, -      IllegalArgumentException, IllegalAccessException, IOException { -    mockWebServer.shutdown(); - -  } -     -  @Test -  public void noEndpointInConfiguration() throws IOException { -    //set-up status -    mockWebServer.enqueue(new MockResponse().setResponseCode(200) -        .setBody(IOUtils.toString(EidasNodeMetadataHealthIndicatorNoEndpointTest.class -            .getResourceAsStream("/config/log4j.properties"), "UTF-8")) -        .setHeader("Content-Type", MediaType.APPLICATION_XML)); - -    //perform test -    Health status = health.health(); -     -    //validate state -    Assert.assertEquals("wrong healthState", Health.unknown().build().getStatus(), status.getStatus()); -     -  } -   -} diff --git a/connector/src/test/java/at/asitplus/eidas/specific/connector/test/health/EidasNodeMetadataHealthIndicatorTest.java b/connector/src/test/java/at/asitplus/eidas/specific/connector/test/health/EidasNodeMetadataHealthIndicatorTest.java deleted file mode 100644 index b044d4d2..00000000 --- a/connector/src/test/java/at/asitplus/eidas/specific/connector/test/health/EidasNodeMetadataHealthIndicatorTest.java +++ /dev/null @@ -1,102 +0,0 @@ -package at.asitplus.eidas.specific.connector.test.health; - -import java.io.IOException; - -import org.apache.commons.io.IOUtils; -import org.junit.AfterClass; -import org.junit.Assert; -import org.junit.BeforeClass; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.actuate.health.Health; -import org.springframework.http.MediaType; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.TestPropertySource; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.web.WebAppConfiguration; - -import at.asitplus.eidas.specific.connector.health.EidasNodeMetadataHealthIndicator; -import okhttp3.mockwebserver.MockResponse; -import okhttp3.mockwebserver.MockWebServer; - -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration({ -    "/spring/SpringTest-context_healthcheck.xml" }) -@TestPropertySource(locations = {"classpath:/config/junit_config_1_springboot.properties"}) -@WebAppConfiguration -public class EidasNodeMetadataHealthIndicatorTest { -  -  @Autowired EidasNodeMetadataHealthIndicator health; -   -  private static MockWebServer mockWebServer = null; -  -  /** -   * Testclass initializer. -   * -   * @throws IOException In case of an error -   */ -  @BeforeClass -  public static void classInitializer() throws IOException { -    mockWebServer = new MockWebServer(); -    mockWebServer.start(40900); -    mockWebServer.url("/mockup"); - -  } - -  @AfterClass -  public static void resetTestEnviroment() throws NoSuchFieldException, SecurityException, -      IllegalArgumentException, IllegalAccessException, IOException { -    mockWebServer.shutdown(); - -  } -   -  @Test -  public void httpStatusCode500() throws IOException { -    //set-up status -    mockWebServer.enqueue(new MockResponse().setResponseCode(500) -        .setBody(IOUtils.toString(EidasNodeMetadataHealthIndicatorTest.class -            .getResourceAsStream("/data/metadata_valid.xml"), "UTF-8")) -        .setHeader("Content-Type", MediaType.APPLICATION_XML)); - -    //perform test -    Health status = health.health(); -     -    //validate state -    Assert.assertEquals("wrong healthState", Health.down().build().getStatus(), status.getStatus()); -     -  }  - -  @Test -  public void httpStatusCode200() throws IOException { -    //set-up status -    mockWebServer.enqueue(new MockResponse().setResponseCode(200) -        .setBody(IOUtils.toString(EidasNodeMetadataHealthIndicatorTest.class -            .getResourceAsStream("/data/metadata_valid.xml"), "UTF-8")) -        .setHeader("Content-Type", MediaType.APPLICATION_XML)); - -    //perform test -    Health status = health.health(); -     -    //validate state -    Assert.assertEquals("wrong healthState", Health.up().build().getStatus(), status.getStatus()); -     -  } -   -  @Test -  public void noXmlResponse() throws IOException { -    //set-up status -    mockWebServer.enqueue(new MockResponse().setResponseCode(200) -        .setBody(IOUtils.toString(EidasNodeMetadataHealthIndicatorTest.class -            .getResourceAsStream("/config/log4j.properties"), "UTF-8")) -        .setHeader("Content-Type", MediaType.APPLICATION_XML)); - -    //perform test -    Health status = health.health(); -     -    //validate state -    Assert.assertEquals("wrong healthState", Health.down().build().getStatus(), status.getStatus()); -     -  } -   -} diff --git a/connector/src/test/java/at/asitplus/eidas/specific/connector/test/saml2/Pvp2SProfileEndPointTest.java b/connector/src/test/java/at/asitplus/eidas/specific/connector/test/saml2/Pvp2SProfileEndPointTest.java index 6b39bd76..ebc07680 100644 --- a/connector/src/test/java/at/asitplus/eidas/specific/connector/test/saml2/Pvp2SProfileEndPointTest.java +++ b/connector/src/test/java/at/asitplus/eidas/specific/connector/test/saml2/Pvp2SProfileEndPointTest.java @@ -47,10 +47,10 @@ import org.springframework.util.Base64Utils;  import org.springframework.web.context.request.RequestContextHolder;  import org.springframework.web.context.request.ServletRequestAttributes; -import at.asitplus.eidas.specific.connector.MsEidasNodeConstants;  import at.asitplus.eidas.specific.connector.controller.Pvp2SProfileEndpoint;  import at.asitplus.eidas.specific.connector.provider.PvpEndPointCredentialProvider;  import at.asitplus.eidas.specific.connector.provider.PvpMetadataProvider; +import at.asitplus.eidas.specific.core.MsEidasNodeConstants;  import at.gv.egiz.eaaf.core.api.IRequest;  import at.gv.egiz.eaaf.core.api.IRequestStorage;  import at.gv.egiz.eaaf.core.exceptions.EaafException; @@ -64,7 +64,7 @@ import net.shibboleth.utilities.java.support.xml.XMLParserException;  @RunWith(SpringJUnit4ClassRunner.class)  @ContextConfiguration({      "/applicationContext.xml", -    "/specific_eIDAS_connector.beans.xml", +    "/spring/SpringTest_connector.beans.xml",      "/eaaf_core.beans.xml",      "/eaaf_pvp.beans.xml",      "/eaaf_pvp_idp.beans.xml", diff --git a/connector/src/test/java/at/asitplus/eidas/specific/connector/test/task/EvaluateCountrySelectionTaskTest.java b/connector/src/test/java/at/asitplus/eidas/specific/connector/test/task/EvaluateCountrySelectionTaskTest.java index 4bff9416..abfc60ff 100644 --- a/connector/src/test/java/at/asitplus/eidas/specific/connector/test/task/EvaluateCountrySelectionTaskTest.java +++ b/connector/src/test/java/at/asitplus/eidas/specific/connector/test/task/EvaluateCountrySelectionTaskTest.java @@ -19,8 +19,8 @@ import org.springframework.test.context.web.WebAppConfiguration;  import org.springframework.web.context.request.RequestContextHolder;  import org.springframework.web.context.request.ServletRequestAttributes; -import at.asitplus.eidas.specific.connector.MsEidasNodeConstants;  import at.asitplus.eidas.specific.connector.processes.tasks.EvaluateCountrySelectionTask; +import at.asitplus.eidas.specific.core.MsEidasNodeConstants;  import at.gv.egiz.eaaf.core.api.data.EaafConstants;  import at.gv.egiz.eaaf.core.exceptions.TaskExecutionException;  import at.gv.egiz.eaaf.core.impl.idp.controller.tasks.AbstractLocaleAuthServletTask; @@ -30,7 +30,7 @@ import at.gv.egiz.eaaf.core.impl.idp.process.ExecutionContextImpl;  @RunWith(SpringJUnit4ClassRunner.class)  @ContextConfiguration({      "/applicationContext.xml", -    "/specific_eIDAS_connector.beans.xml", +    "/spring/SpringTest_connector.beans.xml",      "/eaaf_core.beans.xml",      "/eaaf_pvp.beans.xml",      "/eaaf_pvp_idp.beans.xml", diff --git a/connector/src/test/java/at/asitplus/eidas/specific/connector/test/task/GenerateCountrySelectionFrameTaskTest.java b/connector/src/test/java/at/asitplus/eidas/specific/connector/test/task/GenerateCountrySelectionFrameTaskTest.java index 2aab286f..746c8375 100644 --- a/connector/src/test/java/at/asitplus/eidas/specific/connector/test/task/GenerateCountrySelectionFrameTaskTest.java +++ b/connector/src/test/java/at/asitplus/eidas/specific/connector/test/task/GenerateCountrySelectionFrameTaskTest.java @@ -29,7 +29,7 @@ import at.gv.egiz.eaaf.core.impl.idp.process.ExecutionContextImpl;  @RunWith(SpringJUnit4ClassRunner.class)  @ContextConfiguration({      "/applicationContext.xml", -    "/specific_eIDAS_connector.beans.xml", +    "/spring/SpringTest_connector.beans.xml",      "/eaaf_core.beans.xml",      "/eaaf_pvp.beans.xml",      "/eaaf_pvp_idp.beans.xml", diff --git a/connector/src/test/java/at/asitplus/eidas/specific/connector/test/utils/AuthenticationDataBuilderTest.java b/connector/src/test/java/at/asitplus/eidas/specific/connector/test/utils/AuthenticationDataBuilderTest.java deleted file mode 100644 index cd183088..00000000 --- a/connector/src/test/java/at/asitplus/eidas/specific/connector/test/utils/AuthenticationDataBuilderTest.java +++ /dev/null @@ -1,636 +0,0 @@ -package at.asitplus.eidas.specific.connector.test.utils; - -import static at.asitplus.eidas.specific.connector.MsEidasNodeConstants.PROP_CONFIG_SP_NEW_EID_MODE; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertThrows; -import static org.junit.Assert.assertTrue; - -import java.io.IOException; -import java.security.PublicKey; -import java.util.Date; -import java.util.HashMap; -import java.util.Map; - -import javax.xml.transform.TransformerException; - -import org.apache.commons.lang3.RandomStringUtils; -import org.apache.commons.lang3.RandomUtils; -import org.junit.Assert; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.opensaml.core.config.InitializationException; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.i18n.LocaleContextHolder; -import org.springframework.mock.web.MockHttpServletRequest; -import org.springframework.mock.web.MockHttpServletResponse; -import org.springframework.test.context.ActiveProfiles; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.web.WebAppConfiguration; -import org.springframework.web.context.request.RequestContextHolder; -import org.springframework.web.context.request.ServletRequestAttributes; -import org.w3c.dom.Element; - -import at.asitplus.eidas.specific.connector.builder.AuthenticationDataBuilder; -import at.asitplus.eidas.specific.modules.auth.eidas.v2.Constants; -import at.asitplus.eidas.specific.modules.msproxyservice.MsProxyServiceConstants; -import at.gv.egiz.eaaf.core.api.data.EaafConfigConstants; -import at.gv.egiz.eaaf.core.api.data.EaafConstants; -import at.gv.egiz.eaaf.core.api.data.ExtendedPvpAttributeDefinitions; -import at.gv.egiz.eaaf.core.api.data.PvpAttributeDefinitions; -import at.gv.egiz.eaaf.core.api.data.PvpAttributeDefinitions.EidIdentityStatusLevelValues; -import at.gv.egiz.eaaf.core.api.idp.IAuthData; -import at.gv.egiz.eaaf.core.api.idp.IConfiguration; -import at.gv.egiz.eaaf.core.api.idp.auth.data.IIdentityLink; -import at.gv.egiz.eaaf.core.exceptions.EaafAuthenticationException; -import at.gv.egiz.eaaf.core.exceptions.EaafBuilderException; -import at.gv.egiz.eaaf.core.exceptions.EaafParserException; -import at.gv.egiz.eaaf.core.exceptions.EaafStorageException; -import at.gv.egiz.eaaf.core.impl.builder.BpkBuilder; -import at.gv.egiz.eaaf.core.impl.idp.EidAuthenticationData; -import at.gv.egiz.eaaf.core.impl.idp.auth.data.AuthProcessDataWrapper; -import at.gv.egiz.eaaf.core.impl.idp.auth.data.EidAuthProcessDataWrapper; -import at.gv.egiz.eaaf.core.impl.idp.auth.data.SimpleIdentityLinkAssertionParser; -import at.gv.egiz.eaaf.core.impl.idp.module.test.DummySpConfiguration; -import at.gv.egiz.eaaf.core.impl.idp.module.test.TestRequestImpl; -import at.gv.egiz.eaaf.modules.pvp2.impl.opensaml.initialize.EaafOpenSaml3xInitializer; -import net.shibboleth.utilities.java.support.component.ComponentInitializationException; - -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration({ "/applicationContext.xml", "/spring/SpringTest_connector.beans.xml", "/eaaf_core.beans.xml", -    "/eaaf_pvp.beans.xml", "/eaaf_pvp_idp.beans.xml", "/spring/SpringTest-context_simple_storage.xml" }) -@ActiveProfiles(profiles = {"deprecatedConfig"}) -@WebAppConfiguration -public class AuthenticationDataBuilderTest { - -  @Autowired -  private AuthenticationDataBuilder authenticationDataBuilder; - -  @Autowired(required = true) -  private IConfiguration basicConfig; - -  private MockHttpServletRequest httpReq; -  private MockHttpServletResponse httpResp; -  private TestRequestImpl pendingReq; - -  private DummySpConfiguration oaParam; -  private Map<String, String> spConfig; - -  private String eidasBind; -  private String authBlock; - -  @BeforeClass -  public static void classInitializer() throws InitializationException, ComponentInitializationException { -    final String current = new java.io.File(".").toURI().toString(); -    System.setProperty("eidas.ms.configuration", current -        + "src/test/resources/config/junit_config_3.properties"); - -    EaafOpenSaml3xInitializer.eaafInitialize(); -  } - -  @Before -  public void initialize() throws EaafStorageException { -    httpReq = new MockHttpServletRequest("POST", "https://localhost/ms_connector"); -    httpResp = new MockHttpServletResponse(); -    RequestContextHolder.resetRequestAttributes(); -    RequestContextHolder.setRequestAttributes(new ServletRequestAttributes(httpReq, httpResp)); - -    spConfig = new HashMap<>(); -    spConfig.put(EaafConfigConstants.SERVICE_UNIQUEIDENTIFIER, "testSp"); -    spConfig.put("target", "urn:publicid:gv.at:cdid+XX"); -    spConfig.put(PROP_CONFIG_SP_NEW_EID_MODE, "true"); -    oaParam = new DummySpConfiguration(spConfig, basicConfig); - -    pendingReq = new TestRequestImpl(); -    pendingReq.setAuthUrl("https://localhost/ms_connector"); -    pendingReq.setPendingReqId(RandomStringUtils.randomAlphanumeric(10)); -    pendingReq.setPiiTransactionId(RandomStringUtils.randomAlphanumeric(10)); -    pendingReq.setSpConfig(oaParam); -    authBlock = RandomStringUtils.randomAlphanumeric(20); -    eidasBind = RandomStringUtils.randomAlphanumeric(20); -    pendingReq.getSessionData(AuthProcessDataWrapper.class) -        .setQaaLevel(EaafConstants.EIDAS_LOA_PREFIX + RandomStringUtils.randomAlphabetic(5)); -    pendingReq.getSessionData(AuthProcessDataWrapper.class).setGenericDataToSession( -        PvpAttributeDefinitions.EID_ISSUING_NATION_NAME, -        RandomStringUtils.randomAlphabetic(2).toUpperCase()); - -    LocaleContextHolder.resetLocaleContext(); - -  } - -  @Test -  public void eidasProxyMode() throws EaafAuthenticationException, EaafStorageException { -    // initialize state -    boolean isTestIdentity = RandomUtils.nextBoolean(); -    pendingReq.getSessionData(EidAuthProcessDataWrapper.class).setTestIdentity(isTestIdentity); -    pendingReq.getSessionData(AuthProcessDataWrapper.class).setEidProcess(true); -     -    String givenName = RandomStringUtils.randomAlphabetic(10); -    String familyName = RandomStringUtils.randomAlphabetic(10); -    String dateOfBirth = "1956-12-08"; -    String bpk = RandomStringUtils.randomAlphanumeric(10); -    String cc = pendingReq.getSessionData(AuthProcessDataWrapper.class) -        .getGenericDataFromSession(PvpAttributeDefinitions.EID_ISSUING_NATION_NAME, String.class); -    String spC = RandomStringUtils.randomAlphabetic(2).toUpperCase(); -     -    spConfig.put("target", EaafConstants.URN_PREFIX_EIDAS + cc + "+" + spC); -     -    pendingReq.getSessionData(AuthProcessDataWrapper.class).setEidProcess(true); -    pendingReq.getSessionData(AuthProcessDataWrapper.class).setForeigner(false); -    pendingReq.getSessionData(AuthProcessDataWrapper.class) -        .setGenericDataToSession(PvpAttributeDefinitions.GIVEN_NAME_NAME, givenName); -    pendingReq.getSessionData(AuthProcessDataWrapper.class) -        .setGenericDataToSession(PvpAttributeDefinitions.PRINCIPAL_NAME_NAME, familyName); -    pendingReq.getSessionData(AuthProcessDataWrapper.class) -        .setGenericDataToSession(PvpAttributeDefinitions.BIRTHDATE_NAME, dateOfBirth); -    pendingReq.getSessionData(AuthProcessDataWrapper.class) -        .setGenericDataToSession(MsProxyServiceConstants.ATTR_EIDAS_PERSONAL_IDENTIFIER, bpk); -         -    //set LoA level attribute instead of explicit session-data -    pendingReq.getSessionData(AuthProcessDataWrapper.class) -    .setGenericDataToSession(PvpAttributeDefinitions.EID_CITIZEN_EIDAS_QAA_LEVEL_NAME,  -        pendingReq.getSessionData(AuthProcessDataWrapper.class).getQaaLevel()); -    pendingReq.getSessionData(AuthProcessDataWrapper.class).setQaaLevel(null); -     -     -     -    // execute test -    IAuthData authData = authenticationDataBuilder.buildAuthenticationData(pendingReq); - -     -    // validate state -    Assert.assertNotNull("AuthData null", authData); -    Assert.assertNull("authBlock null", authData.getGenericData(Constants.SZR_AUTHBLOCK, String.class)); -    Assert.assertNull("eidasBind null", authData.getGenericData(Constants.EIDAS_BIND, String.class)); -         -    Assert.assertEquals("LoA",  pendingReq.getSessionData(AuthProcessDataWrapper.class) -        .getGenericDataFromSession(PvpAttributeDefinitions.EID_CITIZEN_EIDAS_QAA_LEVEL_NAME, String.class),  -        authData.getEidasQaaLevel()); -    Assert.assertEquals("CitizenCountry", cc, authData.getCiticenCountryCode()); -    Assert.assertEquals("familyName", familyName, authData.getFamilyName()); -    Assert.assertEquals("givenName", givenName, authData.getGivenName()); -    Assert.assertEquals("DateOfBirth", dateOfBirth, authData.getDateOfBirth()); -     -    Assert.assertEquals("bPK", pendingReq.getSessionData(AuthProcessDataWrapper.class) -        .getGenericDataFromSession(MsProxyServiceConstants.ATTR_EIDAS_PERSONAL_IDENTIFIER, String.class),  -        authData.getGenericData(MsProxyServiceConstants.ATTR_EIDAS_PERSONAL_IDENTIFIER, String.class)); -     -    Assert.assertEquals("testIdentity flag",  -        isTestIdentity ? EidIdentityStatusLevelValues.TESTIDENTITY : EidIdentityStatusLevelValues.IDENTITY,  -        ((EidAuthenticationData)authData).getEidStatus());         -    assertFalse("mandate flag", ((EidAuthenticationData)authData).isUseMandate()); -     -  } -   -  @Test -  public void eidasProxyModeWithJurMandate() throws EaafAuthenticationException, EaafStorageException { -    // initialize state     -    injectRepresentativeInfosIntoSession(); -     -    String commonMandate = RandomStringUtils.randomAlphabetic(10); -     -    // set constant country-code and sourcePin to check hashed eIDAS identifier -    String sourcePinMandate = "asfdsadfsadfsafsdafsadfasr";        -    spConfig.put("target", EaafConstants.URN_PREFIX_EIDAS + "AT+EE"); -     -    // set nat. person mandate information -    pendingReq.getSessionData(AuthProcessDataWrapper.class).setUseMandates(true); -    pendingReq.getSessionData(AuthProcessDataWrapper.class) -        .setGenericDataToSession(PvpAttributeDefinitions.MANDATE_LEG_PER_FULL_NAME_NAME, commonMandate); -    pendingReq.getSessionData(AuthProcessDataWrapper.class) -        .setGenericDataToSession(PvpAttributeDefinitions.MANDATE_LEG_PER_SOURCE_PIN_NAME, sourcePinMandate); -    pendingReq.getSessionData(AuthProcessDataWrapper.class) -        .setGenericDataToSession(PvpAttributeDefinitions.MANDATE_LEG_PER_SOURCE_PIN_TYPE_NAME,  -            EaafConstants.URN_PREFIX_BASEID + "+XFN");             -     -    // execute test -    IAuthData authData = authenticationDataBuilder.buildAuthenticationData(pendingReq); - -     -    // validate state -    Assert.assertNotNull("AuthData null", authData);     -    assertTrue("mandate flag", ((EidAuthenticationData)authData).isUseMandate()); -     -    //check mandate informations -    checkGenericAttribute(authData, PvpAttributeDefinitions.MANDATE_LEG_PER_FULL_NAME_NAME, commonMandate); -    checkGenericAttribute(authData, MsProxyServiceConstants.ATTR_EIDAS_JUR_MANDATOR_PERSONAL_IDENTIFIER,  -        "AT/EE/urn:publicid:gv.at:baseid+XFN+asfdsadfsadfsafsdafsadfasr"); -         -  } -   -  @Test -  public void eidasProxyModeWithJurMandateMissingAttribute() throws EaafAuthenticationException, EaafStorageException { -    // initialize state     -    injectRepresentativeInfosIntoSession(); -     -    // set constant country-code and sourcePin to check hashed eIDAS identifier -    String sourcePinMandate = "asfdsadfsadfsafsdafsadfasr";        -    spConfig.put("target", EaafConstants.URN_PREFIX_EIDAS + "AT+EE"); -     -    // set nat. person mandate information -    pendingReq.getSessionData(AuthProcessDataWrapper.class).setUseMandates(true); -    pendingReq.getSessionData(AuthProcessDataWrapper.class) -        .setGenericDataToSession(PvpAttributeDefinitions.MANDATE_LEG_PER_SOURCE_PIN_NAME, sourcePinMandate); -    pendingReq.getSessionData(AuthProcessDataWrapper.class) -        .setGenericDataToSession(PvpAttributeDefinitions.MANDATE_LEG_PER_SOURCE_PIN_TYPE_NAME,  -            EaafConstants.URN_PREFIX_BASEID + "+XFN");             -     -    // execute test -    // execute test -    EaafAuthenticationException error = assertThrows(EaafAuthenticationException.class,  -        () -> authenticationDataBuilder.buildAuthenticationData(pendingReq)); -    Assert.assertEquals("wrong errorId", "builder.11", error.getErrorId()); -         -  } -   -  @Test -  public void eidasProxyModeWithNatMandate() throws EaafAuthenticationException, EaafStorageException { -    // initialize state     -    injectRepresentativeInfosIntoSession(); -     -    String givenNameMandate = RandomStringUtils.randomAlphabetic(10); -    String familyNameMandate = RandomStringUtils.randomAlphabetic(10); -    String dateOfBirthMandate = "1957-09-15"; -    String bpkMandate = RandomStringUtils.randomAlphanumeric(10); -         -    // set nat. person mandate information -    pendingReq.getSessionData(AuthProcessDataWrapper.class).setUseMandates(true); -    pendingReq.getSessionData(AuthProcessDataWrapper.class) -        .setGenericDataToSession(PvpAttributeDefinitions.MANDATE_NAT_PER_GIVEN_NAME_NAME, givenNameMandate); -    pendingReq.getSessionData(AuthProcessDataWrapper.class) -        .setGenericDataToSession(PvpAttributeDefinitions.MANDATE_NAT_PER_FAMILY_NAME_NAME, familyNameMandate); -    pendingReq.getSessionData(AuthProcessDataWrapper.class) -        .setGenericDataToSession(PvpAttributeDefinitions.MANDATE_NAT_PER_BIRTHDATE_NAME, dateOfBirthMandate); -    pendingReq.getSessionData(AuthProcessDataWrapper.class) -        .setGenericDataToSession(PvpAttributeDefinitions.MANDATE_NAT_PER_BPK_NAME, "AT+XX:" + bpkMandate); -             -    // execute test -    IAuthData authData = authenticationDataBuilder.buildAuthenticationData(pendingReq); - -     -    // validate state -    Assert.assertNotNull("AuthData null", authData);     -    assertTrue("mandate flag", ((EidAuthenticationData)authData).isUseMandate()); -     -    //check mandate informations -    checkGenericAttribute(authData, PvpAttributeDefinitions.MANDATE_NAT_PER_GIVEN_NAME_NAME, givenNameMandate); -    checkGenericAttribute(authData, PvpAttributeDefinitions.MANDATE_NAT_PER_FAMILY_NAME_NAME, familyNameMandate); -    checkGenericAttribute(authData, PvpAttributeDefinitions.MANDATE_NAT_PER_BIRTHDATE_NAME, "1957-09-15"); -    checkGenericAttribute(authData, MsProxyServiceConstants.ATTR_EIDAS_NAT_MANDATOR_PERSONAL_IDENTIFIER, bpkMandate); -         -  } -   -  @Test -  public void eidasProxyModeWithNatMandateWrongBpkFormat() throws EaafAuthenticationException, EaafStorageException { -    // initialize state -    injectRepresentativeInfosIntoSession(); -     -    String givenNameMandate = RandomStringUtils.randomAlphabetic(10); -    String familyNameMandate = RandomStringUtils.randomAlphabetic(10); -    String dateOfBirthMandate = "1957-09-15"; -    String bpkMandate = RandomStringUtils.randomAlphanumeric(10); -         -    // set nat. person mandate information -    pendingReq.getSessionData(AuthProcessDataWrapper.class).setUseMandates(true); -    pendingReq.getSessionData(AuthProcessDataWrapper.class) -        .setGenericDataToSession(PvpAttributeDefinitions.MANDATE_NAT_PER_GIVEN_NAME_NAME, givenNameMandate); -    pendingReq.getSessionData(AuthProcessDataWrapper.class) -        .setGenericDataToSession(PvpAttributeDefinitions.MANDATE_NAT_PER_FAMILY_NAME_NAME, familyNameMandate); -    pendingReq.getSessionData(AuthProcessDataWrapper.class) -        .setGenericDataToSession(PvpAttributeDefinitions.MANDATE_NAT_PER_BIRTHDATE_NAME, dateOfBirthMandate); -    pendingReq.getSessionData(AuthProcessDataWrapper.class) -        .setGenericDataToSession(PvpAttributeDefinitions.MANDATE_NAT_PER_BPK_NAME, bpkMandate); -      -    // execute test -    IAuthData authData = authenticationDataBuilder.buildAuthenticationData(pendingReq); - -     -    // validate state -    Assert.assertNotNull("AuthData null", authData);     -    assertTrue("mandate flag", ((EidAuthenticationData)authData).isUseMandate()); -     -    //check mandate informations -    checkGenericAttribute(authData, PvpAttributeDefinitions.MANDATE_NAT_PER_GIVEN_NAME_NAME, givenNameMandate); -    checkGenericAttribute(authData, PvpAttributeDefinitions.MANDATE_NAT_PER_FAMILY_NAME_NAME, familyNameMandate); -    checkGenericAttribute(authData, PvpAttributeDefinitions.MANDATE_NAT_PER_BIRTHDATE_NAME, "1957-09-15"); -    checkGenericAttribute(authData, MsProxyServiceConstants.ATTR_EIDAS_NAT_MANDATOR_PERSONAL_IDENTIFIER, bpkMandate); -         -  } -   -  @Test -  public void eidasProxyModeWithNatMandateMissingAttribute() throws EaafAuthenticationException, EaafStorageException { -    // initialize state -    injectRepresentativeInfosIntoSession(); -     -    String familyNameMandate = RandomStringUtils.randomAlphabetic(10); -    String dateOfBirthMandate = "1957-09-15"; -    String bpkMandate = RandomStringUtils.randomAlphanumeric(10); -         -    // set nat. person mandate information -    pendingReq.getSessionData(AuthProcessDataWrapper.class).setUseMandates(true); -    pendingReq.getSessionData(AuthProcessDataWrapper.class) -        .setGenericDataToSession(PvpAttributeDefinitions.MANDATE_NAT_PER_FAMILY_NAME_NAME, familyNameMandate); -    pendingReq.getSessionData(AuthProcessDataWrapper.class) -        .setGenericDataToSession(PvpAttributeDefinitions.MANDATE_NAT_PER_BIRTHDATE_NAME, dateOfBirthMandate); -    pendingReq.getSessionData(AuthProcessDataWrapper.class) -        .setGenericDataToSession(PvpAttributeDefinitions.MANDATE_NAT_PER_BPK_NAME, bpkMandate); -     -    // execute test -    EaafAuthenticationException error = assertThrows(EaafAuthenticationException.class,  -        () -> authenticationDataBuilder.buildAuthenticationData(pendingReq)); -    Assert.assertEquals("wrong errorId", "builder.11", error.getErrorId()); -         -  } -   -  @Test -  public void eidMode() throws EaafAuthenticationException, EaafStorageException { -    // initialize state -    boolean isTestIdentity = RandomUtils.nextBoolean(); -    pendingReq.getSessionData(EidAuthProcessDataWrapper.class).setTestIdentity(isTestIdentity); -    pendingReq.getSessionData(AuthProcessDataWrapper.class).setEidProcess(true); -    pendingReq.getSessionData(AuthProcessDataWrapper.class) -        .setGenericDataToSession(Constants.SZR_AUTHBLOCK, authBlock); -    pendingReq.getSessionData(AuthProcessDataWrapper.class) -        .setGenericDataToSession(Constants.EIDAS_BIND, eidasBind); -     -    // execute -    IAuthData authData = authenticationDataBuilder.buildAuthenticationData(pendingReq); - -    // validate state -    Assert.assertNotNull("AuthData null", authData); -    Assert.assertNotNull("authBlock null", authData.getGenericData(Constants.SZR_AUTHBLOCK, String.class)); -    Assert.assertNotNull("eidasBind null", authData.getGenericData(Constants.EIDAS_BIND, String.class)); -    Assert.assertNotNull("LoA null", authData.getEidasQaaLevel()); -    Assert.assertEquals("testIdentity flag",  -        isTestIdentity ? EidIdentityStatusLevelValues.TESTIDENTITY : EidIdentityStatusLevelValues.IDENTITY,  -        ((EidAuthenticationData)authData).getEidStatus()); -     -    String authBlock = authData.getGenericData(Constants.SZR_AUTHBLOCK, String.class); -    String eidasBind = authData.getGenericData(Constants.EIDAS_BIND, String.class); - -    Assert.assertEquals("authBlock not equal", this.authBlock, authBlock); -    Assert.assertEquals("eidasBind not equal", this.eidasBind, eidasBind); -    Assert.assertEquals("piiTransactionId", -        authData.getGenericData(ExtendedPvpAttributeDefinitions.EID_PII_TRANSACTION_ID_NAME, String.class), -        this.pendingReq.getUniquePiiTransactionIdentifier()); -    Assert.assertNotNull("assertion validTo", authData.getSsoSessionValidTo()); -    Assert.assertEquals("LoA", pendingReq.getSessionData(AuthProcessDataWrapper.class).getQaaLevel(), -        authData.getEidasQaaLevel()); -    Assert.assertEquals("EID-ISSUING-NATION", -        pendingReq.getSessionData(AuthProcessDataWrapper.class).getGenericDataFromSession( -            PvpAttributeDefinitions.EID_ISSUING_NATION_NAME), -        authData.getCiticenCountryCode()); - -    Assert.assertNull("bPK", authData.getBpk()); -    Assert.assertNull("bPKType", authData.getBpkType()); -    Assert.assertNull("FamilyName", authData.getFamilyName()); -    Assert.assertNull("GivenName", authData.getGivenName()); -    Assert.assertNull("DateOfBirth", authData.getDateOfBirth()); -    Assert.assertNull("baseId", authData.getIdentificationValue()); -    Assert.assertNull("baseIdType", authData.getIdentificationType()); -    Assert.assertNull("IDL", authData.getIdentityLink()); - -  } - -  @Test -  public void moaIdMode() throws EaafAuthenticationException, EaafBuilderException { -    //initialize state -    boolean isTestIdentity = RandomUtils.nextBoolean(); -    pendingReq.getSessionData(EidAuthProcessDataWrapper.class).setTestIdentity(isTestIdentity);     -    pendingReq.getSessionData(AuthProcessDataWrapper.class).setEidProcess(false); -    IIdentityLink idl = buildDummyIdl(); -    pendingReq.getSessionData(AuthProcessDataWrapper.class).setIdentityLink(idl); -     -    //execute -    IAuthData authData = authenticationDataBuilder.buildAuthenticationData(pendingReq); - -    //validate state -    Assert.assertNotNull("AuthData null", authData); -    Assert.assertNull("authBlock null", authData.getGenericData(Constants.SZR_AUTHBLOCK, String.class)); -    Assert.assertNull("eidasBind null", authData.getGenericData(Constants.EIDAS_BIND, String.class)); -    Assert.assertNull("piiTransactionId",  -        authData.getGenericData(ExtendedPvpAttributeDefinitions.EID_PII_TRANSACTION_ID_NAME, String.class)); -     -    Assert.assertEquals("testIdentity flag",  -        isTestIdentity ? EidIdentityStatusLevelValues.TESTIDENTITY : EidIdentityStatusLevelValues.IDENTITY,  -        ((EidAuthenticationData)authData).getEidStatus()); -     -    Assert.assertNotNull("assertion validTo", authData.getSsoSessionValidTo()); -    Assert.assertNotNull("LoA null", authData.getEidasQaaLevel()); -    Assert.assertEquals("LoA", pendingReq.getSessionData(AuthProcessDataWrapper.class).getQaaLevel(),  -        authData.getEidasQaaLevel()); -    Assert.assertEquals("EID-ISSUING-NATION",  -        pendingReq.getSessionData(AuthProcessDataWrapper.class).getGenericDataFromSession( -            PvpAttributeDefinitions.EID_ISSUING_NATION_NAME),  -        authData.getCiticenCountryCode()); -     -    Assert.assertEquals("FamilyName", idl.getFamilyName(), authData.getFamilyName()); -    Assert.assertEquals("GivenName", idl.getGivenName(), authData.getGivenName()); -    Assert.assertEquals("DateOfBirth", idl.getDateOfBirth(), authData.getDateOfBirth()); -    Assert.assertEquals("bPK",  -        BpkBuilder.generateAreaSpecificPersonIdentifier( -            idl.getIdentificationValue(), EaafConstants.URN_PREFIX_CDID + "XX").getFirst(),  -        authData.getBpk()); -    Assert.assertEquals("bPKType", EaafConstants.URN_PREFIX_CDID + "XX", authData.getBpkType()); -    Assert.assertNotNull("IDL", authData.getIdentityLink()); -     -     -  } - -  private void injectRepresentativeInfosIntoSession() throws EaafStorageException { -    boolean isTestIdentity = RandomUtils.nextBoolean(); -    pendingReq.getSessionData(EidAuthProcessDataWrapper.class).setTestIdentity(isTestIdentity); -    pendingReq.getSessionData(AuthProcessDataWrapper.class).setEidProcess(true); -     -    String givenName = RandomStringUtils.randomAlphabetic(10); -    String familyName = RandomStringUtils.randomAlphabetic(10); -    String dateOfBirth = "1956-12-08"; -    String bpk = RandomStringUtils.randomAlphanumeric(10); -    String cc = pendingReq.getSessionData(AuthProcessDataWrapper.class) -        .getGenericDataFromSession(PvpAttributeDefinitions.EID_ISSUING_NATION_NAME, String.class); -    String spC = RandomStringUtils.randomAlphabetic(2).toUpperCase(); -    spConfig.put("target", EaafConstants.URN_PREFIX_EIDAS + cc + "+" + spC); -     -    pendingReq.getSessionData(AuthProcessDataWrapper.class).setEidProcess(true); -    pendingReq.getSessionData(AuthProcessDataWrapper.class).setForeigner(false); -    pendingReq.getSessionData(AuthProcessDataWrapper.class) -        .setGenericDataToSession(PvpAttributeDefinitions.GIVEN_NAME_NAME, givenName); -    pendingReq.getSessionData(AuthProcessDataWrapper.class) -        .setGenericDataToSession(PvpAttributeDefinitions.PRINCIPAL_NAME_NAME, familyName); -    pendingReq.getSessionData(AuthProcessDataWrapper.class) -        .setGenericDataToSession(PvpAttributeDefinitions.BIRTHDATE_NAME, dateOfBirth); -    pendingReq.getSessionData(AuthProcessDataWrapper.class) -        .setGenericDataToSession(MsProxyServiceConstants.ATTR_EIDAS_PERSONAL_IDENTIFIER, bpk); -     -    //set LoA level attribute instead of explicit session-data -    pendingReq.getSessionData(AuthProcessDataWrapper.class) -    .setGenericDataToSession(PvpAttributeDefinitions.EID_CITIZEN_EIDAS_QAA_LEVEL_NAME,  -        pendingReq.getSessionData(AuthProcessDataWrapper.class).getQaaLevel()); -    pendingReq.getSessionData(AuthProcessDataWrapper.class).setQaaLevel(null); -     -  } -   -  private void checkGenericAttribute(IAuthData authData, String attrName, String expected) { -    assertEquals("Wrong: " + attrName, expected, authData.getGenericData(attrName, String.class)); -     -   } -   -  private IIdentityLink buildDummyIdl() { -    return new IIdentityLink() { -       -      String familyName = RandomStringUtils.randomAlphabetic(10); -      String givenName = RandomStringUtils.randomAlphabetic(10); -      String dateOfBirth = "1955-02-03"; -      String baseId = RandomStringUtils.randomAlphanumeric(20); -      String saml2Serialized = RandomStringUtils.randomAlphanumeric(150); - -      -       -      @Override -      public void setSamlAssertion(Element arg0) throws TransformerException, IOException { -      -      } - -      @Override -      public void setPublicKey(PublicKey[] arg0) { -        // TODO Auto-generated method stub - -      } - -      @Override -      public void setPrPerson(Element arg0) { -        // TODO Auto-generated method stub - -      } - -      @Override -      public void setIssueInstant(String arg0) { -        // TODO Auto-generated method stub - -      } - -      @Override -      public void setIdentificationValue(String arg0) { -        // TODO Auto-generated method stub - -      } - -      @Override -      public void setIdentificationType(String arg0) { -        // TODO Auto-generated method stub - -      } - -      @Override -      public void setGivenName(String arg0) { -        // TODO Auto-generated method stub - -      } - -      @Override -      public void setFamilyName(String arg0) { -        // TODO Auto-generated method stub - -      } - -      @Override -      public void setDsigReferenceTransforms(Element[] arg0) { -        // TODO Auto-generated method stub - -      } - -      @Override -      public void setDateOfBirth(String arg0) { -        // TODO Auto-generated method stub - -      } - -      @Override -      public String getSerializedSamlAssertion() { -        return this.saml2Serialized; -      } - -      @Override -      public Element getSamlAssertion() {         -        IIdentityLink fullIdl; -        try { -          fullIdl = new SimpleIdentityLinkAssertionParser( -              AuthenticationDataBuilderTest.class.getResourceAsStream("/data/test_idl_1.xml")).parseIdentityLink(); -          return fullIdl.getSamlAssertion(); -         -        } catch (EaafParserException e) {          -          e.printStackTrace(); -        } -         -        return null; -         -      } - -      @Override -      public PublicKey[] getPublicKey() { -        // TODO Auto-generated method stub -        return null; -      } - -      @Override -      public Element getPrPerson() { -        // TODO Auto-generated method stub -        return null; -      } - -      @Override -      public String getName() { -        // TODO Auto-generated method stub -        return null; -      } - -      @Override -      public Date getIssueInstantDate() { -        // TODO Auto-generated method stub -        return null; -      } - -      @Override -      public String getIssueInstant() { -        // TODO Auto-generated method stub -        return null; -      } - -      @Override -      public String getIdentificationValue() { -        return this.baseId; -      } - -      @Override -      public String getIdentificationType() { -        return EaafConstants.URN_PREFIX_BASEID; -      } - -      @Override -      public String getGivenName() { -        return this.givenName; -      } - -      @Override -      public String getFamilyName() { -        return this.familyName; -      } - -      @Override -      public Element[] getDsigReferenceTransforms() { -        // TODO Auto-generated method stub -        return null; -      } - -      @Override -      public String getDateOfBirth() { -        return this.dateOfBirth; - -      } -    }; -  } - -} diff --git a/connector/src/test/java/at/asitplus/eidas/specific/connector/test/utils/AuthnRequestValidatorTest.java b/connector/src/test/java/at/asitplus/eidas/specific/connector/test/utils/AuthnRequestValidatorTest.java index c57515a0..ea163e61 100644 --- a/connector/src/test/java/at/asitplus/eidas/specific/connector/test/utils/AuthnRequestValidatorTest.java +++ b/connector/src/test/java/at/asitplus/eidas/specific/connector/test/utils/AuthnRequestValidatorTest.java @@ -31,8 +31,8 @@ import org.springframework.web.context.request.ServletRequestAttributes;  import org.w3c.dom.Element;  import org.xml.sax.SAXException; -import at.asitplus.eidas.specific.connector.MsEidasNodeConstants; -import at.asitplus.eidas.specific.connector.config.ServiceProviderConfiguration; +import at.asitplus.eidas.specific.core.MsEidasNodeConstants; +import at.asitplus.eidas.specific.core.config.ServiceProviderConfiguration;  import at.gv.egiz.eaaf.core.api.data.EaafConfigConstants;  import at.gv.egiz.eaaf.core.api.idp.IConfigurationWithSP;  import at.gv.egiz.eaaf.core.exceptions.AuthnRequestValidatorException; @@ -48,11 +48,11 @@ import net.shibboleth.utilities.java.support.component.ComponentInitializationEx  @RunWith(SpringJUnit4ClassRunner.class)  @ContextConfiguration({      "/applicationContext.xml", -    "/specific_eIDAS_connector.beans.xml", +    "/spring/SpringTest_connector.beans.xml",      "/eaaf_core.beans.xml",      "/eaaf_pvp.beans.xml",      "/eaaf_pvp_idp.beans.xml", -    "/spring/SpringTest-context_simple_storage.xml" }) +    "/spring/SpringTest-context_simple_storage.xml"})  @ActiveProfiles(profiles = {"deprecatedConfig"})  @WebAppConfiguration  @DirtiesContext(classMode = ClassMode.BEFORE_CLASS) diff --git a/connector/src/test/java/at/asitplus/eidas/specific/connector/test/utils/CountrySelectionProcessImplTest.java b/connector/src/test/java/at/asitplus/eidas/specific/connector/test/utils/CountrySelectionProcessImplTest.java index d0343eba..368a8e4e 100644 --- a/connector/src/test/java/at/asitplus/eidas/specific/connector/test/utils/CountrySelectionProcessImplTest.java +++ b/connector/src/test/java/at/asitplus/eidas/specific/connector/test/utils/CountrySelectionProcessImplTest.java @@ -17,8 +17,8 @@ import org.springframework.test.annotation.DirtiesContext.ClassMode;  import org.springframework.test.context.ContextConfiguration;  import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import at.asitplus.eidas.specific.connector.MsEidasNodeConstants;  import at.asitplus.eidas.specific.connector.processes.CountrySelectionProcessImpl; +import at.asitplus.eidas.specific.core.MsEidasNodeConstants;  import at.gv.egiz.eaaf.core.api.data.EaafConfigConstants;  import at.gv.egiz.eaaf.core.api.idp.IConfiguration;  import at.gv.egiz.eaaf.core.api.idp.process.ExecutionContext; diff --git a/connector/src/test/resources/config/logback_config.xml b/connector/src/test/resources/config/logback_config.xml index fa27a46a..bb3de3e8 100644 --- a/connector/src/test/resources/config/logback_config.xml +++ b/connector/src/test/resources/config/logback_config.xml @@ -89,10 +89,10 @@    <logger name="at.gv.egiz.eidas.specific" additivity="false" level="info">      <appender-ref ref="msnode"/>    </logger> -  <logger name="at.gv.egiz.eidas.specific.connector.logger.RevisionLogger" additivity="false" level="info"> +  <logger name="at.gv.egiz.eidas.specific.core.logger.RevisionLogger" additivity="false" level="info">      <appender-ref ref="reversion"/>    </logger> -  <logger name="at.gv.egiz.eidas.specific.connector.logger.StatisticLogger" additivity="false" level="info"> +  <logger name="at.gv.egiz.eidas.specific.core.logger.StatisticLogger" additivity="false" level="info">      <appender-ref ref="statistic"/>    </logger>    <root level="warn"> diff --git a/connector/src/test/resources/spring/SpringTest-context_basic_test.xml b/connector/src/test/resources/spring/SpringTest-context_basic_test.xml deleted file mode 100644 index 5d052be9..00000000 --- a/connector/src/test/resources/spring/SpringTest-context_basic_test.xml +++ /dev/null @@ -1,22 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<beans xmlns="http://www.springframework.org/schema/beans" -  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" -  xmlns:context="http://www.springframework.org/schema/context" -  xmlns:tx="http://www.springframework.org/schema/tx" -  xmlns:aop="http://www.springframework.org/schema/aop" -  xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd -    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd -    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd -    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"> - -  <context:annotation-config /> - -  <import resource="classpath:/SpringTest-context_authManager.xml" /> - -  <bean id="BasicMSSpecificNodeConfig" -    class="at.asitplus.eidas.specific.connector.config.BasicConfigurationProvider"> -    <constructor-arg -      value="#{systemProperties['eidas.ms.configuration']}" /> -  </bean> - -</beans>
\ No newline at end of file diff --git a/connector/src/test/resources/spring/SpringTest-context_healthcheck.xml b/connector/src/test/resources/spring/SpringTest-context_healthcheck.xml deleted file mode 100644 index 3bac88e3..00000000 --- a/connector/src/test/resources/spring/SpringTest-context_healthcheck.xml +++ /dev/null @@ -1,22 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<beans xmlns="http://www.springframework.org/schema/beans" -  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" -  xmlns:context="http://www.springframework.org/schema/context" -  xmlns:tx="http://www.springframework.org/schema/tx" -  xmlns:aop="http://www.springframework.org/schema/aop" -  xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd -    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd -    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd -    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"> - -  <context:annotation-config /> - -  <import resource="classpath:/SpringTest-context_authManager.xml" /> - -  <bean id="basicConfig" -        class="at.asitplus.eidas.specific.connector.config.SpringBootBasicConfigurationProvider" /> - -  <bean id="eidasNodeMetadata" -        class="at.asitplus.eidas.specific.connector.health.EidasNodeMetadataHealthIndicator" /> - -</beans>
\ No newline at end of file diff --git a/connector/src/test/resources/spring/SpringTest-context_simple_storage.xml b/connector/src/test/resources/spring/SpringTest-context_simple_storage.xml deleted file mode 100644 index 5ee3e0b8..00000000 --- a/connector/src/test/resources/spring/SpringTest-context_simple_storage.xml +++ /dev/null @@ -1,15 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<beans xmlns="http://www.springframework.org/schema/beans" -  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" -  xmlns:context="http://www.springframework.org/schema/context" -  xmlns:tx="http://www.springframework.org/schema/tx" -  xmlns:aop="http://www.springframework.org/schema/aop" -  xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd -    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd -    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd -    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"> - -  <bean id="SimpleInMemoryTransactionStorage"  -    class="at.asitplus.eidas.specific.connector.storage.SimpleInMemoryTransactionStorage" /> - -</beans>
\ No newline at end of file diff --git a/connector/src/test/resources/spring/SpringTest_connector.beans.xml b/connector/src/test/resources/spring/SpringTest_connector.beans.xml index 5a1e3f36..9c66ca0f 100644 --- a/connector/src/test/resources/spring/SpringTest_connector.beans.xml +++ b/connector/src/test/resources/spring/SpringTest_connector.beans.xml @@ -10,23 +10,12 @@      http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd      http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd      http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> - -  <context:annotation-config /> -  <mvc:annotation-driven /> -  <mvc:default-servlet-handler /> - -  <bean id="WebResourceConfiguration" -    class="at.asitplus.eidas.specific.connector.config.StaticResourceConfiguration" /> +   +  <import resource="classpath:/spring/SpringTest_core.beans.xml"/>    <bean id="ProcessEngineSignalController"      class="at.asitplus.eidas.specific.connector.controller.ProcessEngineSignalController" /> -  <bean id="AuthenticationManager" -    class="at.asitplus.eidas.specific.connector.auth.AuthenticationManager" /> - -  <bean id="AuthenticationDataBuilder" -    class="at.asitplus.eidas.specific.connector.builder.AuthenticationDataBuilder" /> -    <bean id="PVPEndPointConfiguration"      class="at.asitplus.eidas.specific.connector.config.PvpEndPointConfiguration" /> @@ -45,10 +34,6 @@    <bean id="AuthnRequestValidator"      class="at.asitplus.eidas.specific.connector.verification.AuthnRequestValidator" /> -  <!-- bean id="SAMLVerificationEngine" -        class="at.gv.egiz.eaaf.modules.pvp2.impl.verification.SamlVerificationEngine" /--> - -    <bean id="pvpMetadataService"      class="at.gv.egiz.eaaf.modules.pvp2.idp.impl.MetadataAction">      <property name="pvpIdpCredentials"> @@ -62,54 +47,12 @@      <property name="metadataProvider" ref="PVPMetadataProvider" />    </bean> -  <bean id="eaafProtocolAuthenticationService" -    class="at.gv.egiz.eaaf.core.impl.idp.auth.services.ProtocolAuthenticationService"> -    <property name="guiBuilder" ref="mvcGUIBuilderImpl" /> -  </bean> - -  <bean id="securePendingRequestIdGeneration" -    class="at.gv.egiz.eaaf.core.impl.utils.SecurePendingRequestIdGenerationStrategy" /> -    <bean id="PVPMetadataProvider"      class="at.asitplus.eidas.specific.connector.provider.PvpMetadataProvider" />    <bean id="PVPSubjectNameGenerator"      class="at.asitplus.eidas.specific.connector.builder.PvpSubjectNameGenerator" /> -  <bean id="LoALevelMapper" -    class="at.asitplus.eidas.specific.connector.mapper.LoALevelMapper" /> - -  <bean id="GUIBuilderConfigurationFactory" -    class="at.asitplus.eidas.specific.connector.gui.GuiBuilderConfigurationFactory" /> - -  <bean id="velocityGUIBuilderImpl" -    class="at.asitplus.eidas.specific.connector.gui.DefaultVelocityGuiBuilderImpl" /> - -  <bean id="mvcGUIBuilderImpl" -    class="at.gv.egiz.eaaf.core.impl.gui.builder.SpringMvcGuiFormBuilderImpl" /> - -  <bean id="templateEngine" -    class="org.thymeleaf.spring5.SpringTemplateEngine"> -    <property name="templateResolver" ref="templateResolver" /> -  </bean> - -  <bean class="org.thymeleaf.spring5.view.ThymeleafViewResolver"> -    <property name="order" value="2" /> -    <property name="templateEngine" ref="templateEngine" /> -    <property name="characterEncoding" value="UTF-8" /> -  </bean> - -  <bean id="StatusMessageProvider" -    class="at.asitplus.eidas.specific.connector.provider.StatusMessageProvider" /> - -  <bean id="eidasRevisionLogger" -    class="at.asitplus.eidas.specific.connector.logger.RevisionLogger" /> - -  <bean id="eidasStatisticLogger" -    class="at.asitplus.eidas.specific.connector.logger.StatisticLogger" /> - -  <bean id="defaultErrorHandler" -        class="at.gv.egiz.eaaf.core.impl.idp.auth.services.DefaultErrorService"/>    <!-- Tasks -->    <bean id="GenerateCountrySelectionFrameTask" | 
