/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.vertical.adminweb; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.mail.MessagingException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import javax.xml.transform.Source; import javax.xml.transform.TransformerException; import javax.xml.transform.dom.DOMSource; import org.apache.commons.lang.StringUtils; import org.jdom.transform.JDOMSource; import org.springframework.util.Assert; import org.w3c.dom.Document; import com.enonic.esl.containers.ExtendedMap; import com.enonic.esl.net.URL; import com.enonic.vertical.adminweb.wizard.Wizard; import com.enonic.vertical.engine.VerticalEngineException; import com.enonic.cms.framework.xml.XMLDocument; import com.enonic.cms.framework.xml.XMLDocumentFactory; import com.enonic.cms.core.security.user.DeleteUserStoreCommand; import com.enonic.cms.core.security.user.User; import com.enonic.cms.core.security.user.UserEntity; import com.enonic.cms.core.security.userstore.DeleteUserStoreJob; import com.enonic.cms.core.security.userstore.UserStoreEntity; import com.enonic.cms.core.security.userstore.UserStoreKey; import com.enonic.cms.core.security.userstore.UserStoreXmlCreator; import com.enonic.cms.core.security.userstore.connector.synchronize.SynchronizeUserStoreJob; import com.enonic.cms.core.security.userstore.connector.synchronize.SynchronizeUserStoreType; import com.enonic.cms.core.service.AdminService; public class UserStoreHandlerServlet extends AdminHandlerBaseServlet { private static final String WIZARD_CONFIG_CREATE_UPDATE = "wizardconfig_create_update_userstore.xml"; private User verifyAccessToEditUserStore() throws VerticalAdminException { UserEntity user = securityService.getLoggedInAdminConsoleUserAsEntity(); if ( memberOfResolver.hasEnterpriseAdminPowers( user.getKey() ) ) { return user; } VerticalAdminLogger.errorAdmin( "Not authorized." ); return null; } public void handlerBrowse( HttpServletRequest request, HttpServletResponse response, HttpSession session, AdminService admin, ExtendedMap formItems ) throws VerticalAdminException { // verifyAccess( null ); User user = securityService.getLoggedInAdminConsoleUser(); UserEntity userEntity = userDao.findByKey( user.getKey() ); final UserStoreXmlCreator xmlCreator = new UserStoreXmlCreator( userStoreService.getUserStoreConnectorConfigs() ); final List<UserStoreEntity> userStores = securityService.getUserStores(); final List<UserStoreEntity> validUserStores = new ArrayList<UserStoreEntity>(); for ( UserStoreEntity userStoreEntity : userStores ) { if ( memberOfResolver.hasUserStoreAdministratorPowers( userEntity, userStoreEntity.getKey() ) ) { validUserStores.add( userStoreEntity ); } } final org.jdom.Document userStoresXml = xmlCreator.createPagedDocument( validUserStores, 0, 100 ); Source xslSource = AdminStore.getStylesheet( session, "userstore_browse.xsl" ); // parameters ExtendedMap xslParams = new ExtendedMap(); xslParams.put( "page", formItems.getString( "page" ) ); addSortParamteres( "@name", "ascending", formItems, session, xslParams ); addAccessLevelParameters( user, xslParams ); if ( formItems.containsKey( "reload" ) ) { xslParams.put( "reload", "true" ); } try { transformXML( session, response.getWriter(), new JDOMSource( userStoresXml ), xslSource, xslParams ); } catch ( IOException e ) { VerticalAdminLogger.errorAdmin( "I/O error: %t", e ); } catch ( TransformerException e ) { VerticalAdminLogger.errorAdmin( "XSLT error: %t", e ); } } public void handlerForm( HttpServletRequest request, HttpServletResponse response, HttpSession session, AdminService admin, ExtendedMap formItems ) throws VerticalAdminException, VerticalEngineException, IOException, MessagingException { verifyAccessToEditUserStore(); URL url = new URL( request.getHeader( "referer" ) ); url.setParameter( "reload", "true" ); formItems.put( "redirect", url.toString() ); ExtendedMap parameters = new ExtendedMap(); User user = securityService.getLoggedInAdminConsoleUser(); Wizard createUpdateWizard = Wizard.getInstance( admin, applicationContext, this, session, formItems, WIZARD_CONFIG_CREATE_UPDATE ); createUpdateWizard.processRequest( request, response, session, admin, formItems, parameters, user ); } public void handlerRemove( HttpServletRequest request, HttpServletResponse response, HttpSession session, AdminService admin, ExtendedMap formItems, int key ) throws VerticalAdminException, VerticalEngineException { User loggedInUser = securityService.getLoggedInAdminConsoleUser(); Assert.isTrue( StringUtils.isNotEmpty( formItems.getString( "key", null ) ), "UserStore key required" ); final DeleteUserStoreCommand command = new DeleteUserStoreCommand(); command.setKey( new UserStoreKey( formItems.getString( "key" ) ) ); command.setDeleter( loggedInUser.getKey() ); final int batchSize = 20; final DeleteUserStoreJob job = new DeleteUserStoreJob( userStoreService, command, batchSize ); job.start(); if ( formItems.containsKey( "redirect_to" ) ) { redirectClientToAdminPath( formItems.getString( "redirect_to" ), request, response ); } else { ExtendedMap params = new ExtendedMap(); params.put( "page", formItems.getString( "page" ) ); params.put( "op", "browse" ); params.put( "reload", "true" ); redirectClientToAdminPath( "adminpage", params, request, response ); } } public void handlerCustom( HttpServletRequest request, HttpServletResponse response, HttpSession session, AdminService admin, ExtendedMap formItems, String operation ) throws VerticalEngineException, VerticalAdminException { User user = securityService.getLoggedInAdminConsoleUser(); SynchronizeUserStoreType syncType = null; if ( "synchronize_all".equals( operation ) ) { syncType = SynchronizeUserStoreType.USERS_AND_GROUPS; } else if ( "synchronize_groups".equals( operation ) ) { syncType = SynchronizeUserStoreType.GROUPS_ONLY; } else if ( "synchronize_users".equals( operation ) ) { syncType = SynchronizeUserStoreType.USERS_ONLY; } if ( syncType != null ) { final UserStoreKey userStoreKey = new UserStoreKey( formItems.getInt( "domainkey" ) ); final SynchronizeUserStoreJob job = synchronizeUserStoreJobFactory.createSynchronizeUserStoreJob( userStoreKey, syncType, 5 ); job.start(); if ( formItems.containsKey( "redirect_to" ) ) { String path = (String) formItems.get( "redirect_to" ); redirectClientToAdminPath( path, request, response ); } else { ExtendedMap params = new ExtendedMap(); params.put( "page", formItems.getString( "page" ) ); params.put( "op", "browse" ); redirectClientToAdminPath( "adminpage", params, request, response ); } } else if ( "page".equals( operation ) ) { handlerPage( request, response, session, admin, formItems, operation ); } } private void handlerPage( HttpServletRequest request, HttpServletResponse response, HttpSession session, AdminService admin, ExtendedMap formItems, String operation ) throws VerticalEngineException, VerticalAdminException { User user = securityService.getLoggedInAdminConsoleUser(); UserStoreKey userStoreKey = new UserStoreKey( formItems.getInt( "key" ) ); final UserStoreXmlCreator userStoreXmlCreator = new UserStoreXmlCreator( userStoreService.getUserStoreConnectorConfigs() ); UserStoreEntity userStore = userStoreService.getUserStore( userStoreKey ); XMLDocument userStoresXmlDoc = XMLDocumentFactory.create( userStoreXmlCreator.createUserStoresDocument( userStore ) ); Document dataDoc = userStoresXmlDoc.getAsDOMDocument(); try { boolean isUserStoreAdministrator = memberOfResolver.hasUserStoreAdministratorPowers( user.getKey(), userStoreKey ); // parameters ExtendedMap xslParams = new ExtendedMap(); xslParams.put( "page", formItems.getString( "page" ) ); xslParams.put( "key", String.valueOf( userStoreKey ) ); xslParams.put( "reload", formItems.getString( "reload", "" ) ); xslParams.put( "userstorekey", userStoreKey.toString() ); xslParams.put( "userstorename", userStore.getName() ); addCommonParameters( admin, user, request, xslParams, -1, -1 ); addAccessLevelParameters( user, xslParams ); xslParams.put( "userstoreadmin", isUserStoreAdministrator ); boolean canSyncUsers = false; boolean canSyncGroups = false; try { canSyncUsers = userStoreService.canSynchronizeUsers( userStoreKey ); canSyncGroups = userStoreService.canSynchronizeGroups( userStoreKey ); } catch ( final Exception e ) { xslParams.put( "userStoreConfigError", e.getMessage() ); } xslParams.put( "synchronizeUsers", canSyncUsers ); xslParams.put( "synchronizeGroups", canSyncGroups ); Source xslSource = AdminStore.getStylesheet( session, "userstore_page.xsl" ); Source xmlSource = new DOMSource( dataDoc ); transformXML( session, response.getWriter(), xmlSource, xslSource, xslParams ); } catch ( TransformerException e ) { VerticalAdminLogger.errorAdmin( "XSLT error: %t", e ); } catch ( IOException e ) { VerticalAdminLogger.errorAdmin( "I/O error: %t", e ); } } }