package org.exoplatform.platform.common.account.setup.web; import org.exoplatform.commons.api.settings.SettingService; import org.exoplatform.commons.api.settings.SettingValue; import org.exoplatform.commons.api.settings.data.Context; import org.exoplatform.commons.api.settings.data.Scope; import org.exoplatform.commons.utils.PropertyManager; import org.exoplatform.container.ExoContainerContext; import org.exoplatform.container.PortalContainer; import org.exoplatform.services.log.ExoLogger; import org.exoplatform.services.log.Log; import org.exoplatform.web.filter.Filter; import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; /** * @author <a href="fbradai@exoplatform.com">Fbradai</a> */ public class AccountSetupFilter implements Filter { private static final String PLF_PLATFORM_EXTENSION_SERVLET_CTX = "/platform-extension"; private static final String ACCOUNT_SETUP_SERVLET = "/accountSetup"; private static final String ACCOUNT_SETUP_SKIP_PROPERTY = "accountsetup.skip"; private static final Log LOG = ExoLogger.getLogger(AccountSetupFilter.class); SettingService settingService ; private static String REST_URI; @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest httpServletRequest = (HttpServletRequest)request; HttpServletResponse httpServletResponse = (HttpServletResponse)response; REST_URI = ExoContainerContext.getCurrentContainer().getContext().getRestContextName(); boolean isDevMod = PropertyManager.isDevelopping(); Boolean isSetupSkip = AccountSetup.SETUP_SKIP; String propertySetupSkip = PropertyManager.getProperty(ACCOUNT_SETUP_SKIP_PROPERTY); if(propertySetupSkip == null){ LOG.debug("Property accountsetup.skip not found in configuration.properties "); propertySetupSkip = "false"; } settingService = (SettingService) PortalContainer.getInstance().getComponentInstanceOfType(SettingService.class); boolean setupDone = false; SettingValue accountSetupNode = settingService.get(Context.GLOBAL, Scope.GLOBAL, AccountSetup.ACCOUNT_SETUP_NODE); if(accountSetupNode != null) { setupDone = true; } else if (isSetupSkip || propertySetupSkip.equals("true")) { settingService.set(Context.GLOBAL, Scope.GLOBAL, AccountSetup.ACCOUNT_SETUP_NODE, SettingValue.create("setup over:" + "true")); setupDone = true; } String requestUri = httpServletRequest.getRequestURI(); boolean isRestUri = (requestUri.contains(REST_URI)); if((!setupDone)&&(!isDevMod)&&(!isRestUri)) { ServletContext platformExtensionContext = httpServletRequest.getSession().getServletContext().getContext(PLF_PLATFORM_EXTENSION_SERVLET_CTX); platformExtensionContext.getRequestDispatcher(ACCOUNT_SETUP_SERVLET).forward(httpServletRequest, httpServletResponse); return; } chain.doFilter(request, response); } }