diff options
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.java | 48 |
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()); } - } + } } } |