summaryrefslogtreecommitdiff
path: root/eaaf_core_api
diff options
context:
space:
mode:
Diffstat (limited to 'eaaf_core_api')
-rw-r--r--eaaf_core_api/pom.xml56
-rw-r--r--eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/IRequestStorage.java4
-rw-r--r--eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/IStatusMessenger.java4
-rw-r--r--eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/data/EaafConstants.java65
-rw-r--r--eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/data/ExtendedPvpAttributeDefinitions.java73
-rw-r--r--eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/data/PvpAttributeDefinitions.java32
-rw-r--r--eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/gui/IGuiBuilderConfiguration.java12
-rw-r--r--eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/gui/IGuiFormBuilder.java22
-rw-r--r--eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/idp/IAuthData.java23
-rw-r--r--eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/idp/ISpConfiguration.java5
-rw-r--r--eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/idp/auth/IAuthenticationManager.java17
-rw-r--r--eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/idp/auth/data/IAuthProcessDataContainer.java15
-rw-r--r--eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/idp/auth/data/IEidAuthProcessData.java25
-rw-r--r--eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/idp/auth/data/IIdentityLink.java10
-rw-r--r--eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/idp/auth/services/IProtocolAuthenticationService.java33
-rw-r--r--eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/exceptions/EaafException.java3
-rw-r--r--eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/exceptions/PendingReqIdValidationException.java12
-rw-r--r--eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/exceptions/XPathException.java31
18 files changed, 283 insertions, 159 deletions
diff --git a/eaaf_core_api/pom.xml b/eaaf_core_api/pom.xml
index 62001ab7..448165f4 100644
--- a/eaaf_core_api/pom.xml
+++ b/eaaf_core_api/pom.xml
@@ -7,7 +7,7 @@
<parent>
<groupId>at.gv.egiz</groupId>
<artifactId>eaaf</artifactId>
- <version>1.1.3-SNAPSHOT</version>
+ <version>1.2.1-SNAPSHOT</version>
</parent>
<groupId>at.gv.egiz.eaaf</groupId>
<artifactId>eaaf_core_api</artifactId>
@@ -53,11 +53,6 @@
<artifactId>javax.servlet-api</artifactId>
<scope>provided</scope>
</dependency>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <scope>test</scope>
- </dependency>
</dependencies>
<build>
@@ -68,55 +63,6 @@
<directory>src/main/resources</directory>
</resource>
</resources>
-
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <version>3.7.0</version>
- <configuration>
- <source>1.8</source>
- <target>1.8</target>
- </configuration>
- <executions>
- <execution>
- <goals>
- <goal>compile</goal>
- <goal>testCompile</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-jar-plugin</artifactId>
- <version>3.1.0</version>
- <executions>
- <execution>
- <goals>
- <goal>test-jar</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
-
- <!-- enable co-existence of testng and junit -->
- <plugin>
- <artifactId>maven-surefire-plugin</artifactId>
- <version>${surefire.version}</version>
- <configuration>
- <threadCount>1</threadCount>
- </configuration>
- <dependencies>
- <dependency>
- <groupId>org.apache.maven.surefire</groupId>
- <artifactId>surefire-junit47</artifactId>
- <version>${surefire.version}</version>
- </dependency>
- </dependencies>
- </plugin>
-
- </plugins>
</build>
</project>
diff --git a/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/IRequestStorage.java b/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/IRequestStorage.java
index 2262e68a..93ce5695 100644
--- a/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/IRequestStorage.java
+++ b/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/IRequestStorage.java
@@ -19,6 +19,8 @@
package at.gv.egiz.eaaf.core.api;
+import javax.annotation.Nullable;
+
import at.gv.egiz.eaaf.core.exceptions.EaafException;
import at.gv.egiz.eaaf.core.exceptions.PendingReqIdValidationException;
@@ -52,7 +54,7 @@ public interface IRequestStorage {
*
* @param pendingReqId Id of the pending request
*/
- void removePendingRequest(String pendingReqId);
+ void removePendingRequest(@Nullable String pendingReqId);
/**
* change the pendingRequestId of a pending-request.
diff --git a/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/IStatusMessenger.java b/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/IStatusMessenger.java
index bbaf86d3..daf2f6ff 100644
--- a/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/IStatusMessenger.java
+++ b/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/IStatusMessenger.java
@@ -59,11 +59,12 @@ public interface IStatusMessenger {
String getMessageWithoutDefault(String messageId, Object[] parameters);
/**
- * Get external errorCode from from Exception.
+ * Get internal errorCode from from Exception.
*
* @param throwable Reason of error
* @return external error code
*/
+ @Nonnull
String getResponseErrorCode(Throwable throwable);
/**
@@ -72,6 +73,7 @@ public interface IStatusMessenger {
* @param intErrorCode internal error code
* @return external error code
*/
+ @Nonnull
String mapInternalErrorToExternalError(String intErrorCode);
}
diff --git a/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/data/EaafConstants.java b/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/data/EaafConstants.java
index 57375e01..82749b81 100644
--- a/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/data/EaafConstants.java
+++ b/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/data/EaafConstants.java
@@ -27,6 +27,22 @@ public class EaafConstants {
public static final String CONTENTTYPE_HTML_UTF8 = "text/html; charset=UTF-8";
+ // common http end-point prefixes
+ /**
+ * Public end-points without any access restriction.
+ */
+ public static final String ENDPOINT_PREFIX_PUBLIC = "/public";
+
+ /**
+ * Public end-points with access restriction, like AccessToken, PendingRequestIds, ...
+ */
+ public static final String ENDPOINT_PREFIX_SECURED = "/public/secure";
+
+ /**
+ * Non public end-points that allow restriction on network level.
+ */
+ public static final String ENDPOINT_PREFIX_RESTRICTED = "/restricted";
+
// http request parameters for process management
public static final String PARAM_HTTP_TARGET_PENDINGREQUESTID = "pendingid";
public static final String PARAM_HTTP_ERROR_CODE = "errorid";
@@ -43,36 +59,60 @@ public class EaafConstants {
// Austrian specific prefixes for pseudonyms of users
public static final String URN_PART_BASEID = "baseid";
public static final String URN_PART_CDID = "cdid+";
+ public static final String URN_PART_ECDID = "ecdid+";
public static final String URN_PART_WBPK = "wbpk+";
+ public static final String URN_PART_EWBPK = "ewbpk+";
public static final String URN_PART_EIDAS = "eidasid+";
public static final String URN_PREFIX = "urn:publicid:gv.at";
public static final String URN_PREFIX_WITH_COLON = URN_PREFIX + ":";
public static final String URN_PREFIX_BASEID = URN_PREFIX_WITH_COLON + URN_PART_BASEID;
public static final String URN_PREFIX_CDID = URN_PREFIX_WITH_COLON + URN_PART_CDID;
+ public static final String URN_PREFIX_ECDID = URN_PREFIX_WITH_COLON + URN_PART_ECDID;
public static final String URN_PREFIX_BPK = URN_PREFIX_CDID + "bpk";
public static final String URN_PREFIX_WBPK = URN_PREFIX_WITH_COLON + URN_PART_WBPK;
+ public static final String URN_PREFIX_EWBPK = URN_PREFIX_WITH_COLON + URN_PART_EWBPK;
public static final String URN_PREFIX_EIDAS = URN_PREFIX_WITH_COLON + URN_PART_EIDAS;
public static final String URN_PREFIX_OW_BPK = URN_PREFIX_CDID + "OW";
+ /**
+ * encrypted bPK target identifier pattern with {0} as bPK target without prefix and {1} as VKZ/SourceId.
+ */
+ public static final String URN_ECDID_TARGET_PATTERN = URN_PREFIX_ECDID + "{1}+{0}";
+
+ /**
+ * encrypted wbPK target identifier pattern with {0} as bPK target without prefix and {1} as VKZ/SourceId.
+ */
+ public static final String URN_EWBPK_TARGET_PATTERN = URN_PREFIX_EWBPK + "{1}+{0}";
+
public static final String URN_PREFIX_WBPK_TARGET_WITH_X = EaafConstants.URN_PREFIX_WBPK + "X";
private static final String WBPK_TARGET_FN = "FN";
private static final String WBPK_TARGET_ZVR = "ZVR";
private static final String WBPK_TARGET_ERSB = "ERSB";
-
- private static final String URN_PREFIX_WBPK_TARGET_XFN_TARGET =
+
+ private static final String WBPK_CALC_TARGET_ZVR = "VR";
+ private static final String WBPK_CALC_TARGET_ERSB = "ERJ";
+
+
+ private static final String URN_PREFIX_WBPK_TARGET_XFN_TARGET =
EaafConstants.URN_PREFIX_WBPK_TARGET_WITH_X + WBPK_TARGET_FN;
- private static final String URN_PREFIX_WBPK_TARGET_XZVR_TARGET =
+ private static final String URN_PREFIX_WBPK_TARGET_XZVR_TARGET =
EaafConstants.URN_PREFIX_WBPK_TARGET_WITH_X + WBPK_TARGET_ZVR;
- private static final String URN_PREFIX_WBPK_TARGET_XERSB_TARGET =
+ private static final String URN_PREFIX_WBPK_TARGET_XERSB_TARGET =
EaafConstants.URN_PREFIX_WBPK_TARGET_WITH_X + WBPK_TARGET_ERSB;
-
+
private static final String URN_PREFIX_WBPK_TARGET_FN_TARGET = EaafConstants.URN_PREFIX_WBPK + WBPK_TARGET_FN;
private static final String URN_PREFIX_WBPK_TARGET_ZVR_TARGET = EaafConstants.URN_PREFIX_WBPK + WBPK_TARGET_ZVR;
private static final String URN_PREFIX_WBPK_TARGET_ERSB_TARGET = EaafConstants.URN_PREFIX_WBPK + WBPK_TARGET_ERSB;
+
+ private static final String URN_PREFIX_WBPK_CALC_TARGET_ZVR_TARGET =
+ EaafConstants.URN_PREFIX_WBPK + WBPK_CALC_TARGET_ZVR;
+ private static final String URN_PREFIX_WBPK_CALC_TARGET_ERSB_TARGET =
+ EaafConstants.URN_PREFIX_WBPK + WBPK_CALC_TARGET_ERSB;
- public static final Map<String, String> URN_WBPK_TARGET_X_TO_NONE_MAPPER;
+ public static final Map<String, String> URN_WBPK_TARGET_X_TO_NONE_MAPPER;
+
static {
final Map<String, String> intMap = new LinkedHashMap<>();
intMap.put(URN_PREFIX_WBPK_TARGET_XFN_TARGET, URN_PREFIX_WBPK_TARGET_FN_TARGET);
@@ -81,8 +121,19 @@ public class EaafConstants {
URN_WBPK_TARGET_X_TO_NONE_MAPPER = Collections.unmodifiableMap(intMap);
}
+
+ public static final Map<String, String> URN_WBPK_TARGET_X_TO_CALC_TARGET_MAPPER;
+
+ static {
+ final Map<String, String> intMap = new LinkedHashMap<>();
+ intMap.put(URN_PREFIX_WBPK_TARGET_XFN_TARGET, URN_PREFIX_WBPK_TARGET_FN_TARGET);
+ intMap.put(URN_PREFIX_WBPK_TARGET_XZVR_TARGET, URN_PREFIX_WBPK_CALC_TARGET_ZVR_TARGET);
+ intMap.put(URN_PREFIX_WBPK_TARGET_XERSB_TARGET, URN_PREFIX_WBPK_CALC_TARGET_ERSB_TARGET);
+ URN_WBPK_TARGET_X_TO_CALC_TARGET_MAPPER = Collections.unmodifiableMap(intMap);
+
+ }
-
+
// Authentication process data_constants
public static final String UNIQUESESSIONIDENTIFIER = "eaaf_uniqueSessionIdentifier";
public static final String AUTH_DATA_CREATED = "eaaf_authdata_created";
diff --git a/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/data/ExtendedPvpAttributeDefinitions.java b/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/data/ExtendedPvpAttributeDefinitions.java
index 727c360c..5d7fcc07 100644
--- a/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/data/ExtendedPvpAttributeDefinitions.java
+++ b/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/data/ExtendedPvpAttributeDefinitions.java
@@ -19,8 +19,14 @@
package at.gv.egiz.eaaf.core.api.data;
+import java.util.NoSuchElementException;
+import java.util.stream.Stream;
+
public interface ExtendedPvpAttributeDefinitions extends PvpAttributeDefinitions {
+ String EIDAS_CONNECTOR_UNIQUEID_NAME = "urn:eidgvat:attributes.eidas.uniqueId";
+ String EIDAS_CONNECTOR_UNIQUEID_FRIENDLY_NAME = "EidasNode-UniqueId";
+
String SP_UNIQUEID_NAME = "urn:eidgvat:attributes.ServiceProviderUniqueId";
String SP_UNIQUEID_FRIENDLY_NAME = "ServiceProvider-UniqueId";
@@ -30,9 +36,62 @@ public interface ExtendedPvpAttributeDefinitions extends PvpAttributeDefinitions
String SP_COUNTRYCODE_NAME = "urn:eidgvat:attributes.ServiceProviderCountryCode";
String SP_COUNTRYCODE_FRIENDLY_NAME = "ServiceProvider-CountryCode";
- String SP_USESMANDATES_NAME = "urn:eidgvat:attributes.ServiceProviderMandateProfiles";
- String SP_USESMANDATES_FRIENDLY_NAME = "ServiceProvider-MandateProfiles";
+ String SP_USED_MANDATE_PROFILES_NAME = "urn:eidgvat:attributes.ServiceProviderMandateProfiles";
+ String SP_USED_MANDATE_PROFILES_FRIENDLY_NAME = "ServiceProvider-MandateProfiles";
+
+ String SP_USED_MANDATE_TYPE_NAME = "urn:eidgvat:attributes.ServiceProviderMandateType";
+ String SP_USED_MANDATE_TYPE_FRIENDLY_NAME = "ServiceProvider-MandateType";
+
+ enum SpMandateModes {
+ NONE("none"),
+ NATURAL("natural"),
+ NATURAL_FORCE("forceNatural"),
+ LEGAL("legal"),
+ LEGAL_FORCE("forceLegal"),
+ BOTH("all"),
+ BOTH_FORCE("forceAll");
+
+ private final String mandateMode;
+
+ SpMandateModes(final String mandateMode) {
+ this.mandateMode = mandateMode;
+ }
+
+ /**
+ * Get Service-Provider mandate-mode from String representation.
+ *
+ * @param s mandate-mode String parameter
+ * @return mandate mode, or {@link NoSuchElementException} if mode is unknown
+ */
+ public static SpMandateModes fromString(final String mode) {
+ return Stream.of(SpMandateModes.values())
+ .filter(el -> el.getMode().equals(mode))
+ .findFirst()
+ .get();
+
+ }
+
+ /**
+ * Get the URI based status identifier of an E-ID.
+ *
+ * @return Current mandate mode
+ */
+ public String getMode() {
+ return this.mandateMode;
+ }
+
+ @Override
+ public String toString() {
+ return getMode();
+
+ }
+
+ }
+
+ String EID_BINDING_PUBLIC_KEY_NAME = "urn:eidgvat:attributes.binding.pubkey";
+ String EID_BINDING_PUBLIC_KEY_FRIENDLY_NAME = "Binding-PublicKey";
+
/* Attributes for E-ID */
String EID_ENCRYPTED_SOURCEID_NAME = "urn:eidgvat:attributes.vsz.value";
String EID_ENCRYPTED_SOURCEID_FRIENDLY_NAME = "vSZ";
@@ -43,9 +102,15 @@ public interface ExtendedPvpAttributeDefinitions extends PvpAttributeDefinitions
String EID_EIDBIND_NAME = "urn:eidgvat:attributes.eidbind";
String EID_EIDBIND_FRIENDLY_NAME = "eidBind";
- String EID_CONSENT_SIGNED_NAME = "urn:eidgvat:attributes.consent.signed";
- String EID_CONSENT_SIGNED_FRIENDLY_NAME = "userConsent";
+ String EID_AUTHBLOCK_SIGNED_NAME = "urn:eidgvat:attributes.authblock.signed";
+ String EID_AUTHBLOCK_SIGNED_FRIENDLY_NAME = "userAuthBlock";
+ String EID_TRANSACTION_ID_NAME = "urn:eidgvat:attributes.transactionId";
+ String EID_TRANSACTION_ID_FRIENDLY_NAME = "transactionId";
+
+ String EID_PII_TRANSACTION_ID_NAME = "urn:eidgvat:attributes.piiTransactionId";
+ String EID_PII_TRANSACTION_ID_FRIENDLY_NAME = "piiTransactionId";
+
String EID_MIS_MANDATE_NAME = "urn:eidgvat:attributes.mis.mandate";
String EID_MIS_MANDATE_FRIENDLY_NAME = "mandate";
diff --git a/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/data/PvpAttributeDefinitions.java b/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/data/PvpAttributeDefinitions.java
index 793715f1..de227ccb 100644
--- a/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/data/PvpAttributeDefinitions.java
+++ b/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/data/PvpAttributeDefinitions.java
@@ -63,6 +63,7 @@ public interface PvpAttributeDefinitions {
String BPK_FRIENDLY_NAME = "BPK";
int BPK_MAX_LENGTH = 1024;
String BPK_R_PROFILE21_HEADER = "X-PVP-BPK";
+ String DELIMITER_BPKTYPE_BPK = ":";
String BPK_LIST_OID = "1.2.40.0.10.2.1.1.261.28";
String BPK_LIST_NAME = URN_OID_PREFIX + BPK_LIST_OID;
@@ -146,13 +147,40 @@ public interface PvpAttributeDefinitions {
/**
* Get the URI based status identifier of an E-ID.
*
- * @return
+ * @return status identifier
*/
public String getUri() {
return this.uri;
}
}
+
+ String EID_IDA_LEVEL_OID = "1.2.40.0.10.2.1.1.261.107";
+ String EID_IDA_LEVEL_NAME = URN_OID_PREFIX + EID_IDA_LEVEL_OID;
+ String EID_IDA_LEVEL_FRIENDLY_NAME = "EID-IDA-LEVEL";
+
+ enum EidIdaLevelValues {
+ BASIC("urn:eidgvat:eid.status.basic"),
+ FULL("urn:eidgvat:eid.status.full"),
+ EIDAS("urn:eidgvat:eid.status.eidas");
+
+ private final String urn;
+
+ EidIdaLevelValues(final String urn) {
+ this.urn = urn;
+ }
+
+ /**
+ * Get the URN based identifier of the ID Austria level.
+ *
+ * @return level identifier
+ */
+ public String getUrn() {
+ return this.urn;
+ }
+ }
+
+
String EID_ISSUING_NATION_OID = "1.2.40.0.10.2.1.1.261.32";
String EID_ISSUING_NATION_NAME = URN_OID_PREFIX + EID_ISSUING_NATION_OID;
String EID_ISSUING_NATION_FRIENDLY_NAME = "EID-ISSUING-NATION";
@@ -339,4 +367,6 @@ public interface PvpAttributeDefinitions {
String PVP_HOLDEROFKEY_NAME = URN_OID_PREFIX + PVP_HOLDEROFKEY_OID;
String PVP_HOLDEROFKEY_FRIENDLY_NAME = "HOLDER-OF-KEY-CERTIFICATE";
+
+
}
diff --git a/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/gui/IGuiBuilderConfiguration.java b/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/gui/IGuiBuilderConfiguration.java
index 55197b52..28e0278c 100644
--- a/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/gui/IGuiBuilderConfiguration.java
+++ b/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/gui/IGuiBuilderConfiguration.java
@@ -51,4 +51,16 @@ public interface IGuiBuilderConfiguration {
* @return ContentType, or null if default ContentType should be used.
*/
String getDefaultContentType();
+
+
+ /**
+ * Indicate GUI-Builder to render the GUI asynchronous if it's support by builder implementation.
+ *
+ * <p><b>Default:</b> <code>true</code></p>
+ *
+ * @return <code>true</code> to indicate that asynchronous rendering is perverted
+ */
+ boolean isWriteAsynch();
+
+
}
diff --git a/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/gui/IGuiFormBuilder.java b/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/gui/IGuiFormBuilder.java
index d376d17b..09c4a8b3 100644
--- a/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/gui/IGuiFormBuilder.java
+++ b/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/gui/IGuiFormBuilder.java
@@ -35,10 +35,7 @@ public interface IGuiFormBuilder {
/**
* Parse a GUI template, with parameters into a http servlet-response and use
* the default http-response content-type. <br>
- * <br>
- * The parser use the <code>VelocityEngine</code> as internal template
- * evaluator.
- *
+ *
* @param httpReq http-request object
* @param httpResp http-response object
* @param config Configuration object
@@ -51,10 +48,7 @@ public interface IGuiFormBuilder {
/**
* Parse a GUI template, with parameters into a http servlet-response. <br>
- * <br>
- * The parser use the <code>VelocityEngine</code> as internal template
- * evaluator.
- *
+ *
* @param httpReq http-request object
* @param httpResp http-response object
* @param config Configuration object
@@ -66,4 +60,16 @@ public interface IGuiFormBuilder {
void build(HttpServletRequest httpReq, HttpServletResponse httpResp, IGuiBuilderConfiguration config,
String contentType, String loggerName) throws GuiBuildException;
+ /**
+ * Analyze GUI template and HTTP request to evaluate ContentType of HTTP response generated by this builder.
+ *
+ * @param httpReq http-request object
+ * @param config Configuration object
+ * @param loggerName String, which should be used from logger
+ * @return ContentType of HTTP response
+ * @throws GuiBuildException in case of an error
+ */
+ String evaluateResponseContentType(HttpServletRequest httpReq, IGuiBuilderConfiguration config,
+ String loggerName) throws GuiBuildException;
+
}
diff --git a/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/idp/IAuthData.java b/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/idp/IAuthData.java
index 62aa8852..f76e8d76 100644
--- a/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/idp/IAuthData.java
+++ b/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/idp/IAuthData.java
@@ -30,7 +30,7 @@ import at.gv.egiz.eaaf.core.api.idp.auth.data.IIdentityLink;
*
*/
public interface IAuthData {
-
+
/**
* BaseId transfer policy.
*
@@ -75,19 +75,24 @@ public interface IAuthData {
String getGivenName();
/**
- * Date of birth of the user.
+ * Date of birth of the user as "yyyy-MM-dd".
+ *
+ * <p><b>Attention:</b> <i>MM</i> and <i>dd</i> can also be <i>00</i> in case of an unknown date </p>
*
* @return date of birth or null no data of birth is available
*/
- Date getDateOfBirth();
-
+ String getDateOfBirth();
+
/**
- * String formated date of birth of the user with pattern yyyy-MM-dd.
- *
- *
- * @return date of birth or '2999-12-31' if no data of birth is available
+ * Get date of birth with a specific date pattern.
+ *
+ * <p><b>Attention:</b> If birthday has un unusal form like <i>MM</i> and <i>dd</i> are <i>00</i>
+ * a transformation CAN NOT be possible </p>
+ *
+ * @param pattern Date pattern, like "yyyy-MM-dd" e.g.
+ * @return Formatted birthday or <code>null</code> if date can not be transformed
*/
- String getFormatedDateOfBirth();
+ String getDateOfBirthFormated(String pattern);
/**
* Get the encrypted SourceId (vSZ) from new E-ID scheme.
diff --git a/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/idp/ISpConfiguration.java b/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/idp/ISpConfiguration.java
index 5a16f655..dd4041fc 100644
--- a/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/idp/ISpConfiguration.java
+++ b/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/idp/ISpConfiguration.java
@@ -22,6 +22,7 @@ package at.gv.egiz.eaaf.core.api.idp;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
+import java.util.Set;
public interface ISpConfiguration extends Serializable {
@@ -121,7 +122,7 @@ public interface ISpConfiguration extends Serializable {
*
* @return
*/
- List<String> getTargetsWithNoBaseIdInternalProcessingRestriction();
+ Set<String> getTargetsWithNoBaseIdInternalProcessingRestriction();
/**
* Get the {@link List} of identifier's that indicates no baseID transfer
@@ -131,7 +132,7 @@ public interface ISpConfiguration extends Serializable {
*
* @return
*/
- List<String> getTargetsWithNoBaseIdTransferRestriction();
+ Set<String> getTargetsWithNoBaseIdTransferRestriction();
/**
* Get the List eIDAS LoA that are required by this service provider.
diff --git a/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/idp/auth/IAuthenticationManager.java b/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/idp/auth/IAuthenticationManager.java
index 3dba4e78..c72c5b6f 100644
--- a/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/idp/auth/IAuthenticationManager.java
+++ b/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/idp/auth/IAuthenticationManager.java
@@ -23,7 +23,6 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
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;
@@ -35,22 +34,6 @@ public interface IAuthenticationManager {
int EVENT_AUTHENTICATION_PROCESS_ERROR = 4002;
/**
- * Add a request parameter to whitelist. All parameters that are part of the
- * white list are added into {@link ExecutionContext}
- *
- * @param httpReqParam http parameter name, but never null
- */
- void addParameterNameToWhiteList(String httpReqParam);
-
- /**
- * Add a request header to whitelist. All parameters that are part of the white
- * list are added into {@link ExecutionContext}
- *
- * @param httpReqParam http header name, but never null
- */
- void addHeaderNameToWhiteList(String httpReqParam);
-
- /**
* Starts an authentication process for a specific pending request.
*
* @param httpReq http servlet request
diff --git a/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/idp/auth/data/IAuthProcessDataContainer.java b/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/idp/auth/data/IAuthProcessDataContainer.java
index 274f3f7f..cb9adbc8 100644
--- a/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/idp/auth/data/IAuthProcessDataContainer.java
+++ b/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/idp/auth/data/IAuthProcessDataContainer.java
@@ -21,6 +21,8 @@ package at.gv.egiz.eaaf.core.api.idp.auth.data;
import java.util.Date;
import java.util.Map;
+import java.util.Map.Entry;
+import java.util.stream.Stream;
import at.gv.egiz.eaaf.core.exceptions.EaafStorageException;
@@ -167,8 +169,21 @@ public interface IAuthProcessDataContainer {
*/
Date getSessionCreated();
+ /**
+ * Get all generic data from session.
+ *
+ * @return {@link Map} of generic data in key/value format
+ */
Map<String, Object> getGenericSessionDataStorage();
+
+ /**
+ * Get all generic data from session as {@link Stream} of {@link Entry} elements.
+ *
+ * @return {@link Stream} of generic data
+ */
+ Stream<Entry<String, Object>> getGenericSessionDataStream();
+
/**
* Returns a generic session-data object with is stored with a specific
* identifier.
diff --git a/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/idp/auth/data/IEidAuthProcessData.java b/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/idp/auth/data/IEidAuthProcessData.java
new file mode 100644
index 00000000..36298824
--- /dev/null
+++ b/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/idp/auth/data/IEidAuthProcessData.java
@@ -0,0 +1,25 @@
+package at.gv.egiz.eaaf.core.api.idp.auth.data;
+
+/**
+ * Authentication session-data that adds ID Austria specific information.
+ *
+ * @author tlenz
+ *
+ */
+public interface IEidAuthProcessData extends IAuthProcessDataContainer {
+
+ /**
+ * Flag that indicates if user is a test-identity.
+ *
+ * @return <code>true</code> if user is a test-identity, otherwise <code>false</code>
+ */
+ boolean isTestIdentity();
+
+
+ /**
+ * Set test-identity flag for this user.
+ *
+ * @param flag <code>true</code> if user is a test-identity
+ */
+ void setTestIdentity(boolean flag);
+}
diff --git a/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/idp/auth/data/IIdentityLink.java b/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/idp/auth/data/IIdentityLink.java
index 74c82181..a2288a5b 100644
--- a/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/idp/auth/data/IIdentityLink.java
+++ b/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/idp/auth/data/IIdentityLink.java
@@ -21,6 +21,7 @@ package at.gv.egiz.eaaf.core.api.idp.auth.data;
import java.io.IOException;
import java.security.PublicKey;
+import java.util.Date;
import javax.xml.transform.TransformerException;
@@ -28,7 +29,7 @@ import org.w3c.dom.Element;
/**
* Deprecated IdentityLink interface.
- *
+ *
* @author tlenz
*
*/
@@ -188,6 +189,13 @@ public interface IIdentityLink {
String getIssueInstant();
/**
+ * Returns the issuing time of the identity link SAML assertion.
+ *
+ * @return The issuing time of the identity link SAML assertion.
+ */
+ Date getIssueInstantDate();
+
+ /**
* Sets the issuing time of the identity link SAML assertion.
*
* @param issueInstant The issueInstant to set.
diff --git a/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/idp/auth/services/IProtocolAuthenticationService.java b/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/idp/auth/services/IProtocolAuthenticationService.java
index d1d68c2d..8def4e32 100644
--- a/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/idp/auth/services/IProtocolAuthenticationService.java
+++ b/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/api/idp/auth/services/IProtocolAuthenticationService.java
@@ -21,6 +21,7 @@ package at.gv.egiz.eaaf.core.api.idp.auth.services;
import java.io.IOException;
+import javax.annotation.Nonnull;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -34,8 +35,12 @@ public interface IProtocolAuthenticationService {
String PARAM_GUI_ERROMSG = "errorMsg";
String PARAM_GUI_ERRORCODE = "errorCode";
+ String PARAM_GUI_EXTERNAL_ERRORCODE = "extErrorCode";
String PARAM_GUI_ERRORCODEPARAMS = "errorParams";
String PARAM_GUI_ERRORSTACKTRACE = "stacktrace";
+ String PARAM_GUI_TICKET = "supportTicket";
+ String PARAM_GUI_REDIRECT = "redirectLink";
+
/**
* Initialize an authentication process for this protocol request.
@@ -46,8 +51,8 @@ public interface IProtocolAuthenticationService {
* @throws IOException In case of a communication error
* @throws EaafException In case of an application error
*/
- void performAuthentication(HttpServletRequest httpReq, HttpServletResponse httpResp, IRequest pendingReq)
- throws IOException, EaafException;
+ void performAuthentication(@Nonnull HttpServletRequest httpReq, @Nonnull HttpServletResponse httpResp,
+ @Nonnull IRequest pendingReq) throws IOException, EaafException;
/**
* Finalize the requested protocol operation.
@@ -59,8 +64,8 @@ public interface IProtocolAuthenticationService {
* {@link HttpServletResponse}
* @throws EaafException If an internal error occur
*/
- void finalizeAuthentication(HttpServletRequest httpReq, HttpServletResponse httpResp, IRequest pendingReq)
- throws EaafException, IOException;
+ void finalizeAuthentication(@Nonnull HttpServletRequest httpReq, @Nonnull HttpServletResponse httpResp,
+ @Nonnull IRequest pendingReq) throws EaafException, IOException;
/**
* Build protocol-specific error message.
@@ -73,8 +78,8 @@ public interface IProtocolAuthenticationService {
* {@link HttpServletResponse}
* @throws EaafException If an internal error occur
*/
- void buildProtocolSpecificErrorResponse(Throwable throwable, HttpServletRequest req, HttpServletResponse resp,
- IRequest pendingReq) throws IOException, EaafException;
+ void buildProtocolSpecificErrorResponse(@Nonnull Throwable throwable, @Nonnull HttpServletRequest req,
+ @Nonnull HttpServletResponse resp, @Nonnull IRequest pendingReq) throws IOException, EaafException;
/**
* Handles all exceptions with no pending request. Therefore, the error is
@@ -91,21 +96,21 @@ public interface IProtocolAuthenticationService {
* {@link HttpServletResponse}
* @throws EaafException If an internal error occure
*/
- void handleErrorNoRedirect(Throwable throwable, HttpServletRequest req, HttpServletResponse resp,
- boolean writeExceptionToStatisticLog) throws IOException, EaafException;
+ void handleErrorNoRedirect(@Nonnull Throwable throwable, @Nonnull HttpServletRequest req,
+ @Nonnull HttpServletResponse resp, boolean writeExceptionToStatisticLog) throws IOException, EaafException;
/**
* Forward the process to error-handler in case of an error.
- *
+ *
* @param errorToHandle Error to handle
* @param errorKey ErrorId for error-handler
* @param req HTTP response
* @param resp HTTP response
* @throws GuiBuildException In case of an GUI generation error
*/
- void forwardToErrorHandler(Pair<IRequest, Throwable> errorToHandle, String errorKey,
- HttpServletRequest req, HttpServletResponse resp) throws GuiBuildException;
-
-
-
+ void forwardToErrorHandler(@Nonnull Pair<IRequest, Throwable> errorToHandle, @Nonnull String errorKey,
+ @Nonnull HttpServletRequest req, @Nonnull HttpServletResponse resp) throws GuiBuildException;
+
+
+
}
diff --git a/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/exceptions/EaafException.java b/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/exceptions/EaafException.java
index 351c6bbe..e1719abc 100644
--- a/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/exceptions/EaafException.java
+++ b/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/exceptions/EaafException.java
@@ -27,8 +27,7 @@ import at.gv.egiz.eaaf.core.impl.logging.LogMessageProviderFactory;
public class EaafException extends Exception {
- private static final long serialVersionUID = 1L;
-
+ private static final long serialVersionUID = -4527097018108560426L;
private String errorId = null;
private Object[] params = null;
diff --git a/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/exceptions/PendingReqIdValidationException.java b/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/exceptions/PendingReqIdValidationException.java
index ddc051b0..e7c968b5 100644
--- a/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/exceptions/PendingReqIdValidationException.java
+++ b/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/exceptions/PendingReqIdValidationException.java
@@ -15,10 +15,10 @@ public class PendingReqIdValidationException extends EaafException {
* Pending-Request Id validation error.
*
* @param internalPendingReqId Internal Pending-Request Id
- * @param reason error-message
+ * @param errorId Detailed Id of the error
*/
- public PendingReqIdValidationException(final String internalPendingReqId, @Nonnull final String reason) {
- super("process.99", new Object[] { internalPendingReqId, reason });
+ public PendingReqIdValidationException(final String internalPendingReqId, @Nonnull final String errorId) {
+ super(errorId, new Object[] { internalPendingReqId});
this.invalidInternalPendingReqId = internalPendingReqId;
}
@@ -27,12 +27,12 @@ public class PendingReqIdValidationException extends EaafException {
* Pending-Request Id validation error.
*
* @param internalPendingReqId Internal Pending-Request Id
- * @param reason error-message
+ * @param errorId Detailed Id of the error
* @param e error
*/
- public PendingReqIdValidationException(final String internalPendingReqId, @Nonnull final String reason,
+ public PendingReqIdValidationException(final String internalPendingReqId, @Nonnull final String errorId,
final Throwable e) {
- super("process.99", new Object[] { internalPendingReqId, reason }, e);
+ super(errorId, new Object[] { internalPendingReqId, errorId }, e);
this.invalidInternalPendingReqId = internalPendingReqId;
}
diff --git a/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/exceptions/XPathException.java b/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/exceptions/XPathException.java
index b20efe3d..3343a089 100644
--- a/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/exceptions/XPathException.java
+++ b/eaaf_core_api/src/main/java/at/gv/egiz/eaaf/core/exceptions/XPathException.java
@@ -19,9 +19,6 @@
package at.gv.egiz.eaaf.core.exceptions;
-import java.io.PrintStream;
-import java.io.PrintWriter;
-
/**
* An exception occurred evaluating an XPath.
*
@@ -56,32 +53,4 @@ public class XPathException extends RuntimeException {
return wrapped;
}
- /**
- * Print error message.
- *
- * @see java.lang.Throwable#printStackTrace(java.io.PrintStream)
- */
- @Override
- public void printStackTrace(final PrintStream s) {
- super.printStackTrace(s);
- if (getWrapped() != null) {
- s.print("Caused by: ");
- getWrapped().printStackTrace(s);
- }
- }
-
- /**
- * Print error message.
- *
- * @see java.lang.Throwable#printStackTrace(java.io.PrintWriter)
- */
- @Override
- public void printStackTrace(final PrintWriter s) {
- super.printStackTrace(s);
- if (getWrapped() != null) {
- s.print("Caused by: ");
- getWrapped().printStackTrace(s);
- }
- }
-
}