1 19 20 package com.sslexplorer.properties.actions; 21 22 import java.util.Calendar ; 23 24 import javax.servlet.http.HttpServletRequest ; 25 import javax.servlet.http.HttpServletResponse ; 26 27 import org.apache.commons.logging.Log; 28 import org.apache.commons.logging.LogFactory; 29 import org.apache.struts.Globals; 30 import org.apache.struts.action.ActionForm; 31 import org.apache.struts.action.ActionForward; 32 import org.apache.struts.action.ActionMapping; 33 import org.apache.struts.action.ActionMessage; 34 import org.apache.struts.action.ActionMessages; 35 36 import com.sslexplorer.core.CoreEventConstants; 37 import com.sslexplorer.core.CoreServlet; 38 import com.sslexplorer.core.CoreUtil; 39 import com.sslexplorer.policyframework.NoPermissionException; 40 import com.sslexplorer.policyframework.OwnedResource; 41 import com.sslexplorer.policyframework.Permission; 42 import com.sslexplorer.policyframework.PolicyConstants; 43 import com.sslexplorer.policyframework.PolicyDatabaseFactory; 44 import com.sslexplorer.policyframework.PolicyUtil; 45 import com.sslexplorer.policyframework.Resource; 46 import com.sslexplorer.policyframework.ResourceChangeEvent; 47 import com.sslexplorer.policyframework.ResourceStack; 48 import com.sslexplorer.policyframework.ResourceUtil; 49 import com.sslexplorer.policyframework.actions.AbstractResourceDispatchAction; 50 import com.sslexplorer.policyframework.forms.AbstractResourceForm; 51 import com.sslexplorer.properties.DefaultPropertyProfile; 52 import com.sslexplorer.properties.ProfilesFactory; 53 import com.sslexplorer.properties.PropertyProfile; 54 import com.sslexplorer.properties.forms.PropertyProfileForm; 55 import com.sslexplorer.security.Constants; 56 import com.sslexplorer.security.LogonControllerFactory; 57 import com.sslexplorer.security.SessionInfo; 58 import com.sslexplorer.security.User; 59 60 72 73 public class ShowPropertyProfileDispatchAction extends AbstractResourceDispatchAction { 74 75 final static Log log = LogFactory.getLog(ShowPropertyProfileDispatchAction.class); 76 77 80 public ShowPropertyProfileDispatchAction() { 81 super(PolicyConstants.PROFILE_RESOURCE_TYPE); 82 } 83 84 87 public ActionForward create(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) 88 throws Exception { 89 ResourceStack.pushToEditingStack(request.getSession(), createResource(mapping, form, request, response)); 90 ActionForward fwd = edit(mapping, form, request, response); 91 ((AbstractResourceForm) form).setCreating(); 92 return fwd; 93 } 94 95 protected void doCheckPermissions(ActionMapping mapping, SessionInfo session, HttpServletRequest request) throws Exception { 96 if(session.getNavigationContext() == SessionInfo.USER_CONSOLE_CONTEXT) { 97 PolicyUtil.checkPermission(PolicyConstants.PERSONAL_PROFILE_RESOURCE_TYPE, PolicyConstants.PERM_MAINTAIN, request); 98 } 99 else { 100 super.doCheckPermissions(mapping, session, request); 101 } 102 } 103 104 112 public Resource createResource(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) 113 throws Exception { 114 Calendar now = Calendar.getInstance(); 115 SessionInfo session = LogonControllerFactory.getInstance().getSessionInfo(request); 116 return new DefaultPropertyProfile(session.getRealmId(), 0, 117 session.getNavigationContext() == SessionInfo.USER_CONSOLE_CONTEXT ? session.getUser().getPrincipalName() : null, 118 "", "", now, now); 119 } 120 121 129 public ActionForward edit(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) 130 throws Exception { 131 PropertyProfileForm pf = (PropertyProfileForm) form; 132 ActionForward fwd = super.edit(mapping, form, request, response); 133 String scope = pf.getOwner() == null ? Constants.SCOPE_GLOBAL : Constants.SCOPE_PERSONAL; 134 pf.setPropertyScope(scope); 135 return fwd; 136 } 137 138 146 public ActionForward commit(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) 147 throws Exception { 148 ActionMessages messages = new ActionMessages(); 149 User user = LogonControllerFactory.getInstance().getUser(request); 150 PropertyProfileForm profileForm = (PropertyProfileForm) form; 151 PropertyProfile profile = (PropertyProfile)profileForm.getResource(); 152 if (profileForm.getPropertyScope().equals(Constants.SCOPE_GLOBAL)) { 153 PolicyUtil.checkPermissions(PolicyConstants.PROFILE_RESOURCE_TYPE, new Permission[] { 154 PolicyConstants.PERM_CREATE_EDIT_AND_ASSIGN, PolicyConstants.PERM_EDIT_AND_ASSIGN, 155 PolicyConstants.PERM_ASSIGN }, request); 156 } else { 157 PolicyUtil.checkPermission(PolicyConstants.PERSONAL_PROFILE_RESOURCE_TYPE, PolicyConstants.PERM_MAINTAIN, request); 158 } 159 profileForm.apply(); 160 if (profileForm.getEditing()) { 161 PolicyDatabaseFactory.getInstance().attachResourceToPolicyList(profile, profileForm.getSelectedPoliciesList(), getSessionInfo(request)); 162 profile.getResourceType().updateResource(profile, getSessionInfo(request)); 163 } else { 164 int baseOn = profileForm.getSelectedPropertyProfile(); 165 User owner = profileForm.getOwner(); 166 int realmId = "global".equals(profileForm.getPropertyScope()) ? 0 : user.getRealm().getResourceId(); 167 168 try { 169 PropertyProfile newProfile = ProfilesFactory.getInstance().createPropertyProfile(owner == null ? null : owner.getPrincipalName(), 170 profile.getResourceName(), profile.getResourceDescription(), baseOn, realmId); 171 172 PolicyDatabaseFactory.getInstance().attachResourceToPolicyList(newProfile, profileForm.getSelectedPoliciesList(), getSessionInfo(request)); 173 CoreServlet.getServlet().fireCoreEvent( 174 new ResourceChangeEvent(this, CoreEventConstants.CREATE_PROPERTY_PROFILE, newProfile, getSessionInfo(request), ResourceChangeEvent.STATE_SUCCESSFUL)); 175 } catch (Exception e) { 176 CoreServlet.getServlet().fireCoreEvent( 177 new ResourceChangeEvent(this, CoreEventConstants.CREATE_PROPERTY_PROFILE, getSessionInfo(request), e)); 178 throw e; 179 } 180 } 181 messages.add(Globals.MESSAGES_KEY, new ActionMessage("message.profileSaved")); 182 saveMessages(request, messages); 183 ResourceUtil.setAvailableProfiles(getSessionInfo(request)); 184 return cleanUpAndReturnToReferer(mapping, form, request, response); 185 } 186 187 195 public ActionForward display(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) 196 throws Exception { 197 ((PropertyProfileForm) form).setReferer(CoreUtil.getReferer(request)); 198 CoreUtil.addRequiredFieldMessage(this, request); 199 return mapping.findForward("display"); 200 } 201 202 210 public int getNavigationContext(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { 211 return SessionInfo.MANAGEMENT_CONSOLE_CONTEXT | SessionInfo.USER_CONSOLE_CONTEXT; 212 } 213 214 protected void checkValid(Resource r, Permission[] permissions, ActionMapping mapping, AbstractResourceForm form, HttpServletRequest request) throws NoPermissionException { 215 if(r instanceof OwnedResource && ((OwnedResource)r).getOwnerUsername() != null) { 216 super.checkValid(r, new Permission[] { PolicyConstants.PERM_MAINTAIN }, mapping, form, request); 217 } 218 else { 219 super.checkValid(r, permissions, mapping, form, request); 220 } 221 } 222 223 } | Popular Tags |