/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.vertical.adminweb; import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.beans.BeansException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.web.context.ServletContextAware; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.Controller; import com.enonic.esl.containers.ExtendedMap; import com.enonic.esl.containers.MultiValueMap; import com.enonic.esl.net.URL; import com.enonic.vertical.engine.handlers.MenuHandler; import com.enonic.cms.framework.util.MimeTypeResolver; import com.enonic.cms.core.content.ContentParserService; import com.enonic.cms.core.content.ContentService; import com.enonic.cms.core.content.category.CategoryService; import com.enonic.cms.core.content.imports.ImportJobFactory; import com.enonic.cms.core.content.imports.ImportService; import com.enonic.cms.core.country.CountryService; import com.enonic.cms.core.locale.LocaleService; import com.enonic.cms.core.log.LogService; import com.enonic.cms.core.mail.SendMailService; import com.enonic.cms.core.portal.cache.PageCacheService; import com.enonic.cms.core.portal.rendering.PageRendererFactory; import com.enonic.cms.core.preview.PreviewService; import com.enonic.cms.core.resolver.deviceclass.DeviceClassResolverService; import com.enonic.cms.core.resolver.locale.LocaleResolverService; import com.enonic.cms.core.resource.ResourceService; import com.enonic.cms.core.resource.access.ResourceAccessResolver; import com.enonic.cms.core.search.query.ContentIndexService; import com.enonic.cms.core.security.AdminConsoleLoginAccessResolver; import com.enonic.cms.core.security.SecurityService; import com.enonic.cms.core.security.userstore.MemberOfResolver; import com.enonic.cms.core.security.userstore.UserStoreService; import com.enonic.cms.core.security.userstore.connector.synchronize.SynchronizeUserStoreJobFactory; import com.enonic.cms.core.service.AdminService; import com.enonic.cms.core.service.KeyService; import com.enonic.cms.core.structure.SitePropertiesService; import com.enonic.cms.core.structure.SiteService; import com.enonic.cms.core.structure.menuitem.MenuItemService; import com.enonic.cms.core.structure.page.template.PageTemplateService; import com.enonic.cms.core.time.TimeService; import com.enonic.cms.core.timezone.TimeZoneService; import com.enonic.cms.core.xslt.admin.AdminXsltProcessorFactory; import com.enonic.cms.store.dao.CategoryDao; import com.enonic.cms.store.dao.ContentDao; import com.enonic.cms.store.dao.ContentHandlerDao; import com.enonic.cms.store.dao.ContentTypeDao; import com.enonic.cms.store.dao.ContentVersionDao; import com.enonic.cms.store.dao.GroupDao; import com.enonic.cms.store.dao.LanguageDao; import com.enonic.cms.store.dao.MenuItemDao; import com.enonic.cms.store.dao.PageTemplateDao; import com.enonic.cms.store.dao.PortletDao; import com.enonic.cms.store.dao.SiteDao; import com.enonic.cms.store.dao.UnitDao; import com.enonic.cms.store.dao.UserDao; import com.enonic.cms.store.dao.UserStoreDao; import com.enonic.cms.upgrade.UpgradeService; public abstract class AbstractAdminwebServlet implements Controller, ServletContextAware, ApplicationContextAware { @Autowired protected CategoryDao categoryDao; @Autowired protected ContentDao contentDao; @Autowired protected ContentIndexService contentIndexService; @Autowired protected ContentHandlerDao contentHandlerDao; @Autowired protected ContentTypeDao contentTypeDao; @Autowired protected ContentVersionDao contentVersionDao; @Autowired protected GroupDao groupDao; protected LanguageDao languageDao; @Autowired protected MenuItemDao menuItemDao; @Autowired protected PageTemplateDao pageTemplateDao; @Autowired protected PortletDao portletDao; @Autowired protected SiteDao siteDao; @Autowired protected UnitDao unitDao; @Autowired protected UserDao userDao; protected UserStoreDao userStoreDao; // Services: @Autowired protected AdminService adminService; @Autowired protected ContentService contentService; @Autowired protected ContentParserService contentParserService; @Autowired protected CountryService countryService; @Autowired protected DeviceClassResolverService deviceClassResolverService; @Autowired protected ImportService importService; @Autowired protected KeyService keyService; @Autowired protected LocaleService localeService; @Autowired protected LocaleResolverService localeResolverService; @Autowired protected LogService logService; @Autowired protected MenuHandler menuHandler; @Autowired protected MenuItemService menuItemService; @Autowired protected ResourceService resourceService; protected SecurityService securityService; @Autowired protected CategoryService categoryService; @Autowired protected PageTemplateService pageTemplateService; @Autowired protected SendMailService sendMailService; @Autowired protected SiteService siteService; @Autowired protected PageCacheService pageCacheService; @Autowired protected SitePropertiesService sitePropertiesService; @Autowired protected TimeService timeService; @Autowired protected PreviewService previewService; @Autowired protected TimeZoneService timeZoneService; @Autowired protected UpgradeService upgradeService; protected UserStoreService userStoreService; // Factories: @Autowired protected ImportJobFactory importJobFactory; @Autowired protected PageRendererFactory pageRendererFactory; @Autowired protected SynchronizeUserStoreJobFactory synchronizeUserStoreJobFactory; // Resolvers: @Autowired protected AdminConsoleLoginAccessResolver adminConsoleLoginAccessResolver; protected MemberOfResolver memberOfResolver; @Autowired protected ResourceAccessResolver resourceAccessResolver; @Autowired protected MimeTypeResolver mimeTypeResolver; protected AdminXsltProcessorFactory xsltProcessorFactory; private ServletContext servletContext; public final ServletContext getServletContext() { return this.servletContext; } public final void setServletContext( final ServletContext servletContext ) { this.servletContext = servletContext; } protected ApplicationContext applicationContext; public void setApplicationContext( ApplicationContext applicationContext ) throws BeansException { this.applicationContext = applicationContext; } public ModelAndView handleRequest( final HttpServletRequest request, final HttpServletResponse response ) throws Exception { if ( request.getMethod().equalsIgnoreCase( "GET" ) ) { doGet( request, response ); } else if ( request.getMethod().equalsIgnoreCase( "POST" ) ) { doPost( request, response ); } else { response.sendError( HttpServletResponse.SC_METHOD_NOT_ALLOWED ); } return null; } protected void doGet( final HttpServletRequest request, final HttpServletResponse response ) throws Exception { response.sendError( HttpServletResponse.SC_METHOD_NOT_ALLOWED ); } protected void doPost( final HttpServletRequest request, final HttpServletResponse response ) throws Exception { response.sendError( HttpServletResponse.SC_METHOD_NOT_ALLOWED ); } protected AdminService lookupAdminBean() { return adminService; } protected boolean isRequestForAdminPath( String path, HttpServletRequest request ) { if ( path == null ) { throw new NullPointerException( path ); } if ( !path.startsWith( "/" ) ) { throw new IllegalArgumentException( "Expected a path that starts with a forward slash" ); } return request.getRequestURI().endsWith( path ); } protected void redirectClientToAdminPath( String adminPath, HttpServletRequest request, HttpServletResponse response ) throws VerticalAdminException { redirectClientToAdminPath( adminPath, (MultiValueMap) null, request, response ); } protected void redirectClientToAdminPath( String adminPath, ExtendedMap formItems, HttpServletRequest request, HttpServletResponse response ) throws VerticalAdminException { MultiValueMap mv = null; if ( formItems != null ) { mv = new MultiValueMap( formItems ); } redirectClientToAdminPath( adminPath, mv, request, response ); } protected void redirectClientToAdminPath( String adminPath, String parameterName, String parameterValue, HttpServletRequest request, HttpServletResponse response ) throws VerticalAdminException { MultiValueMap queryParams = new MultiValueMap(); queryParams.put( parameterName, parameterValue ); redirectClientToAdminPath( adminPath, queryParams, request, response ); } protected void redirectClientToAdminPath( String adminPath, MultiValueMap queryParams, HttpServletRequest request, HttpServletResponse response ) throws VerticalAdminException { AdminHelper.redirectClientToAdminPath( request, response, adminPath, queryParams ); } protected void redirectClientToReferer( HttpServletRequest request, HttpServletResponse response ) { AdminHelper.redirectClientToReferer( request, response ); } protected void redirectClientToURL( URL url, HttpServletResponse response ) { AdminHelper.redirectToURL( url, response ); } protected void redirectClientToAbsoluteUrl( String url, HttpServletResponse response ) { AdminHelper.redirectClientToAbsoluteUrl( url, response ); } protected void forwardRequest( String adminPath, HttpServletRequest request, HttpServletResponse response ) throws VerticalAdminException { int length = adminPath != null ? adminPath.length() : 0; length += "/admin".length(); StringBuffer newUrl = new StringBuffer( length ); newUrl.append( "/admin" ); newUrl.append( adminPath ); try { RequestDispatcher dispatcher = request.getRequestDispatcher( newUrl.toString() ); dispatcher.forward( request, response ); } catch ( IOException ioe ) { String message = "Failed to forward request to \"{0}\": %t"; VerticalAdminLogger.errorAdmin( message, adminPath, ioe ); } catch ( ServletException se ) { String message = "Failed to forward request to \"{0}\": %t"; VerticalAdminLogger.errorAdmin( message, adminPath, se ); } } @Autowired public void setUserStoreDao( UserStoreDao value ) { this.userStoreDao = value; } @Autowired public void setSecurityService( SecurityService value ) { this.securityService = value; } @Autowired public void setUserStoreService( UserStoreService value ) { this.userStoreService = value; } @Autowired public void setMemberOfResolver( MemberOfResolver value ) { this.memberOfResolver = value; } public AdminXsltProcessorFactory getXsltProcessorFactory() { return xsltProcessorFactory; } @Autowired public void setXsltProcessorFactory( final AdminXsltProcessorFactory xsltProcessorFactory ) { this.xsltProcessorFactory = xsltProcessorFactory; } }