summaryrefslogtreecommitdiff
path: root/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/auth/services/TicketErrorService.java
diff options
context:
space:
mode:
Diffstat (limited to 'eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/auth/services/TicketErrorService.java')
-rw-r--r--eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/auth/services/TicketErrorService.java48
1 files changed, 45 insertions, 3 deletions
diff --git a/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/auth/services/TicketErrorService.java b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/auth/services/TicketErrorService.java
index 557614e6..e5f7a5ea 100644
--- a/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/auth/services/TicketErrorService.java
+++ b/eaaf_core/src/main/java/at/gv/egiz/eaaf/core/impl/idp/auth/services/TicketErrorService.java
@@ -5,7 +5,11 @@ import java.io.InputStream;
import java.net.URISyntaxException;
import java.text.MessageFormat;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
import javax.annotation.Nonnull;
import javax.annotation.PostConstruct;
@@ -22,6 +26,7 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.type.CollectionType;
import com.fasterxml.jackson.databind.type.TypeFactory;
+import at.gv.egiz.eaaf.core.api.IRequest;
import at.gv.egiz.eaaf.core.api.IStatusMessenger;
import at.gv.egiz.eaaf.core.api.data.EaafConstants;
import at.gv.egiz.eaaf.core.api.gui.ModifyableGuiBuilderConfiguration;
@@ -58,6 +63,9 @@ public abstract class TicketErrorService implements IErrorService {
@Autowired
IPendingRequestIdGenerationStrategy requestIdValidationStragegy;
+ @Autowired(required = false)
+ Set<IErrorServiceModelHandler> modelExtensionHandlers;
+
@Override
public String getExternalCodeFromInternal(String internalCode) {
ErrorConfig errorConfig = findByInternalCode(internalCode);
@@ -70,7 +78,7 @@ public abstract class TicketErrorService implements IErrorService {
}
@Override
- public IHandleData createHandleData(Throwable throwable, boolean supportRedirctToSp) throws EaafException {
+ public IHandleData createHandleData(Throwable throwable, IRequest protocolRequest) throws EaafException {
String internalErrorId = extractInternalErrorCode(throwable);
ErrorConfig errorFlowConfig = findByInternalCode(internalErrorId);
ActionType errorHandlingFlow = errorFlowConfig.getActionType();
@@ -82,7 +90,8 @@ public abstract class TicketErrorService implements IErrorService {
.logLevel(LogLevel.fromString(errorFlowConfig.getLogLevel()))
.supportTicket(ActionType.TICKET.equals(errorHandlingFlow) ? generateSupportTicket() : null)
.errorIdTokenForRedirect(
- supportRedirctToSp ? requestIdValidationStragegy.generateExternalPendingRequestId() : null)
+ protocolRequest != null ? requestIdValidationStragegy.generateExternalPendingRequestId() : null)
+ .additionalGuiModelElements(readAdditionalGuiModelInfos(protocolRequest))
.build();
}
@@ -95,6 +104,11 @@ public abstract class TicketErrorService implements IErrorService {
}
var ed = (TicketErrorService.HandleData) errorData;
+ // inject all additional model parameters
+ errorData.getAdditionalGuiModelElements().entrySet().forEach(
+ el -> c.putCustomParameter(
+ AbstractGuiFormBuilderConfiguration.PARAM_GROUP_MSG, el.getKey(), el.getValue()));
+
// set SupportTicket
c.putCustomParameter(AbstractGuiFormBuilderConfiguration.PARAM_GROUP_MSG, PARAM_GUI_TICKET, ed.getSupportTicket());
@@ -134,6 +148,20 @@ public abstract class TicketErrorService implements IErrorService {
}
+ private Map<String, String> readAdditionalGuiModelInfos(IRequest protocolRequest) {
+ if (protocolRequest != null) {
+ log.trace("Searching for additional GUI model elements to inject ... ");
+ return modelExtensionHandlers.stream()
+ .map(el -> el.elementsForErrorModel(protocolRequest))
+ .flatMap(m -> m.entrySet().stream())
+ .collect(Collectors.toUnmodifiableMap(Map.Entry::getKey, Map.Entry::getValue));
+
+ }
+
+ return Collections.emptyMap();
+
+ }
+
private String extractInternalErrorCode(Throwable throwable) {
Throwable originalException;
if (throwable instanceof TaskExecutionException
@@ -188,6 +216,17 @@ public abstract class TicketErrorService implements IErrorService {
new Object[]{CONFIG_PROP_ERROR_HANDLING_CONFIG_PATH, "Error reading Configurations file"});
}
+ // log currently loaded GUI model extension handlers
+ if (modelExtensionHandlers != null) {
+ modelExtensionHandlers.forEach(el -> log.info(
+ "Register Consent Attribute-Parameter handler: {} into Consent-RequestedAttributes Handler",
+ el.getClass().getName()));
+
+ } else {
+ modelExtensionHandlers = Collections.emptySet();
+
+ }
+
}
private byte[] readFromFile(final String filePath) throws URISyntaxException, IOException {
@@ -219,6 +258,9 @@ public abstract class TicketErrorService implements IErrorService {
@Getter
private LogLevel logLevel;
+
+ @Getter
+ private Map<String, String> additionalGuiModelElements;
public String getPreFormatedErrorMessage() {
if (supportTicket != null) {
@@ -228,7 +270,7 @@ public abstract class TicketErrorService implements IErrorService {
return MessageFormat.format(TECH_LOG_MSG, internalErrorCode, throwable.getMessage());
}
- }
+ }
}
}