package at.gv.egiz.eaaf.core.impl.idp.controller.tasks; import java.io.Serializable; import org.apache.commons.lang3.StringUtils; import org.apache.commons.text.StringEscapeUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import at.gv.egiz.eaaf.core.api.data.EaafConstants; import at.gv.egiz.eaaf.core.api.idp.process.ExecutionContext; import at.gv.egiz.eaaf.core.exceptions.TaskExecutionException; import at.gv.egiz.eaaf.core.impl.idp.auth.modules.AbstractAuthServletTask; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; public abstract class AbstractLocaleAuthServletTask extends AbstractAuthServletTask { private static final Logger log = LoggerFactory.getLogger(AbstractLocaleAuthServletTask.class); public static final String PROP_REQ_PARAM_LOCALE = "lang"; @Override public final void execute(final ExecutionContext executionContext, final HttpServletRequest request, final HttpServletResponse response) throws TaskExecutionException { final Serializable changeLangFlag = executionContext.get(EaafConstants.PROCESSCONTEXT_SWITCH_LANGUAGE); final String localeParam = StringEscapeUtils.escapeHtml4(request.getParameter(PROP_REQ_PARAM_LOCALE)); if (StringUtils.isNotEmpty(localeParam) && (changeLangFlag == null || !((Boolean) changeLangFlag))) { log.debug("Find {} parameter. Reload last task with new locale: {}", PROP_REQ_PARAM_LOCALE, localeParam); executionContext.put(EaafConstants.PROCESSCONTEXT_SWITCH_LANGUAGE, true); } else { log.trace("Find {} parameter. Processing this task ... ", PROP_REQ_PARAM_LOCALE); executionContext.put(EaafConstants.PROCESSCONTEXT_SWITCH_LANGUAGE, false); if (parseFlagFromHttpRequest(request, EaafConstants.PARAM_HTTP_STOP_PROCESS, false)) { log.info("Authentication process WAS stopped by entity. Stopping auth. process ... "); stopProcessFromUserDecision(executionContext, request, response); } else { executeWithLocale(executionContext, request, response); } } } protected boolean parseFlagFromHttpRequest(final HttpServletRequest httpReq, final String httpParamName, final boolean defaultValue) { final String flag = httpReq.getParameter(httpParamName); log.trace("Get httpParam: {} with value: {}", httpParamName, flag); if (StringUtils.isNotEmpty(httpParamName)) { return Boolean.parseBoolean(flag); } else { return defaultValue; } } protected abstract void executeWithLocale(ExecutionContext executionContext, HttpServletRequest request, HttpServletResponse response) throws TaskExecutionException; }