1 19 20 package com.sslexplorer.security.authwizard.actions; 21 22 import java.util.ArrayList ; 23 import java.util.Collections ; 24 import java.util.Comparator ; 25 import java.util.Iterator ; 26 import java.util.List ; 27 28 import javax.servlet.http.HttpServletRequest ; 29 import javax.servlet.http.HttpServletResponse ; 30 31 import org.apache.commons.logging.Log; 32 import org.apache.commons.logging.LogFactory; 33 import org.apache.struts.action.ActionForm; 34 import org.apache.struts.action.ActionForward; 35 import org.apache.struts.action.ActionMapping; 36 37 import com.sslexplorer.boot.PropertyList; 38 import com.sslexplorer.core.CoreEvent; 39 import com.sslexplorer.core.CoreEventConstants; 40 import com.sslexplorer.core.CoreServlet; 41 import com.sslexplorer.policyframework.PolicyConstants; 42 import com.sslexplorer.policyframework.PolicyDatabaseFactory; 43 import com.sslexplorer.policyframework.ResourceChangeEvent; 44 import com.sslexplorer.policyframework.ResourceType; 45 import com.sslexplorer.security.AuthenticationScheme; 46 import com.sslexplorer.security.AuthenticationSchemeResourceType; 47 import com.sslexplorer.security.SessionInfo; 48 import com.sslexplorer.security.SystemDatabaseFactory; 49 import com.sslexplorer.security.User; 50 import com.sslexplorer.security.authwizard.forms.AthenticationSchemeDetailsForm; 51 import com.sslexplorer.security.authwizard.forms.AthenticationSchemeSelectionForm; 52 import com.sslexplorer.wizard.AbstractWizardSequence; 53 import com.sslexplorer.wizard.WizardActionStatus; 54 import com.sslexplorer.wizard.actions.AbstractWizardAction; 55 import com.sslexplorer.wizard.forms.AbstractWizardFinishForm; 56 57 62 public class AthenticationSchemeFinishAction extends AbstractWizardAction { 63 64 private static final Log log = LogFactory.getLog(AthenticationSchemeFinishAction.class); 65 66 73 public int getNavigationContext(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { 74 return SessionInfo.USER_CONSOLE_CONTEXT | SessionInfo.MANAGEMENT_CONSOLE_CONTEXT; 75 } 76 77 84 public ActionForward unspecified(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { 85 List <WizardActionStatus> actionStatus = new ArrayList <WizardActionStatus>(); 86 AbstractWizardSequence seq = getWizardSequence(request); 87 String name = (String ) seq.getAttribute(AthenticationSchemeDetailsForm.ATTR_RESOURCE_NAME, null); 88 String description = (String ) seq.getAttribute(AthenticationSchemeDetailsForm.ATTR_RESOURCE_DESCRIPTION, null); 89 PropertyList selectedModules = ((PropertyList) seq.getAttribute(AthenticationSchemeSelectionForm.ATTR_SELECTED_MODULES, new PropertyList())); 90 AuthenticationScheme defaultAuthenticationScheme = null; 91 try { 92 try { 93 int priority = getAuthenticationSchemePriority(request); 94 defaultAuthenticationScheme = SystemDatabaseFactory.getInstance().createAuthenticationSchemeSequence( 95 getSessionInfo(request).getUser().getRealm().getRealmID(), name, description, 96 selectedModules.asArray(), true, priority); 97 CoreEvent evt = new ResourceChangeEvent(this, CoreEventConstants.CREATE_AUTHENTICATION_SCHEME, defaultAuthenticationScheme, getSessionInfo(request), CoreEvent.STATE_SUCCESSFUL); 98 int authCounter = 1; 99 for (Iterator i = selectedModules.iterator(); i.hasNext();) { 100 AuthenticationSchemeResourceType.addAuthenticationModule(evt, (String ) i.next(), authCounter); 101 authCounter++; 102 } 103 CoreServlet.getServlet().fireCoreEvent(evt); 104 } catch (Exception e) { 105 CoreServlet.getServlet().fireCoreEvent( 106 new ResourceChangeEvent(this, CoreEventConstants.CREATE_AUTHENTICATION_SCHEME, getSessionInfo(request), e)); 107 throw e; 108 } 109 actionStatus.add(new WizardActionStatus(WizardActionStatus.COMPLETED_OK, 110 "authwizard.athenticationSchemeFinish.status.authenticationSchemeCreated")); 111 } catch (Exception e) { 112 log.error("Failed to create profile.", e); 113 actionStatus.add(new WizardActionStatus(WizardActionStatus.COMPLETED_WITH_ERRORS, 114 "authwizard.athenticationSchemeFinish.status.failedToCreateAuthenticationScheme", e.getMessage())); 115 } 116 if (defaultAuthenticationScheme != null) { 117 actionStatus.add(attachToPoliciesAndAddToFavorites("authwizard.athenticationSchemeFinish", seq, defaultAuthenticationScheme, false, request)); 118 } 119 ((AbstractWizardFinishForm) form).setActionStatus(actionStatus); 120 return super.unspecified(mapping, form, request, response); 121 } 122 123 private int getAuthenticationSchemePriority(HttpServletRequest request) throws Exception { 124 User user = getSessionInfo(request).getUser(); 125 ResourceType resourceType = PolicyConstants.AUTHENTICATION_SCHEMES_RESOURCE_TYPE; 126 List <Integer > granted = PolicyDatabaseFactory.getInstance().getGrantedResourcesOfType(user, resourceType); 127 128 List <AuthenticationScheme> schemes = new ArrayList <AuthenticationScheme>(); 129 for (Integer resourceId : granted) { 130 AuthenticationScheme scheme = (AuthenticationScheme) resourceType.getResourceById(resourceId.intValue()); 131 schemes.add(scheme); 132 } 133 Collections.sort(schemes, new Comparator <AuthenticationScheme>() { 134 public int compare(AuthenticationScheme o1, AuthenticationScheme o2) { 135 return Math.abs(o1.getPriorityInt()) - Math.abs(o2.getPriorityInt()); 136 } 137 }); 138 AuthenticationScheme authenticationScheme = schemes.get(schemes.size() - 1); 139 return authenticationScheme.getPriorityInt() + 1; 140 } 141 142 150 public ActionForward exit(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) 151 throws Exception { 152 return cancel(mapping, form, request, response); 153 } 154 } 155 | Popular Tags |