package at.gv.egiz.eaaf.core.impl.idp.controller.tasks; import java.io.Serializable; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; 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.data.EAAFEventCodes; import at.gv.egiz.eaaf.core.api.idp.process.ExecutionContext; import at.gv.egiz.eaaf.core.exceptions.EAAFException; import at.gv.egiz.eaaf.core.exceptions.TaskExecutionException; import at.gv.egiz.eaaf.core.impl.idp.auth.modules.AbstractAuthServletTask; 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(ExecutionContext executionContext, HttpServletRequest request, 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.remove(EAAFConstants.PROCESSCONTEXT_SWITCH_LANGUAGE); final String stopAuthFlag = request.getParameter(EAAFConstants.PARAM_HTTP_STOP_PROCESS); if (StringUtils.isNotEmpty(stopAuthFlag) && Boolean.parseBoolean(stopAuthFlag)) { try { log.info("Authentication process WAS stopped by entity. Stopping auth. process ... "); revisionsLogger.logEvent(pendingReq, EAAFEventCodes.PROCESS_STOPPED_BY_USER); pendingReq.setAbortedByUser(true); pendingReq.setAuthenticated(false); performRedirectToProtocolFinialization(executionContext, pendingReq, request, response); } catch (final EAAFException e) { throw new TaskExecutionException(pendingReq, e.getMessage(), e); } catch (final Exception e) { log.warn("Stopping auth.process FAILED", e); throw new TaskExecutionException(pendingReq, e.getMessage(), e); } } else executeWithLocale(executionContext, request, response); } } protected abstract void executeWithLocale(ExecutionContext executionContext, HttpServletRequest request, HttpServletResponse response) throws TaskExecutionException; }