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); 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 void stopProcessFromUserDecision(ExecutionContext executionContext, HttpServletRequest request, HttpServletResponse response) throws TaskExecutionException { try { revisionsLogger.logEvent(pendingReq, EAAFEventCodes.PROCESS_STOPPED_BY_USER); pendingReq.setAbortedByUser(true); pendingReq.setAuthenticated(false); performRedirectToProtocolFinialization(executionContext, pendingReq, request, response); log.trace("Set process-cancelation flag"); executionContext.setCanceleProcessFlag(); } 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); } } protected boolean parseFlagFromHttpRequest(HttpServletRequest httpReq, String httpParamName, 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; }