summaryrefslogtreecommitdiff
path: root/eaaf_core
diff options
context:
space:
mode:
Diffstat (limited to 'eaaf_core')
-rw-r--r--eaaf_core/checks/spotbugs-exclude.xml7
-rw-r--r--eaaf_core/pom.xml2
-rw-r--r--eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/AuthenticationData.java2
-rw-r--r--eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/auth/builder/AbstractAuthenticationDataBuilder.java26
-rw-r--r--eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/auth/builder/BpkBuilder.java446
-rw-r--r--eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/auth/data/AuthProcessDataWrapper.java28
-rw-r--r--eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/auth/data/EidAuthProcessDataWrapper.java34
-rw-r--r--eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/auth/services/ErrorTicketService.java243
-rw-r--r--eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/auth/services/ProtocolAuthenticationService.java54
-rw-r--r--eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/builder/AttributeBuilderRegistration.java2
-rw-r--r--eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/builder/attributes/BpkAttributeBuilder.java5
-rw-r--r--eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/builder/attributes/EidIdentityStatusLevelAttributeBuiler.java10
-rw-r--r--eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/builder/attributes/EidIssuingNationAttributeBuilder.java2
-rw-r--r--eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/builder/attributes/EidSectorForIdAttributeBuilder.java2
-rw-r--r--eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/builder/attributes/EidSignerCertificate.java7
-rw-r--r--eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/controller/AbstractController.java26
-rw-r--r--eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/controller/AbstractProcessEngineSignalController.java2
-rw-r--r--eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/controller/ProtocolFinalizationController.java38
-rw-r--r--eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/controller/tasks/RestartAuthProzessManagement.java11
-rw-r--r--eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/process/ProcessEngineImpl.java26
-rw-r--r--eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/process/dao/ProcessInstanceStoreDaoImpl.java2
-rw-r--r--eaaf_core/src/main/resources/META-INF/services/at.gv.egiz.eaaf.core.api.idp.IAttributeBuilder1
-rw-r--r--eaaf_core/src/test/java/at/gv/egiz/eaaf/core/impl/idp/auth/builder/BpkBuilderTest.java488
23 files changed, 406 insertions, 1058 deletions
diff --git a/eaaf_core/checks/spotbugs-exclude.xml b/eaaf_core/checks/spotbugs-exclude.xml
index 44642450..70f27b81 100644
--- a/eaaf_core/checks/spotbugs-exclude.xml
+++ b/eaaf_core/checks/spotbugs-exclude.xml
@@ -1,13 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<FindBugsFilter>
<Match>
- <!-- bPK requires SHA1 from specification -->
- <Class name="at.gv.egiz.eaaf.core.impl.idp.auth.builder.BpkBuilder" />
- <OR>
- <Bug pattern="WEAK_MESSAGE_DIGEST_SHA1" />
- </OR>
- </Match>
- <Match>
<!-- only redirects to internal addresses -->
<Class name="at.gv.egiz.eaaf.core.impl.idp.auth.modules.AbstractAuthServletTask"/>
<Method name="performRedirectToItself" />
diff --git a/eaaf_core/pom.xml b/eaaf_core/pom.xml
index 81c98398..2e9023a6 100644
--- a/eaaf_core/pom.xml
+++ b/eaaf_core/pom.xml
@@ -6,7 +6,7 @@
<parent>
<groupId>at.gv.egiz</groupId>
<artifactId>eaaf</artifactId>
- <version>1.1.12-SNAPSHOT</version>
+ <version>1.1.13-SNAPSHOT</version>
</parent>
<groupId>at.gv.egiz.eaaf</groupId>
diff --git a/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/AuthenticationData.java b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/AuthenticationData.java
index 0b352334..a8695885 100644
--- a/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/AuthenticationData.java
+++ b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/AuthenticationData.java
@@ -30,7 +30,7 @@ import java.util.TimeZone;
import at.gv.egiz.eaaf.core.api.idp.IAuthData;
import at.gv.egiz.eaaf.core.api.idp.auth.data.IIdentityLink;
import at.gv.egiz.eaaf.core.exceptions.EaafStorageException;
-import at.gv.egiz.eaaf.core.impl.idp.auth.builder.BpkBuilder;
+import at.gv.egiz.eaaf.core.impl.builder.BpkBuilder;
import org.apache.commons.collections4.map.HashedMap;
import org.apache.commons.lang3.StringUtils;
diff --git a/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/auth/builder/AbstractAuthenticationDataBuilder.java b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/auth/builder/AbstractAuthenticationDataBuilder.java
index c2f85fef..f1811022 100644
--- a/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/auth/builder/AbstractAuthenticationDataBuilder.java
+++ b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/auth/builder/AbstractAuthenticationDataBuilder.java
@@ -24,7 +24,6 @@ import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Collection;
-import java.util.Map.Entry;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
@@ -54,6 +53,7 @@ import at.gv.egiz.eaaf.core.exceptions.EaafException;
import at.gv.egiz.eaaf.core.exceptions.EaafParserException;
import at.gv.egiz.eaaf.core.exceptions.EaafStorageException;
import at.gv.egiz.eaaf.core.exceptions.XPathException;
+import at.gv.egiz.eaaf.core.impl.builder.BpkBuilder;
import at.gv.egiz.eaaf.core.impl.data.Pair;
import at.gv.egiz.eaaf.core.impl.idp.AuthenticationData;
import at.gv.egiz.eaaf.core.impl.idp.auth.data.AuthProcessDataWrapper;
@@ -204,22 +204,18 @@ public abstract class AbstractAuthenticationDataBuilder implements IAuthenticati
setCitizenCountryCode(internalAuthData, authProcessData);
// set generic authProcessData to authdata
- for (final Entry<String, Object> el : authProcessData.getGenericSessionDataStorage()
- .entrySet()) {
- if (el.getKey().startsWith(GENERIC_AUTHDATA_IDENTIFIER)) {
- log.trace("Find generic authProcessData {}. Map it directly to authData", el.getKey());
- try {
- internalAuthData.setGenericData(el.getKey(), el.getValue());
-
- } catch (final EaafStorageException e) {
- log.warn("Can NOT set authData with key: {}", el.getKey(), null, e);
-
- }
-
- }
+ authProcessData.getGenericSessionDataStream()
+ .filter(el -> el.getKey().startsWith(GENERIC_AUTHDATA_IDENTIFIER))
+ .forEach(el -> {
+ log.trace("Find generic authProcessData {}. Map it directly to authData", el.getKey());
+ try {
+ internalAuthData.setGenericData(el.getKey(), el.getValue());
- }
+ } catch (final EaafStorageException e) {
+ log.warn("Can NOT set authData with key: {}", el.getKey(), null, e);
+ }
+ });
}
/**
diff --git a/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/auth/builder/BpkBuilder.java b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/auth/builder/BpkBuilder.java
deleted file mode 100644
index 17d0099e..00000000
--- a/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/auth/builder/BpkBuilder.java
+++ /dev/null
@@ -1,446 +0,0 @@
-/*
- * Copyright 2014 Federal Chancellery Austria MOA-ID has been developed in a cooperation between
- * BRZ, the Federal Chancellery Austria - ICT staff unit, and Graz University of Technology.
- *
- * Licensed under the EUPL, Version 1.1 or - as soon they will be approved by the European
- * Commission - subsequent versions of the EUPL (the "Licence"); You may not use this work except in
- * compliance with the Licence. You may obtain a copy of the Licence at: http://www.osor.eu/eupl/
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the Licence
- * is distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the Licence for the specific language governing permissions and limitations under
- * the Licence.
- *
- * 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.gv.egiz.eaaf.core.impl.idp.auth.builder;
-
-import java.security.InvalidKeyException;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-import java.security.PrivateKey;
-import java.security.PublicKey;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.Map.Entry;
-
-import javax.annotation.Nonnull;
-import javax.crypto.BadPaddingException;
-import javax.crypto.Cipher;
-import javax.crypto.IllegalBlockSizeException;
-import javax.crypto.NoSuchPaddingException;
-
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.lang.Nullable;
-import org.springframework.util.Assert;
-import org.springframework.util.Base64Utils;
-
-import at.gv.egiz.eaaf.core.api.data.EaafConstants;
-import at.gv.egiz.eaaf.core.exceptions.EaafBuilderException;
-import at.gv.egiz.eaaf.core.impl.data.Pair;
-import lombok.extern.slf4j.Slf4j;
-
-
-/**
- * Builder for the bPK, as defined in
- * <code>&quot;Ableitung f&uml;r die bereichsspezifische Personenkennzeichnung&quot;</code>
- * version <code>1.0.1</code> from
- * <code>&quot;reference.e-government.gv.at&quot;</code>.
- *
- */
-@Slf4j
-public class BpkBuilder {
-
- private static final String ERROR_CODE_33 = "builder.33";
-
- private static final String ERROR_MSG_WRONG_TARGET_FORMAT = "bPK-target format must be full URI";
-
-
- /**
- * Calculates an area specific unique person-identifier from a baseID.
- *
- * @param baseID baseId from user but never null
- * @param targetIdentifier target identifier for area specific identifier
- * calculation but never null
- * @return Pair consists of (unique person identifier for this target,
- * targetArea) but never null
- * @throws EaafBuilderException if some input data are not valid
- */
- public static Pair<String, String> generateAreaSpecificPersonIdentifier(final String baseID,
- final String targetIdentifier) throws EaafBuilderException {
- return generateAreaSpecificPersonIdentifier(baseID, EaafConstants.URN_PREFIX_BASEID,
- targetIdentifier);
-
- }
-
- /**
- * Calculates an area specific unique person-identifier from an unique
- * identifier with a specific type.
- *
- * @param baseID baseId from user but never null
- * @param baseIdType Type of the baseID but never null
- * @param targetIdentifier target identifier for area specific identifier
- * calculation but never null
- * @return Pair consists of (unique person identifier for this target,
- * targetArea) but never null
- * @throws EaafBuilderException if some input data are not valid
- */
- public static Pair<String, String> generateAreaSpecificPersonIdentifier(final String baseID,
- final String baseIdType, final String targetIdentifier) throws EaafBuilderException {
- if (StringUtils.isEmpty(baseID)) {
- throw new EaafBuilderException(ERROR_CODE_33, new Object[] { "baseID is empty or null" },
- "BaseId is empty or null");
- }
-
- if (StringUtils.isEmpty(baseIdType)) {
- throw new EaafBuilderException(ERROR_CODE_33,
- new Object[] { "the type of baseID is empty or null" }, "Type of baseId is empty or null");
- }
-
- if (StringUtils.isEmpty(targetIdentifier)) {
- throw new EaafBuilderException(ERROR_CODE_33,
- new Object[] { "SP specific target identifier is empty or null" },
- "SP specific target identifier is empty or null");
- }
-
- if (baseIdType.equals(EaafConstants.URN_PREFIX_BASEID)) {
- log.trace("Find baseID. Starting unique identifier caluclation for this target");
-
- if (targetIdentifier.startsWith(EaafConstants.URN_PREFIX_CDID)) {
- log.trace("Calculate bPK identifier for target: " + targetIdentifier);
- return Pair.newInstance(calculatebPKwbPK(baseID + "+" + targetIdentifier),
- targetIdentifier);
-
- } else if (targetIdentifier.startsWith(EaafConstants.URN_PREFIX_WBPK)) {
- log.trace("Calculate wbPK identifier for target: " + targetIdentifier);
- String commonBpkTarget = normalizeBpkTargetIdentifierToCommonFormat(targetIdentifier);
- return Pair.newInstance(calculatebPKwbPK(
- baseID + "+" + normalizeBpkTargetIdentifierToBpkCalculationFormat(commonBpkTarget)),
- commonBpkTarget);
-
- } else if (targetIdentifier.startsWith(EaafConstants.URN_PREFIX_EIDAS)) {
- log.trace("Calculate eIDAS identifier for target: " + targetIdentifier);
- final String[] splittedTarget = targetIdentifier.split("\\+");
- final String cititzenCountryCode = splittedTarget[1];
- final String eidasOutboundCountry = splittedTarget[2];
-
- if (cititzenCountryCode.equalsIgnoreCase(eidasOutboundCountry)) {
- log.warn("Suspect configuration FOUND!!! CitizenCountry equals DestinationCountry");
-
- }
- return buildEidasIdentifer(baseID, baseIdType, cititzenCountryCode, eidasOutboundCountry);
-
- } else {
- throw new EaafBuilderException(ERROR_CODE_33,
- new Object[] { "Target identifier: " + targetIdentifier + " is NOT allowed or unknown" },
- "Target identifier: " + targetIdentifier + " is NOT allowed or unknown");
- }
-
- } else {
- log.trace("BaseID is not of type " + EaafConstants.URN_PREFIX_BASEID
- + ". Check type against requested target ...");
- if (baseIdType.equals(targetIdentifier)) {
- log.debug("Unique identifier is already area specific. Is nothing todo");
- return Pair.newInstance(baseID, targetIdentifier);
-
- } else {
- log.warn("Get unique identifier for target: " + baseIdType + " but target: "
- + targetIdentifier + " is required!");
- throw new EaafBuilderException(ERROR_CODE_33,
- new Object[] { "Get unique identifier for target: " + baseIdType + " but target: "
- + targetIdentifier + " is required" },
- "Get unique identifier for target: " + baseIdType + " but target: " + targetIdentifier
- + " is required");
-
- }
- }
- }
-
-
-
- /**
- * Create an encrypted bPK.
- *
- * @param bpk unencrypted bPK
- * @param target bPK target in full form
- * @param publicKey Public-Key used for encryption
- * @return encrypted bPK
- * @throws EaafBuilderException In case of an error
- */
- public static String encryptBpk(final String bpk, String target, final PublicKey publicKey)
- throws EaafBuilderException {
- final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
-
- if (!target.startsWith(EaafConstants.URN_PREFIX_WITH_COLON)) {
- throw new EaafBuilderException("builder.32",
- null, ERROR_MSG_WRONG_TARGET_FORMAT);
-
- }
-
- target = normalizeBpkTargetIdentifierToBpkCalculationFormat(
- normalizeBpkTargetIdentifierToCommonFormat(target));
-
- final String input =
- "V1::" + target + "::" + bpk + "::" + sdf.format(new Date());
- // System.out.println(input);
- byte[] result;
- try {
- final byte[] inputBytes = input.getBytes("ISO-8859-1");
- result = encrypt(inputBytes, publicKey);
- return new String(Base64Utils.encode(result), "ISO-8859-1").replaceAll("\r\n", "");
- // return new String(Base64Utils.encode(result,
- // "ISO-8859-1")).replaceAll("\r\n", "");
-
- } catch (final Exception e) {
- throw new EaafBuilderException("bPK encryption FAILED", null, e.getMessage(), e);
-
- }
- }
-
- /**
- * Decrypt an encrypted bPK.
- *
- * @param encryptedBpk encrypted bPK
- * @param target bPK target in full form
- * @param privateKey private-key for decryption
- * @return bPK Pair consists of (unique person identifier for this target,
- * targetArea) but never null
- * @throws EaafBuilderException In case of an error
- */
- public static Pair<String, String> decryptBpk(final String encryptedBpk, String target,
- final PrivateKey privateKey) throws EaafBuilderException {
- String decryptedString;
-
- if (!target.startsWith(EaafConstants.URN_PREFIX_WITH_COLON)) {
- throw new EaafBuilderException("builder.32",
- null, ERROR_MSG_WRONG_TARGET_FORMAT);
-
- }
-
- try {
- final byte[] encryptedBytes = Base64Utils.decode(encryptedBpk.getBytes("ISO-8859-1"));
- final byte[] decryptedBytes = decrypt(encryptedBytes, privateKey);
- decryptedString = new String(decryptedBytes, "ISO-8859-1");
-
- } catch (final Exception e) {
- throw new EaafBuilderException("bPK decryption FAILED", null, e.getMessage(), e);
-
- }
-
- String[] parts = decryptedString.split("::");
- if (parts.length != 4) {
- log.trace("Encrypted bPK has value: {}", decryptedString);
- throw new EaafBuilderException("builder.31", new Object[] {parts.length},
- "encBpk has a suspect format");
-
- }
-
- final String sector = parts[1];
- final String bPK = parts[2];
-
- if (target.equals(normalizeBpkTargetIdentifierToCommonFormat(sector))) {
- return Pair.newInstance(bPK, target);
-
- } else {
- throw new EaafBuilderException("builder.30", new Object[] {sector, target},
- "Decrypted bPK-target does not match");
-
- }
- }
-
- /**
- * Normalize wbPK target identifier for FN, ZVR, and ERSB to XFN, XZVR, and XERSB.
- *
- * <p>If the target is not of this types the target will be returned as it is</p>
- * @param targetIdentifier bPK input target
- * @return XFN, XZVR, XERSB, or targetIdentfier if no normalization is required
- */
- @Nullable
- public static String normalizeBpkTargetIdentifierToCommonFormat(@Nullable String targetIdentifier) {
- if (targetIdentifier != null
- && !targetIdentifier.startsWith(EaafConstants.URN_PREFIX_WBPK_TARGET_WITH_X)) {
- for (Entry<String, String> mapper : EaafConstants.URN_WBPK_TARGET_X_TO_NONE_MAPPER.entrySet()) {
- if (targetIdentifier.startsWith(mapper.getValue())) {
- String wbpkTarget = mapper.getKey() + targetIdentifier.substring(mapper.getValue().length());
- log.trace("Normalize wbPK target: {} to {}", targetIdentifier, wbpkTarget);
- return wbpkTarget;
-
- }
- }
- }
-
- return targetIdentifier;
- }
-
- /**
- * Normalize wbPK target identifier for XFN, XZVR, and XERSB to bPK non-X format like, FN, ZVR, and ERSB.
- *
- * <p>If the target is not of this types the target will be returned as it is</p>
- *
- * @param targetIdentifier bPK input target
- * @return FN, ZVR, ERSB, or targetIdentfier if no normalization is required
- */
- @Nullable
- public static String normalizeBpkTargetIdentifierToNonXFormat(@Nullable String targetIdentifier) {
- if (targetIdentifier != null && targetIdentifier.startsWith(EaafConstants.URN_PREFIX_WBPK)) {
- for (Entry<String, String> mapper : EaafConstants.URN_WBPK_TARGET_X_TO_NONE_MAPPER.entrySet()) {
- if (targetIdentifier.startsWith(mapper.getKey())) {
- String wbpkTarget = mapper.getValue() + targetIdentifier.substring(mapper.getKey().length());
- log.trace("Find new wbPK target: {}. Replace it by: {}", targetIdentifier, wbpkTarget);
- return wbpkTarget;
-
- }
- }
- }
-
- return targetIdentifier;
- }
-
- /**
- * Normalize wbPK target identifier for XFN, XZVR, and XERSB to bPK calculation format like, FN, VR, and ERJ.
- *
- * <p>If the target is not of this types the target will be returned as it is</p>
- *
- * @param targetIdentifier bPK input target
- * @return FN, VR, ERJ, or targetIdentfier if no normalization is required
- */
- @Nullable
- public static String normalizeBpkTargetIdentifierToBpkCalculationFormat(@Nullable String targetIdentifier) {
- if (targetIdentifier != null && targetIdentifier.startsWith(EaafConstants.URN_PREFIX_WBPK)) {
- for (Entry<String, String> mapper : EaafConstants.URN_WBPK_TARGET_X_TO_CALC_TARGET_MAPPER.entrySet()) {
- if (targetIdentifier.startsWith(mapper.getKey())) {
- String wbpkTarget = mapper.getValue() + targetIdentifier.substring(mapper.getKey().length());
- log.trace("Find new wbPK target: {}. Replace it by: {}", targetIdentifier, wbpkTarget);
- return wbpkTarget;
-
- }
- }
- }
-
- return targetIdentifier;
- }
-
- /**
- * Remove prefixes from bPK target identifier and get only the SP specific part.
- *
- * @param type full qualified bPK target with 'urn:publicid:gv.at:' prefix
- * @return SP specific part, or full type if reduction is not supported
- */
- @Nonnull
- public static String removeBpkTypePrefix(@Nonnull final String type) {
- Assert.isTrue(type != null, "bPKType is 'NULL'");
- if (type.startsWith(EaafConstants.URN_PREFIX_WBPK)) {
- return type.substring(EaafConstants.URN_PREFIX_WBPK.length());
-
- } else if (type.startsWith(EaafConstants.URN_PREFIX_CDID)) {
- return type.substring(EaafConstants.URN_PREFIX_CDID.length());
-
- } else if (type.startsWith(EaafConstants.URN_PREFIX_EIDAS)) {
- return type.substring(EaafConstants.URN_PREFIX_EIDAS.length());
-
- } else {
- return type;
-
- }
- }
-
- /**
- * Builds the eIDAS from the given parameters.
- *
- * @param baseId baseID of the citizen
- * @param baseIdType Type of the baseID
- * @param sourceCountry CountryCode of that country, which build the eIDAs
- * ID
- * @param destinationCountry CountryCode of that country, which receives the
- * eIDAs ID
- *
- * @return Pair eIDAs/bPKType in a BASE64 encoding
- * @throws EaafBuilderException if some input data are not valid
- */
- private static Pair<String, String> buildEidasIdentifer(final String baseId,
- final String baseIdType, final String sourceCountry, final String destinationCountry)
- throws EaafBuilderException {
- String bpk = null;
- String bpkType = null;
-
- // check if we have been called by public sector application
- if (baseIdType.startsWith(EaafConstants.URN_PREFIX_BASEID)) {
- bpkType = EaafConstants.URN_PREFIX_EIDAS + sourceCountry + "+" + destinationCountry;
- log.debug("Building eIDAS identification from: [identValue]+" + bpkType);
- bpk = calculatebPKwbPK(baseId + "+" + bpkType);
-
- } else { // if not, sector identification value is already calculated by BKU
- log.debug("eIDAS eIdentifier already provided by BKU");
- bpk = baseId;
- }
-
- if (StringUtils.isEmpty(bpk) || StringUtils.isEmpty(sourceCountry)
- || StringUtils.isEmpty(destinationCountry)) {
- throw new EaafBuilderException("builder.00",
- new Object[] { "eIDAS-ID",
- "Unvollständige Parameterangaben: identificationValue=" + bpk + ", Zielland="
- + destinationCountry + ", Ursprungsland=" + sourceCountry },
- "eIDAS-ID: Unvollständige Parameterangaben: identificationValue=" + bpk + ", Zielland="
- + destinationCountry + ", Ursprungsland=" + sourceCountry);
- }
-
- log.trace("eIDAS pseudonym generation finished. ");
- final String eIdentifier = sourceCountry + "/" + destinationCountry + "/" + bpk;
-
- return Pair.newInstance(eIdentifier, bpkType);
- }
-
- private static String calculatebPKwbPK(final String basisbegriff) throws EaafBuilderException {
- try {
- final MessageDigest md = MessageDigest.getInstance("SHA-1");
- final byte[] hash = md.digest(basisbegriff.getBytes("ISO-8859-1"));
- final String hashBase64 =
- new String(Base64Utils.encode(hash), "ISO-8859-1").replaceAll("\r\n", ""); // Base64Utils.encode(hash);
- return hashBase64;
-
- } catch (final Exception ex) {
- throw new EaafBuilderException(ERROR_CODE_33, new Object[] {ex.toString() },
- ex.getMessage(), ex);
-
- }
-
- }
-
- private static byte[] encrypt(final byte[] inputBytes, final PublicKey publicKey)
- throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException,
- IllegalBlockSizeException, BadPaddingException {
- byte[] result;
- Cipher cipher = null;
- try {
- cipher = Cipher.getInstance("RSA/ECB/OAEPPadding"); // try with bouncycastle
-
- } catch (final NoSuchAlgorithmException e) {
- cipher = Cipher.getInstance("RSA/ECB/OAEP"); // try with iaik provider
- }
- cipher.init(Cipher.ENCRYPT_MODE, publicKey);
- result = cipher.doFinal(inputBytes);
-
- return result;
- }
-
- private static byte[] decrypt(final byte[] encryptedBytes, final PrivateKey privateKey)
- throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException,
- IllegalBlockSizeException, BadPaddingException {
- byte[] result;
- Cipher cipher = null;
- try {
- cipher = Cipher.getInstance("RSA/ECB/OAEPPadding"); // try with bouncycastle
-
- } catch (final NoSuchAlgorithmException e) {
- cipher = Cipher.getInstance("RSA/ECB/OAEP"); // try with iaik provider
-
- }
- cipher.init(Cipher.DECRYPT_MODE, privateKey);
- result = cipher.doFinal(encryptedBytes);
- return result;
-
- }
-}
diff --git a/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/auth/data/AuthProcessDataWrapper.java b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/auth/data/AuthProcessDataWrapper.java
index 8eef4a8e..368652be 100644
--- a/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/auth/data/AuthProcessDataWrapper.java
+++ b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/auth/data/AuthProcessDataWrapper.java
@@ -22,9 +22,11 @@ package at.gv.egiz.eaaf.core.impl.idp.auth.data;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
-import java.util.HashMap;
import java.util.Map;
+import java.util.Map.Entry;
import java.util.TimeZone;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
import javax.annotation.Nullable;
@@ -264,16 +266,20 @@ public class AuthProcessDataWrapper
* getGenericSessionDataStorage()
*/
@Override
- public Map<String, Object> getGenericSessionDataStorage() {
- final Map<String, Object> result = new HashMap<>();
- for (final Map.Entry<String, Object> el : authProcessData.entrySet()) {
- if (el.getKey().startsWith(GENERIC_PREFIX)) {
- result.put(el.getKey().substring(GENERIC_PREFIX.length()), el.getValue());
- }
-
- }
-
- return result;
+ public Map<String, Object> getGenericSessionDataStorage() {
+ return authProcessData.entrySet().stream()
+ .filter(el -> el.getKey().startsWith(GENERIC_PREFIX))
+ .collect(
+ Collectors.toMap(
+ el -> el.getKey().substring(GENERIC_PREFIX.length()),
+ value -> value.getValue()));
+
+ }
+
+ @Override
+ public Stream<Entry<String, Object>> getGenericSessionDataStream() {
+ return getGenericSessionDataStorage().entrySet().stream();
+
}
/*
diff --git a/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/auth/data/EidAuthProcessDataWrapper.java b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/auth/data/EidAuthProcessDataWrapper.java
new file mode 100644
index 00000000..48a2206b
--- /dev/null
+++ b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/auth/data/EidAuthProcessDataWrapper.java
@@ -0,0 +1,34 @@
+package at.gv.egiz.eaaf.core.impl.idp.auth.data;
+
+import java.util.Map;
+
+import at.gv.egiz.eaaf.core.api.idp.auth.data.IEidAuthProcessData;
+
+/**
+ * Authentication session-data that adds ID Austria specific information.
+ *
+ * @author tlenz
+ *
+ */
+public class EidAuthProcessDataWrapper extends AuthProcessDataWrapper implements IEidAuthProcessData {
+
+ private static final String VALUE_INTERNAL_TEST_IDENTITY_PROCESS = "direct_is_testidentity";
+
+ public EidAuthProcessDataWrapper(Map<String, Object> authProcessData) {
+ super(authProcessData);
+
+ }
+
+ @Override
+ public boolean isTestIdentity() {
+ return wrapStoredObject(VALUE_INTERNAL_TEST_IDENTITY_PROCESS, false, Boolean.class);
+
+ }
+
+ @Override
+ public void setTestIdentity(boolean flag) {
+ authProcessData.put(VALUE_INTERNAL_TEST_IDENTITY_PROCESS, flag);
+
+ }
+
+}
diff --git a/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/auth/services/ErrorTicketService.java b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/auth/services/ErrorTicketService.java
new file mode 100644
index 00000000..0834aa27
--- /dev/null
+++ b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/auth/services/ErrorTicketService.java
@@ -0,0 +1,243 @@
+package at.gv.egiz.eaaf.core.impl.idp.auth.services;
+
+import java.io.InputStream;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+
+import javax.annotation.PostConstruct;
+import javax.servlet.http.HttpServletRequest;
+
+import org.apache.commons.lang3.RandomStringUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.text.StringEscapeUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.io.Resource;
+import org.springframework.core.io.ResourceLoader;
+import org.springframework.stereotype.Service;
+
+import at.gv.egiz.eaaf.core.api.IStatusMessenger;
+import at.gv.egiz.eaaf.core.api.data.EaafConstants;
+import at.gv.egiz.eaaf.core.api.idp.IConfiguration;
+import at.gv.egiz.eaaf.core.exceptions.EaafException;
+import at.gv.egiz.eaaf.core.exceptions.TaskExecutionException;
+import at.gv.egiz.eaaf.core.impl.idp.controller.ProtocolFinalizationController;
+import at.gv.egiz.eaaf.core.impl.utils.FileUtils;
+import at.gv.egiz.eaaf.core.impl.utils.ServletUtils;
+import lombok.Getter;
+
+@Service()
+public class ErrorTicketService {
+ private static final Logger log = LoggerFactory.getLogger(ErrorTicketService.class);
+
+ private static final String CONFIG_PROP_ERRORHANDLING_ACTION_PATH = "core.errorhandling.action";
+ private static final String TECH_LOG_MSG = "errorCode={} Message={}";
+ private static final String TICKET_LOG_MSG = "Ticket={} errorCode={} Message={}";
+
+ private final HashMap<String, String> propertyMap = new HashMap<String, String>();
+
+
+ public enum ActionType {
+ TICKET_REDIRECT("ticket_redirect"), TICKET_NOREDIRECT("ticket_noredirect"), NOTICKET_REDIRECT(
+ "noticket_redirect"), NOTICKET_NOREDIRECT("noticket_noredirect"), NOTICKET_AUTOREDIRECT(
+ "noticket_autoredirect");
+
+ private final String name;
+
+ ActionType(final String text) {
+ this.name = text;
+ }
+
+ @Override
+ public String toString() {
+ return name;
+ }
+ }
+
+ @Autowired(required = true)
+ IConfiguration basicConfig;
+ @Autowired(required = true)
+ ResourceLoader resourceLoader;
+
+ @PostConstruct
+ private void initialize() throws EaafException {
+ log.info("initErrorTicketService");
+
+ final String ticketConfPath = basicConfig.getBasicConfiguration(CONFIG_PROP_ERRORHANDLING_ACTION_PATH);
+ log.info("ticketConfPath" + ticketConfPath);
+
+
+ if (StringUtils.isEmpty(ticketConfPath)) {
+ log.error("Error: Path to errorhandling-action mapping not known");
+ throw new EaafException("internal.configuration.00",
+ new Object[]{CONFIG_PROP_ERRORHANDLING_ACTION_PATH});
+ } else {
+
+ Properties getProperties = new Properties();
+ String fullFilePath = null;
+ try {
+
+ fullFilePath = FileUtils
+ .makeAbsoluteUrl(ticketConfPath, basicConfig.getConfigurationRootDirectory());
+ final Resource ressource = resourceLoader.getResource(fullFilePath);
+ final InputStream is = ressource.getInputStream();
+ getProperties.load(is);
+ is.close();
+ propertyMap.putAll((Map) getProperties);
+
+ // log.error(propertyMap.toString());
+ // log.error("working: " + propertyMap.get("auth.00"));
+
+ } catch (Exception e) {
+ log.error("Error: could not found file.", e);
+ throw new EaafException("internal.configuration.01",
+ new Object[]{CONFIG_PROP_ERRORHANDLING_ACTION_PATH, "File for errorhandling-action mapping cloud "
+ + "not be found."});
+ }
+ }
+ }
+
+ /**
+ * creates error handling data.
+ * @param throwable error
+ * @param req http request
+ * @return eror handle Data
+ * @throws EaafException In case of an internal error
+ */
+ public HandleData createHandleData(Throwable throwable, HttpServletRequest req) throws EaafException {
+ HandleData data = new HandleData(throwable, req);
+ extractErrorCode(data);
+ setUpErrorData(data);
+
+ return data;
+ }
+
+ private void extractErrorCode(HandleData data) {
+ Throwable originalException;
+ if (data.throwable instanceof TaskExecutionException
+ && ((TaskExecutionException) data.throwable).getOriginalException() != null) {
+ originalException = ((TaskExecutionException) data.throwable).getOriginalException();
+
+ } else {
+ originalException = data.throwable;
+
+ }
+
+ if (!(originalException instanceof EaafException)) {
+ data.errorCode = IStatusMessenger.CODES_INTERNAL_ERROR_GENERIC;
+
+ } else {
+ data.errorCode = ((EaafException) originalException).getErrorId();
+
+ }
+ }
+
+ private void setUpErrorData(HandleData data) throws EaafException {
+
+ if (propertyMap.containsKey(data.errorCode)) {
+ String action = propertyMap.get(data.errorCode);
+
+ if (action.equals(ActionType.TICKET_REDIRECT.toString())) {
+ data.actionType = ActionType.TICKET_REDIRECT;
+ data.generateSupportTicket();
+ data.generateRedirect();
+
+ } else if (action.equals(ActionType.TICKET_NOREDIRECT.toString())) {
+ data.actionType = ActionType.TICKET_NOREDIRECT;
+ data.generateSupportTicket();
+
+ } else if (action.equals(ActionType.NOTICKET_REDIRECT.toString())) {
+ data.actionType = ActionType.NOTICKET_REDIRECT;
+ data.generateRedirect();
+
+ } else if (action.equals(ActionType.NOTICKET_AUTOREDIRECT.toString())) {
+ data.actionType = ActionType.NOTICKET_AUTOREDIRECT;
+
+ } else { // ActionType.NOTICKET_NOREDIRECT -> nothing to be done
+ data.actionType = ActionType.NOTICKET_NOREDIRECT;
+
+ }
+
+ } else {
+ data.generateSupportTicket();
+ throw new EaafException("internal.configuration.00",
+ new Object[]{data.errorCode + " in on_error_action" + ".properties"});
+ }
+ }
+
+ static class HandleData {
+ private final HttpServletRequest req;
+ @Getter
+ private String supportTicket;
+ @Getter
+ private String redirectUrl;
+ @Getter
+ private final Throwable throwable;
+ @Getter
+ private String errorCode;
+ @Getter
+ private ActionType actionType;
+
+
+ private HandleData(Throwable throwable, HttpServletRequest req) {
+ this.throwable = throwable;
+ this.req = req;
+ }
+
+ private void generateRedirect() {
+ redirectUrl = ServletUtils.getBaseUrl(req);
+ redirectUrl +=
+ ProtocolFinalizationController.ENDPOINT_ERROR_REDIRECT + "?" + EaafConstants.PARAM_HTTP_ERROR_CODE + "="
+ + StringEscapeUtils.escapeHtml4(req.getParameter(EaafConstants.PARAM_HTTP_ERROR_CODE));
+
+ }
+
+ private void generateSupportTicket() {
+
+ String randomCode =
+ RandomStringUtils.randomAlphanumeric(4).toUpperCase() + '-' + RandomStringUtils.randomAlphanumeric(4)
+ .toUpperCase() + '-' + RandomStringUtils.randomAlphanumeric(4).toUpperCase();
+ supportTicket = randomCode;
+ }
+
+ /**
+ * Logs error to technical log.
+ */
+ public void log_error() {
+
+ if (supportTicket != null) {
+ log.error(TICKET_LOG_MSG, supportTicket, errorCode, throwable.getMessage(), throwable);
+ } else {
+ log.error(TECH_LOG_MSG, errorCode, throwable.getMessage(), throwable);
+ }
+ }
+
+ /**
+ * Logs info to technical log.
+ */
+ public void log_info() {
+
+ if (supportTicket != null) {
+ log.info(TICKET_LOG_MSG, supportTicket, errorCode, throwable.getMessage(), throwable);
+
+ } else {
+ log.info(TECH_LOG_MSG, errorCode, throwable.getMessage(), throwable);
+ }
+ }
+
+ /**
+ * Logs warn to technical log.
+ */
+ public void log_warn() {
+
+ if (supportTicket != null) {
+ log.warn(TICKET_LOG_MSG, supportTicket, errorCode, throwable.getMessage(), throwable);
+
+ } else {
+ log.warn(TECH_LOG_MSG, errorCode, throwable.getMessage(), throwable);
+ }
+ }
+ }
+}
diff --git a/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/auth/services/ProtocolAuthenticationService.java b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/auth/services/ProtocolAuthenticationService.java
index ffa1163f..a64ad45e 100644
--- a/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/auth/services/ProtocolAuthenticationService.java
+++ b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/auth/services/ProtocolAuthenticationService.java
@@ -19,6 +19,27 @@
package at.gv.egiz.eaaf.core.impl.idp.auth.services;
+import java.io.IOException;
+import java.util.HashSet;
+
+import javax.annotation.PostConstruct;
+import javax.naming.ConfigurationException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.lang3.ArrayUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.text.StringEscapeUtils;
+import org.owasp.encoder.Encode;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationContext;
+import org.springframework.lang.NonNull;
+import org.springframework.lang.Nullable;
+import org.springframework.stereotype.Service;
+import org.springframework.util.SerializationUtils;
+
import at.gv.egiz.components.eventlog.api.EventConstants;
import at.gv.egiz.eaaf.core.api.IRequest;
import at.gv.egiz.eaaf.core.api.IRequestStorage;
@@ -58,25 +79,8 @@ import at.gv.egiz.eaaf.core.impl.idp.controller.ProtocolFinalizationController;
import at.gv.egiz.eaaf.core.impl.idp.controller.protocols.RequestImpl;
import at.gv.egiz.eaaf.core.impl.utils.KeyValueUtils;
import at.gv.egiz.eaaf.core.impl.utils.ServletUtils;
-import org.apache.commons.lang3.ArrayUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.commons.text.StringEscapeUtils;
-import org.owasp.encoder.Encode;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.ApplicationContext;
-import org.springframework.lang.NonNull;
-import org.springframework.lang.Nullable;
-import org.springframework.stereotype.Service;
-import org.springframework.util.SerializationUtils;
-import javax.annotation.PostConstruct;
-import javax.naming.ConfigurationException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.util.HashSet;
+
@Service
@@ -107,8 +111,10 @@ public class ProtocolAuthenticationService implements IProtocolAuthenticationSer
@Autowired(required = false)
private ISsoManager ssoManager;
+
@Autowired
private IStatisticLogger statisticLogger;
+
@Autowired
private IRevisionLogger revisionsLogger;
@@ -233,7 +239,7 @@ public class ProtocolAuthenticationService implements IProtocolAuthenticationSer
final HttpServletResponse resp, final IRequest protocolRequest) throws EaafException, IOException {
try {
IErrorService.IHandleData errorData = errorTicketService.createHandleData(throwable, req);
-
+
if (errorData.getActionType().equals(IErrorService.ActionType.TICKET_REDIRECT) || errorData.getActionType()
.equals(IErrorService.ActionType.NOTICKET_REDIRECT)) {
@@ -245,7 +251,6 @@ public class ProtocolAuthenticationService implements IProtocolAuthenticationSer
.validateAndGetPendingRequestId(req.getParameter(EaafConstants.PARAM_HTTP_ERROR_CODE));
transactionStorage.put(errorId, serialized, -1);
-
// log Error to technical log
errorData.logExceptionToTechnicalLog(logOnInfoLevel);
@@ -282,7 +287,6 @@ public class ProtocolAuthenticationService implements IProtocolAuthenticationSer
} catch (final Throwable e) {
// if building error response results in error, we try with with handleErrorNoRedirect
handleErrorNoRedirect(e, req, resp, true);
-
}
}
@@ -304,10 +308,11 @@ public class ProtocolAuthenticationService implements IProtocolAuthenticationSer
"Requested protocol module Class is NULL or does not implement the IModulInfo interface.");
}
-
+
return (IModulInfo) applicationContext.getBean(clazz);
}
+
@Override
public void handleErrorNoRedirect(final Throwable throwable, final HttpServletRequest req,
final HttpServletResponse resp, final boolean writeExceptionToStatisticLog) throws EaafException, IOException {
@@ -334,6 +339,7 @@ public class ProtocolAuthenticationService implements IProtocolAuthenticationSer
}
}
+
@Override
public void forwardToErrorHandler(Pair<IRequest, Throwable> errorToHandle, String errorKey,
final HttpServletRequest req, final HttpServletResponse resp) throws GuiBuildException {
@@ -413,7 +419,6 @@ public class ProtocolAuthenticationService implements IProtocolAuthenticationSer
}
-
@PostConstruct
private void initializer() {
log.trace("Initializing {} ...", ProtocolAuthenticationService.class.getName());
@@ -500,6 +505,7 @@ public class ProtocolAuthenticationService implements IProtocolAuthenticationSer
PARAM_GUI_ERRORCODEPARAMS, ArrayUtils.toString(errorCodeParams));
errorTicketService.displayErrorData(c, errorData);
+
} else {
log.info("Can not ADD error message, because 'GUIBuilderConfiguration' is not modifieable ");
}
@@ -558,7 +564,7 @@ public class ProtocolAuthenticationService implements IProtocolAuthenticationSer
private String generateErrorRedirectUrl(final HttpServletRequest req, String errorKey) {
String redirectUrl = null;
redirectUrl = ServletUtils.getBaseUrl(req);
- redirectUrl += "/" + ProtocolFinalizationController.ENDPOINT_ERRORHANDLING + "?"
+ redirectUrl += ProtocolFinalizationController.ENDPOINT_ERRORHANDLING + "?"
+ EaafConstants.PARAM_HTTP_ERROR_CODE + "=" + errorKey;
return redirectUrl;
diff --git a/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/builder/AttributeBuilderRegistration.java b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/builder/AttributeBuilderRegistration.java
index 135bd789..b554ad05 100644
--- a/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/builder/AttributeBuilderRegistration.java
+++ b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/builder/AttributeBuilderRegistration.java
@@ -24,7 +24,7 @@ public class AttributeBuilderRegistration {
log.info("Loading protocol attribut-builder modules:");
if (attributBuilderLoader != null) {
- final Iterator<IAttributeBuilder> moduleLoaderInterator = attributBuilderLoader.iterator();
+ final Iterator<IAttributeBuilder> moduleLoaderInterator = attributBuilderLoader.iterator();
while (moduleLoaderInterator.hasNext()) {
try {
final IAttributeBuilder modul = moduleLoaderInterator.next();
diff --git a/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/builder/attributes/BpkAttributeBuilder.java b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/builder/attributes/BpkAttributeBuilder.java
index 70e0f6d1..5cbfec01 100644
--- a/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/builder/attributes/BpkAttributeBuilder.java
+++ b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/builder/attributes/BpkAttributeBuilder.java
@@ -29,14 +29,13 @@ import at.gv.egiz.eaaf.core.api.idp.IPvpAttributeBuilder;
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.auth.builder.BpkBuilder;
+import at.gv.egiz.eaaf.core.impl.builder.BpkBuilder;
@PvpMetadata
public class BpkAttributeBuilder implements IPvpAttributeBuilder {
private static final Logger log = LoggerFactory.getLogger(BpkAttributeBuilder.class);
- public static final String DELIMITER_BPKTYPE_BPK = ":";
-
+
@Override
public String getName() {
return BPK_NAME;
diff --git a/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/builder/attributes/EidIdentityStatusLevelAttributeBuiler.java b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/builder/attributes/EidIdentityStatusLevelAttributeBuiler.java
index ee51564e..8345dcf8 100644
--- a/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/builder/attributes/EidIdentityStatusLevelAttributeBuiler.java
+++ b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/builder/attributes/EidIdentityStatusLevelAttributeBuiler.java
@@ -1,8 +1,5 @@
package at.gv.egiz.eaaf.core.impl.idp.builder.attributes;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
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.IEidAuthData;
@@ -10,11 +7,11 @@ import at.gv.egiz.eaaf.core.api.idp.IPvpAttributeBuilder;
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 lombok.extern.slf4j.Slf4j;
+@Slf4j
@PvpMetadata
public class EidIdentityStatusLevelAttributeBuiler implements IPvpAttributeBuilder {
- private static final Logger log =
- LoggerFactory.getLogger(EidIdentityStatusLevelAttributeBuiler.class);
@Override
public String getName() {
@@ -28,12 +25,15 @@ public class EidIdentityStatusLevelAttributeBuiler implements IPvpAttributeBuild
if (authData instanceof IEidAuthData) {
if (((IEidAuthData) authData).getEidStatus() == null) {
throw new UnavailableAttributeException(getName());
+
}
return g.buildStringAttribute(getFriendlyName(), getName(),
((IEidAuthData) authData).getEidStatus().getUri());
+
} else {
log.info(getFriendlyName() + " is only available in EAAF context");
+
}
throw new UnavailableAttributeException(getName());
diff --git a/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/builder/attributes/EidIssuingNationAttributeBuilder.java b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/builder/attributes/EidIssuingNationAttributeBuilder.java
index fd85871c..90e8c285 100644
--- a/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/builder/attributes/EidIssuingNationAttributeBuilder.java
+++ b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/builder/attributes/EidIssuingNationAttributeBuilder.java
@@ -41,7 +41,7 @@ public class EidIssuingNationAttributeBuilder implements IPvpAttributeBuilder {
final String countryCode = authData.getCiticenCountryCode();
if (StringUtils.isNotEmpty(countryCode)) {
return g.buildStringAttribute(EID_ISSUING_NATION_FRIENDLY_NAME, EID_ISSUING_NATION_NAME,
- countryCode);
+ countryCode.toUpperCase());
} else {
return null;
}
diff --git a/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/builder/attributes/EidSectorForIdAttributeBuilder.java b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/builder/attributes/EidSectorForIdAttributeBuilder.java
index 42b729fe..ba993b0c 100644
--- a/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/builder/attributes/EidSectorForIdAttributeBuilder.java
+++ b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/builder/attributes/EidSectorForIdAttributeBuilder.java
@@ -27,7 +27,7 @@ import at.gv.egiz.eaaf.core.api.idp.IPvpAttributeBuilder;
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.auth.builder.BpkBuilder;
+import at.gv.egiz.eaaf.core.impl.builder.BpkBuilder;
@PvpMetadata
public class EidSectorForIdAttributeBuilder implements IPvpAttributeBuilder {
diff --git a/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/builder/attributes/EidSignerCertificate.java b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/builder/attributes/EidSignerCertificate.java
index 6f857779..daed8455 100644
--- a/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/builder/attributes/EidSignerCertificate.java
+++ b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/builder/attributes/EidSignerCertificate.java
@@ -53,16 +53,17 @@ public class EidSignerCertificate implements IPvpAttributeBuilder {
EID_SIGNER_CERTIFICATE_NAME, Base64Utils.encodeToString(signerCertificate));
} else {
- log.info(EID_SIGNER_CERTIFICATE_FRIENDLY_NAME + " is only available in MOA-ID context");
+ log.debug("{} is not available", EID_SIGNER_CERTIFICATE_FRIENDLY_NAME);
+
}
} catch (final Exception e) {
- log.info("Signer certificate BASE64 encoding error");
+ log.info("{} BASE64 encoding error", EID_SIGNER_CERTIFICATE_FRIENDLY_NAME);
}
} else {
- log.info(EID_SIGNER_CERTIFICATE_FRIENDLY_NAME + " is only available in AuthHandler context");
+ log.info("{} is only available in AuthHandler context", EID_SIGNER_CERTIFICATE_FRIENDLY_NAME);
}
throw new UnavailableAttributeException(EID_SIGNER_CERTIFICATE_NAME);
diff --git a/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/controller/AbstractController.java b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/controller/AbstractController.java
index 0479a8c5..b05d8df0 100644
--- a/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/controller/AbstractController.java
+++ b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/controller/AbstractController.java
@@ -26,7 +26,6 @@ import javax.annotation.Nullable;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-import org.apache.commons.text.StringEscapeUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -96,11 +95,11 @@ public abstract class AbstractController {
protAuthService.handleErrorNoRedirect(e, req, resp, true);
} catch (final EaafException e1) {
+ log.warn("ErrorHandling failed with error: ", e.getMessage(), e);
log.warn("Can NOT handle an 'EAAFException'. Forwarding to generic error ... ", e);
ioExceptionHandler(resp, e);
}
-
}
/**
@@ -110,20 +109,23 @@ public abstract class AbstractController {
* This handler wrote an internal server error into http response
* </p>
*
- * @param resp http response
- * @param exception exception
+ * @param req http request
+ * @param resp http response
+ * @param e Catched exception
* @throws IOException In case of an internal error.
*/
@ExceptionHandler({ Exception.class })
- public void genericExceptionHandler(final HttpServletResponse resp, final Exception exception)
- throws IOException {
- log.error("Internel Server Error.", exception);
- resp.setContentType(EaafConstants.CONTENTTYPE_HTML_UTF8);
- resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Internal Server Error!"
- + "(Errorcode=9199" + " | Description="
- + StringEscapeUtils.escapeHtml4(StringEscapeUtils.escapeEcmaScript(exception.getMessage()))
- + ")");
+ public void genericExceptionHandler(final HttpServletRequest req, final HttpServletResponse resp,
+ final Exception e) throws IOException {
+ try {
+ protAuthService.handleErrorNoRedirect(e, req, resp, true);
+
+ } catch (final EaafException e1) {
+ log.warn("ErrorHandling failed with error: ", e.getMessage(), e);
+ log.error("Can NOT handle a generic 'Exception'. Forwarding to generic error ... ", e);
+ ioExceptionHandler(resp, e);
+ }
}
/**
diff --git a/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/controller/AbstractProcessEngineSignalController.java b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/controller/AbstractProcessEngineSignalController.java
index 2ce728c1..ea481bdb 100644
--- a/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/controller/AbstractProcessEngineSignalController.java
+++ b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/controller/AbstractProcessEngineSignalController.java
@@ -79,7 +79,7 @@ public abstract class AbstractProcessEngineSignalController extends AbstractCont
// process instance is mandatory
if (pendingReq.getProcessInstanceId() == null) {
throw new EaafIllegalStateException(
- new Object[] { "MOA session does not provide process instance id." });
+ new Object[] { "PendingRequest does not provide process-instance id." });
}
diff --git a/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/controller/ProtocolFinalizationController.java b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/controller/ProtocolFinalizationController.java
index 20f4c6ea..a8b0a961 100644
--- a/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/controller/ProtocolFinalizationController.java
+++ b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/controller/ProtocolFinalizationController.java
@@ -19,6 +19,20 @@
package at.gv.egiz.eaaf.core.impl.idp.controller;
+import java.io.IOException;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.text.StringEscapeUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.util.SerializationUtils;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+
import at.gv.egiz.components.eventlog.api.EventConstants;
import at.gv.egiz.eaaf.core.api.IRequest;
import at.gv.egiz.eaaf.core.api.IRequestStorage;
@@ -30,18 +44,6 @@ import at.gv.egiz.eaaf.core.api.utils.IPendingRequestIdGenerationStrategy;
import at.gv.egiz.eaaf.core.exceptions.EaafException;
import at.gv.egiz.eaaf.core.impl.idp.auth.services.ProtocolAuthenticationService;
import at.gv.egiz.eaaf.core.impl.utils.TransactionIdUtils;
-import org.apache.commons.text.StringEscapeUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Controller;
-import org.springframework.util.SerializationUtils;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
/**
* Protocol finialization end-point.
@@ -51,9 +53,12 @@ import java.io.IOException;
@Controller
public class ProtocolFinalizationController extends AbstractController {
private static final Logger log = LoggerFactory.getLogger(ProtocolFinalizationController.class);
- public static final String ENDPOINT_FINALIZEPROTOCOL = "finalizeAuthProtocol";
- public static final String ENDPOINT_ERRORHANDLING = "errorHandling";
- public static final String ENDPOINT_ERROR_REDIRECT = "errorRedirect";
+ public static final String ENDPOINT_FINALIZEPROTOCOL =
+ EaafConstants.ENDPOINT_PREFIX_SECURED + "/finalizeAuthProtocol";
+ public static final String ENDPOINT_ERRORHANDLING =
+ EaafConstants.ENDPOINT_PREFIX_SECURED + "/errorHandling";
+ public static final String ENDPOINT_ERROR_REDIRECT =
+ EaafConstants.ENDPOINT_PREFIX_SECURED + "/errorRedirect";
@Autowired(required = true)
IRequestStorage requestStorage;
@@ -231,7 +236,8 @@ public class ProtocolFinalizationController extends AbstractController {
final IRequest pendingReq = requestStorage.getPendingRequest(pendingRequestID);
if (pendingReq == null) {
- log.error("No PendingRequest with ID " + pendingRequestID + " found.!");
+ log.info("PendingReqId was valid but no PendingRequest with ID: {}. Looks already used",
+ pendingRequestID);
protAuthService.handleErrorNoRedirect(
new EaafException(IStatusMessenger.CODES_INTERNAL_ERROR_AUTH_TIMEOUT, new Object[]{pendingRequestID,}), req,
resp, false);
diff --git a/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/controller/tasks/RestartAuthProzessManagement.java b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/controller/tasks/RestartAuthProzessManagement.java
index 328a25c5..08bf588f 100644
--- a/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/controller/tasks/RestartAuthProzessManagement.java
+++ b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/controller/tasks/RestartAuthProzessManagement.java
@@ -19,8 +19,6 @@
package at.gv.egiz.eaaf.core.impl.idp.controller.tasks;
-import java.util.Set;
-
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -73,12 +71,9 @@ public class RestartAuthProzessManagement extends AbstractAuthServletTask {
} else {
// create a new execution context and copy all elements to new context
final ExecutionContext newec = new ExecutionContextImpl();
- final Set<String> entries = executionContext.keySet();
- for (final String key : entries) {
- newec.put(key, executionContext.get(key));
-
- }
-
+ executionContext.keySet().stream().forEach(
+ key -> newec.put(key, executionContext.get(key)));
+
log.debug("Select new auth.-process and restart restart process-engine ... ");
// select and create new process instance
diff --git a/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/process/ProcessEngineImpl.java b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/process/ProcessEngineImpl.java
index 9274ea81..6e83a201 100644
--- a/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/process/ProcessEngineImpl.java
+++ b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/process/ProcessEngineImpl.java
@@ -21,15 +21,13 @@ package at.gv.egiz.eaaf.core.impl.idp.process;
import java.io.InputStream;
import java.io.Serializable;
+import java.text.MessageFormat;
import java.util.HashMap;
import java.util.Map;
-import java.util.Map.Entry;
import java.util.concurrent.ConcurrentHashMap;
import org.apache.commons.collections4.IterableUtils;
import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.slf4j.MDC;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
@@ -51,14 +49,17 @@ import at.gv.egiz.eaaf.core.impl.idp.process.model.ProcessNode;
import at.gv.egiz.eaaf.core.impl.idp.process.model.StartEvent;
import at.gv.egiz.eaaf.core.impl.idp.process.model.TaskInfo;
import at.gv.egiz.eaaf.core.impl.idp.process.model.Transition;
+import lombok.extern.slf4j.Slf4j;
/**
* Process engine implementation allowing starting and continuing processes as
* well as providing means for cleanup actions.
*/
+@Slf4j
public class ProcessEngineImpl implements ProcessEngine {
- private final Logger log = LoggerFactory.getLogger(getClass());
+ private static final String ERROR_PROCESS_OBJECT_NOT_EXIST =
+ "Process instance: {0} does not exist for pendingReq: {0}";
@Autowired
ProcessInstanceStoreDao piStoreDao;
@@ -156,15 +157,16 @@ public class ProcessEngineImpl implements ProcessEngine {
if (StringUtils.isEmpty(pendingReq.getProcessInstanceId())) {
log.error("Pending-request with id:" + pendingReq.getPendingRequestId()
+ " includes NO 'ProcessInstanceId'");
- throw new ProcessExecutionException("Pending-request with id:"
- + pendingReq.getPendingRequestId() + " includes NO 'ProcessInstanceId'");
+ throw new ProcessExecutionException(MessageFormat.format(ERROR_PROCESS_OBJECT_NOT_EXIST,
+ pendingReq.getProcessInstanceId(), pendingReq.getPendingRequestId()));
+
}
final ProcessInstance pi = loadProcessInstance(pendingReq.getProcessInstanceId());
if (pi == null) {
- throw new ProcessExecutionException(
- "Process instance '" + pendingReq.getProcessInstanceId() + "' does not exist.");
+ throw new ProcessExecutionException(MessageFormat.format(ERROR_PROCESS_OBJECT_NOT_EXIST,
+ pendingReq.getProcessInstanceId(), pendingReq.getPendingRequestId()));
}
@@ -449,11 +451,9 @@ public class ProcessEngineImpl implements ProcessEngine {
final ExecutionContext executionContext =
new ExecutionContextImpl(piStore.getProcessInstanceId());
-
- final Map<String, Serializable> executionContextData = piStore.getExecutionContextData();
- for (final Entry<String, Serializable> el : executionContextData.entrySet()) {
- executionContext.put(el.getKey(), el.getValue());
- }
+
+ piStore.getExecutionContextData().entrySet().stream().forEach(
+ el -> executionContext.put(el.getKey(), el.getValue()));
final ProcessInstance pi = new ProcessInstance(
processDefinitions.get(piStore.getProcessDefinitionId()), executionContext);
diff --git a/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/process/dao/ProcessInstanceStoreDaoImpl.java b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/process/dao/ProcessInstanceStoreDaoImpl.java
index cca8872f..611572c0 100644
--- a/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/process/dao/ProcessInstanceStoreDaoImpl.java
+++ b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/process/dao/ProcessInstanceStoreDaoImpl.java
@@ -72,7 +72,7 @@ public class ProcessInstanceStoreDaoImpl implements ProcessInstanceStoreDao {
log.debug("Found process instance store for instance '{}'.", processInstanceId);
} else {
- log.debug("Unable to find process instance store for instance '{}'.", processInstanceId);
+ log.info("Unable to find process instance store for instance '{}'.", processInstanceId);
}
diff --git a/eaaf_core/src/main/resources/META-INF/services/at.gv.egiz.eaaf.core.api.idp.IAttributeBuilder b/eaaf_core/src/main/resources/META-INF/services/at.gv.egiz.eaaf.core.api.idp.IAttributeBuilder
index a088f824..6805d5e7 100644
--- a/eaaf_core/src/main/resources/META-INF/services/at.gv.egiz.eaaf.core.api.idp.IAttributeBuilder
+++ b/eaaf_core/src/main/resources/META-INF/services/at.gv.egiz.eaaf.core.api.idp.IAttributeBuilder
@@ -17,3 +17,4 @@ at.gv.egiz.eaaf.core.impl.idp.builder.attributes.TransactionIdAttributeBuilder
at.gv.egiz.eaaf.core.impl.idp.builder.attributes.PiiTransactionIdAttributeBuilder
at.gv.egiz.eaaf.core.impl.idp.builder.attributes.SpFriendlyNameAttributeBuilder
at.gv.egiz.eaaf.core.impl.idp.builder.attributes.SpUniqueIdAttributeBuilder
+at.gv.egiz.eaaf.core.impl.idp.builder.attributes.SpUsesMandates
diff --git a/eaaf_core/src/test/java/at/gv/egiz/eaaf/core/impl/idp/auth/builder/BpkBuilderTest.java b/eaaf_core/src/test/java/at/gv/egiz/eaaf/core/impl/idp/auth/builder/BpkBuilderTest.java
deleted file mode 100644
index b8c630fe..00000000
--- a/eaaf_core/src/test/java/at/gv/egiz/eaaf/core/impl/idp/auth/builder/BpkBuilderTest.java
+++ /dev/null
@@ -1,488 +0,0 @@
-package at.gv.egiz.eaaf.core.impl.idp.auth.builder;
-
-import java.security.InvalidKeyException;
-import java.security.KeyPair;
-import java.security.KeyPairGenerator;
-import java.security.NoSuchAlgorithmException;
-import java.security.NoSuchProviderException;
-
-import org.apache.commons.lang3.RandomStringUtils;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.BlockJUnit4ClassRunner;
-
-import at.gv.egiz.eaaf.core.api.data.EaafConstants;
-import at.gv.egiz.eaaf.core.exceptions.EaafBuilderException;
-import at.gv.egiz.eaaf.core.impl.data.Pair;
-
-@RunWith(BlockJUnit4ClassRunner.class)
-public class BpkBuilderTest {
-
- private static final String BASEID = "RUxHQVRlc3RQQjBYWFjFkHpnw7xyX1hYWFTDvHpla8OnaQ==";
-
- private KeyPair keyPair;
-
-
- /**
- * jUnit test initializer.
- * @throws NoSuchProviderException In case of an error
- * @throws NoSuchAlgorithmException In case of an error
- */
- @Before
- public void initialize() throws NoSuchAlgorithmException, NoSuchProviderException {
- KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
- keyPair = keyGen.generateKeyPair();
-
- }
-
- @Test
- public void encBpkWrongTarget() throws InvalidKeyException {
- String bpk = RandomStringUtils.randomAlphanumeric(25);
- String target = RandomStringUtils.randomAlphanumeric(25);
-
- try {
- BpkBuilder.encryptBpk(bpk, target, keyPair.getPublic());
- Assert.fail("Wrong parameters not detected");
-
- } catch (EaafBuilderException e) {
- Assert.assertEquals("Wrong errorMsg", "builder.32", e.getErrorId());
-
- }
- }
-
- @Test
- public void decBpkWrongTarget() throws InvalidKeyException {
- String bpk = RandomStringUtils.randomAlphanumeric(25);
- String target = RandomStringUtils.randomAlphanumeric(25);
-
- try {
- BpkBuilder.decryptBpk(bpk, target, keyPair.getPrivate());
- Assert.fail("Wrong parameters not detected");
-
- } catch (EaafBuilderException e) {
- Assert.assertEquals("Wrong errorMsg", "builder.32", e.getErrorId());
-
- }
- }
-
- @Test
- public void decBpkWrongTargetInEncBpk() throws InvalidKeyException, EaafBuilderException {
- String bpk = RandomStringUtils.randomAlphanumeric(25);
- String target = EaafConstants.URN_PREFIX_CDID + "AA";
-
- String encBpk = BpkBuilder.encryptBpk(bpk, target, keyPair.getPublic());
- try {
- BpkBuilder.decryptBpk(encBpk,
- EaafConstants.URN_PREFIX_CDID + "BB", keyPair.getPrivate());
- Assert.fail("Wrong parameters not detected");
-
- } catch (EaafBuilderException e) {
- Assert.assertEquals("Wrong errorMsg", "builder.30", e.getErrorId());
-
- }
- }
-
- @Test
- public void encBpkSuccess() throws EaafBuilderException, InvalidKeyException {
- String bpk = RandomStringUtils.randomAlphanumeric(25);
- String target = EaafConstants.URN_PREFIX_CDID + "AA";
-
- String encBpk = BpkBuilder.encryptBpk(bpk, target, keyPair.getPublic());
-
- Assert.assertNotNull("encBpk", encBpk);
-
- Pair<String, String> decBpk = BpkBuilder.decryptBpk(encBpk, target, keyPair.getPrivate());
-
- Assert.assertEquals("wrong bBK", bpk, decBpk.getFirst());
- Assert.assertEquals("wrong bBK-Target", target, decBpk.getSecond());
-
- }
-
- @Test
- public void encWbpkSuccess() throws EaafBuilderException, InvalidKeyException {
- String bpk = RandomStringUtils.randomAlphanumeric(25);
- String target = EaafConstants.URN_PREFIX_WBPK + "XFN+123456i";
-
- String encBpk = BpkBuilder.encryptBpk(bpk, target, keyPair.getPublic());
-
- Assert.assertNotNull("encBpk", encBpk);
-
- Pair<String, String> decBpk = BpkBuilder.decryptBpk(encBpk, target, keyPair.getPrivate());
-
- Assert.assertEquals("wrong bBK", bpk, decBpk.getFirst());
- Assert.assertEquals("wrong bBK-Target", target, decBpk.getSecond());
-
- }
-
- @Test
- public void encWbpkSuccessSecond() throws EaafBuilderException, InvalidKeyException {
- String bpk = RandomStringUtils.randomAlphanumeric(25);
- String target = EaafConstants.URN_PREFIX_WBPK + "FN+123456i";
-
- String encBpk = BpkBuilder.encryptBpk(bpk, target, keyPair.getPublic());
-
- Assert.assertNotNull("encBpk", encBpk);
-
- Pair<String, String> decBpk = BpkBuilder.decryptBpk(encBpk,
- EaafConstants.URN_PREFIX_WBPK + "XFN+123456i", keyPair.getPrivate());
-
- Assert.assertEquals("wrong bBK", bpk, decBpk.getFirst());
- Assert.assertEquals("wrong bBK-Target",
- EaafConstants.URN_PREFIX_WBPK + "XFN+123456i", decBpk.getSecond());
-
- }
-
-
- @Test
- public void noBaseId() {
- try {
- BpkBuilder.generateAreaSpecificPersonIdentifier(null, EaafConstants.URN_PREFIX_CDID + "AA");
-
- } catch (EaafBuilderException e) {
- Assert.assertEquals("Wrong errorCode", "builder.33", e.getErrorId());
- }
- }
-
- @Test
- public void noTarget() {
- try {
- BpkBuilder.generateAreaSpecificPersonIdentifier(BASEID, null);
-
- } catch (EaafBuilderException e) {
- Assert.assertEquals("Wrong errorCode", "builder.33", e.getErrorId());
- }
- }
-
- @Test
- public void noBaseIdType() {
- try {
- BpkBuilder.generateAreaSpecificPersonIdentifier(BASEID,
- null, EaafConstants.URN_PREFIX_CDID + "AA");
-
- } catch (EaafBuilderException e) {
- Assert.assertEquals("Wrong errorCode", "builder.33", e.getErrorId());
- }
- }
-
- @Test
- public void wrongBaseIdType() {
- try {
- BpkBuilder.generateAreaSpecificPersonIdentifier(BASEID,
- EaafConstants.URN_PREFIX_CDID + "BB", EaafConstants.URN_PREFIX_CDID + "AA");
-
- } catch (EaafBuilderException e) {
- Assert.assertEquals("Wrong errorCode", "builder.33", e.getErrorId());
- }
- }
-
- @Test
- public void baseIdTypeEqualsTarget() throws EaafBuilderException {
- Pair<String, String> result1 = BpkBuilder.generateAreaSpecificPersonIdentifier(BASEID,
- EaafConstants.URN_PREFIX_CDID + "AA", EaafConstants.URN_PREFIX_CDID + "AA");
-
- Assert.assertEquals("first bPK", BASEID,
- result1.getFirst());
- Assert.assertEquals("first bPK", "urn:publicid:gv.at:cdid+AA",
- result1.getSecond());
-
- }
-
- @Test
- public void buildBpk() throws EaafBuilderException {
-
- Pair<String, String> result1 = BpkBuilder.generateAreaSpecificPersonIdentifier(
- BASEID, EaafConstants.URN_PREFIX_CDID + "AA");
- Pair<String, String> result2 = BpkBuilder.generateAreaSpecificPersonIdentifier(
- BASEID, EaafConstants.URN_PREFIX_CDID + "BB");
-
- Assert.assertEquals("first bPK", "b1Ip610zZq/Or/uCqgb51lnAdZM=",
- result1.getFirst());
- Assert.assertEquals("first bPK", "urn:publicid:gv.at:cdid+AA",
- result1.getSecond());
-
- Assert.assertEquals("second bPK", "uYst6hjKJvyp7s/ezD8zsnkcj9k=",
- result2.getFirst());
- Assert.assertEquals("second bPK", "urn:publicid:gv.at:cdid+BB",
- result2.getSecond());
-
- }
-
- @Test
- public void buildWbpkFn() throws EaafBuilderException {
-
- Pair<String, String> result1 = BpkBuilder.generateAreaSpecificPersonIdentifier(
- BASEID, EaafConstants.URN_PREFIX_WBPK + "FN+123456i");
-
- Assert.assertEquals("wbPK", "k65HRxpVcoZ2OPZHo3j2LEn/JQE=",
- result1.getFirst());
- Assert.assertEquals("wbPK", "urn:publicid:gv.at:wbpk+XFN+123456i",
- result1.getSecond());
-
- }
-
- @Test
- public void buildWbpkZvr() throws EaafBuilderException {
-
- Pair<String, String> result1 = BpkBuilder.generateAreaSpecificPersonIdentifier(
- BASEID, EaafConstants.URN_PREFIX_WBPK + "ZVR+123456");
-
- Assert.assertEquals("wbPK", "1WvaBLiTxcc3kVzfB71Zh2sCtvA=",
- result1.getFirst());
- Assert.assertEquals("wbPK", "urn:publicid:gv.at:wbpk+XZVR+123456",
- result1.getSecond());
-
- }
-
- @Test
- public void buildWbpkErsb() throws EaafBuilderException {
-
- Pair<String, String> result1 = BpkBuilder.generateAreaSpecificPersonIdentifier(
- BASEID, EaafConstants.URN_PREFIX_WBPK + "ERSB+123456");
-
- Assert.assertEquals("wbPK", "xtAWGAiblvhYJiCpUB3dwdRFPpg=",
- result1.getFirst());
- Assert.assertEquals("wbPK", "urn:publicid:gv.at:wbpk+XERSB+123456",
- result1.getSecond());
-
- }
-
- @Test
- public void buildWbpkXFn() throws EaafBuilderException {
-
- Pair<String, String> result1 = BpkBuilder.generateAreaSpecificPersonIdentifier(
- BASEID, EaafConstants.URN_PREFIX_WBPK + "XFN+123456i");
-
- Assert.assertEquals("wbPK", "k65HRxpVcoZ2OPZHo3j2LEn/JQE=",
- result1.getFirst());
- Assert.assertEquals("wbPK", "urn:publicid:gv.at:wbpk+XFN+123456i",
- result1.getSecond());
-
- }
-
- @Test
- public void buildWbpkXZvr() throws EaafBuilderException {
-
- Pair<String, String> result1 = BpkBuilder.generateAreaSpecificPersonIdentifier(
- BASEID, EaafConstants.URN_PREFIX_WBPK + "XZVR+123456");
-
- Assert.assertEquals("wbPK", "1WvaBLiTxcc3kVzfB71Zh2sCtvA=",
- result1.getFirst());
- Assert.assertEquals("wbPK", "urn:publicid:gv.at:wbpk+XZVR+123456",
- result1.getSecond());
-
- }
-
- @Test
- public void buildWbpkXErsb() throws EaafBuilderException {
-
- Pair<String, String> result1 = BpkBuilder.generateAreaSpecificPersonIdentifier(
- BASEID, EaafConstants.URN_PREFIX_WBPK + "XERSB+123456");
-
- Assert.assertEquals("wbPK", "xtAWGAiblvhYJiCpUB3dwdRFPpg=",
- result1.getFirst());
- Assert.assertEquals("wbPK", "urn:publicid:gv.at:wbpk+XERSB+123456",
- result1.getSecond());
-
- }
-
- @Test
- public void buildWbpkOthers() throws EaafBuilderException {
-
- Pair<String, String> result1 = BpkBuilder.generateAreaSpecificPersonIdentifier(
- BASEID, EaafConstants.URN_PREFIX_WBPK + "XABC+123456");
-
- Assert.assertEquals("wbPK", "wv96/xKUyi6YoYGv7IcIlFTsJIk=",
- result1.getFirst());
- Assert.assertEquals("wbPK", "urn:publicid:gv.at:wbpk+XABC+123456",
- result1.getSecond());
-
- }
-
- @Test
- public void buildEidasId() throws EaafBuilderException {
-
- Pair<String, String> result1 = BpkBuilder.generateAreaSpecificPersonIdentifier(
- BASEID, EaafConstants.URN_PREFIX_EIDAS + "AT+ES");
-
- Assert.assertEquals("eidas", "AT/ES/7AuLZNKsiRr97yvLsQ16SZ6r0q0=",
- result1.getFirst());
- Assert.assertEquals("wbPK", "urn:publicid:gv.at:eidasid+AT+ES",
- result1.getSecond());
-
- }
-
- @Test
- public void normalizeNullTarget() {
- Assert.assertNull("Wrong normalized target",
- BpkBuilder.normalizeBpkTargetIdentifierToCommonFormat(null));
-
- }
-
- @Test
- public void normalizeBpkTarget() {
- String target = EaafConstants.URN_PREFIX_CDID + RandomStringUtils.randomAlphabetic(2);
- Assert.assertEquals("Wrong normalized target",
- target,
- BpkBuilder.normalizeBpkTargetIdentifierToCommonFormat(target));
-
- }
-
- @Test
- public void normalizeWbpkTargetWithX() {
- String target = EaafConstants.URN_PREFIX_WBPK_TARGET_WITH_X + RandomStringUtils.randomAlphabetic(2);
- Assert.assertEquals("Wrong normalized target",
- target,
- BpkBuilder.normalizeBpkTargetIdentifierToCommonFormat(target));
-
- }
-
- @Test
- public void normalizeWbpkTargetWithOutXNoMapping() {
- String target = EaafConstants.URN_PREFIX_WBPK + RandomStringUtils.randomAlphabetic(2);
- Assert.assertEquals("Wrong normalized target",
- target,
- BpkBuilder.normalizeBpkTargetIdentifierToCommonFormat(target));
-
- }
-
- @Test
- public void normalizeWbpkTargetWithOutXMappingFn() {
- Assert.assertEquals("Wrong normalized target",
- EaafConstants.URN_PREFIX_WBPK + "XFN+123456i",
- BpkBuilder.normalizeBpkTargetIdentifierToCommonFormat(EaafConstants.URN_PREFIX_WBPK + "FN+123456i"));
-
- }
-
- @Test
- public void normalizeWbpkTargetWithOutXMappingZvr() {
- Assert.assertEquals("Wrong normalized target",
- EaafConstants.URN_PREFIX_WBPK + "XZVR+1122334455",
- BpkBuilder.normalizeBpkTargetIdentifierToCommonFormat(EaafConstants.URN_PREFIX_WBPK + "ZVR+1122334455"));
-
- }
-
- @Test
- public void normalizeWbpkTargetWithOutXMappingErsb() {
- Assert.assertEquals("Wrong normalized target",
- EaafConstants.URN_PREFIX_WBPK + "XERSB+998877665544",
- BpkBuilder.normalizeBpkTargetIdentifierToCommonFormat(EaafConstants.URN_PREFIX_WBPK + "ERSB+998877665544"));
-
- }
-
- @Test
- public void normalizeEidasTarget() {
- String target = EaafConstants.URN_PREFIX_EIDAS + RandomStringUtils.randomAlphabetic(2)
- + "+" + RandomStringUtils.randomAlphabetic(2);
- Assert.assertEquals("Wrong normalized target",
- target,
- BpkBuilder.normalizeBpkTargetIdentifierToCommonFormat(target));
-
- }
-
- @Test
- public void calcNormalizeNullTarget() {
- Assert.assertNull("Wrong normalized target",
- BpkBuilder.normalizeBpkTargetIdentifierToNonXFormat(null));
-
- }
-
- @Test
- public void calcNormalizeBpkTarget() {
- String target = EaafConstants.URN_PREFIX_CDID + RandomStringUtils.randomAlphabetic(2);
- Assert.assertEquals("Wrong normalized target",
- target,
- BpkBuilder.normalizeBpkTargetIdentifierToNonXFormat(target));
-
- }
-
- @Test
- public void calcNormalizeWbpkTargetWithoutX() {
-
- Assert.assertEquals("Wrong normalized target",
- EaafConstants.URN_PREFIX_WBPK + "FN+123456i",
- BpkBuilder.normalizeBpkTargetIdentifierToNonXFormat(EaafConstants.URN_PREFIX_WBPK + "FN+123456i"));
-
- }
-
- @Test
- public void calcNormalizeWbpkTargetWithOutXNoMapping() {
- String target = EaafConstants.URN_PREFIX_WBPK + RandomStringUtils.randomAlphabetic(2);
- Assert.assertEquals("Wrong normalized target",
- target,
- BpkBuilder.normalizeBpkTargetIdentifierToNonXFormat(target));
-
- }
-
- @Test
- public void calcNormalizeWbpkTargetWithXMappingFn() {
- Assert.assertEquals("Wrong normalized target",
- EaafConstants.URN_PREFIX_WBPK + "FN+123456i",
- BpkBuilder.normalizeBpkTargetIdentifierToNonXFormat(EaafConstants.URN_PREFIX_WBPK + "XFN+123456i"));
-
- }
-
- @Test
- public void calcNormalizeWbpkTargetWithXMappingZvr() {
- Assert.assertEquals("Wrong normalized target",
- EaafConstants.URN_PREFIX_WBPK + "ZVR+1122334455",
- BpkBuilder.normalizeBpkTargetIdentifierToNonXFormat(EaafConstants.URN_PREFIX_WBPK + "XZVR+1122334455"));
-
- }
-
- @Test
- public void calcNormalizeWbpkTargetWithXMappingErsb() {
- Assert.assertEquals("Wrong normalized target",
- EaafConstants.URN_PREFIX_WBPK + "ERSB+998877665544",
- BpkBuilder.normalizeBpkTargetIdentifierToNonXFormat(
- EaafConstants.URN_PREFIX_WBPK + "XERSB+998877665544"));
-
- }
-
- @Test
- public void calcNormalizeEidasTarget() {
- String target = EaafConstants.URN_PREFIX_EIDAS + RandomStringUtils.randomAlphabetic(2)
- + "+" + RandomStringUtils.randomAlphabetic(2);
- Assert.assertEquals("Wrong normalized target",
- target,
- BpkBuilder.normalizeBpkTargetIdentifierToNonXFormat(target));
-
- }
-
- @Test
- public void removeBpkPrefix() {
- String spTarget = RandomStringUtils.randomAlphabetic(2);
- Assert.assertEquals("Wrong SP target without prefix",
- spTarget,
- BpkBuilder.removeBpkTypePrefix(EaafConstants.URN_PREFIX_CDID + spTarget));
-
- }
-
- @Test
- public void removeWpbkPrefix() {
- String spTarget = RandomStringUtils.randomAlphabetic(10);
- Assert.assertEquals("Wrong SP target without prefix",
- spTarget,
- BpkBuilder.removeBpkTypePrefix(EaafConstants.URN_PREFIX_WBPK + spTarget));
-
- }
-
- @Test
- public void removeEidasPbkPrefix() {
- String spTarget = RandomStringUtils.randomAlphabetic(2) + "+" + RandomStringUtils.randomAlphabetic(2);
- Assert.assertEquals("Wrong SP target without prefix",
- spTarget,
- BpkBuilder.removeBpkTypePrefix(EaafConstants.URN_PREFIX_EIDAS + spTarget));
-
- }
-
- @Test
- public void removeUnknownPbkPrefix() {
- String spTarget = RandomStringUtils.randomAlphabetic(10);
- Assert.assertEquals("Wrong SP target without prefix",
- EaafConstants.URN_PREFIX_BASEID + spTarget,
- BpkBuilder.removeBpkTypePrefix(EaafConstants.URN_PREFIX_BASEID + spTarget));
-
- }
-}