001// -------------------------------------------------------------------------------- 002// Copyright 2002-2024 Echo Three, LLC 003// 004// Licensed under the Apache License, Version 2.0 (the "License"); 005// you may not use this file except in compliance with the License. 006// You may obtain a copy of the License at 007// 008// http://www.apache.org/licenses/LICENSE-2.0 009// 010// Unless required by applicable law or agreed to in writing, software 011// distributed under the License is distributed on an "AS IS" BASIS, 012// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013// See the License for the specific language governing permissions and 014// limitations under the License. 015// -------------------------------------------------------------------------------- 016 017package com.echothree.view.client.web.struts; 018 019import com.echothree.control.user.security.common.SecurityUtil; 020import com.echothree.control.user.security.common.form.CheckSecurityRolesForm; 021import com.echothree.control.user.security.common.result.CheckSecurityRolesResult; 022import com.echothree.model.data.user.common.pk.UserVisitPK; 023import com.echothree.util.common.command.CommandResult; 024import com.echothree.util.common.command.ExecutionResult; 025import com.echothree.view.client.web.WebConstants; 026import com.echothree.view.client.web.taglib.TagConstants; 027import com.google.common.base.Splitter; 028import java.util.HashSet; 029import java.util.Map; 030import javax.naming.NamingException; 031import javax.servlet.http.HttpServletRequest; 032import javax.servlet.http.HttpSession; 033import org.apache.struts.action.Action; 034import org.apache.struts.taglib.html.Constants; 035import org.displaytag.tags.TableTagParameters; 036import org.displaytag.util.ParamEncoder; 037 038public abstract class BaseAction 039 extends Action { 040 041 public static UserVisitPK getUserVisitPK(HttpServletRequest request) { 042 HttpSession httpSession = request.getSession(true); 043 044 return (UserVisitPK)httpSession.getAttribute(WebConstants.Session_USER_VISIT); 045 } 046 047 protected CommandResult setCommandResultAttribute(HttpServletRequest request, CommandResult commandResult) { 048 request.setAttribute(TagConstants.CommandResultName, commandResult); 049 050 return commandResult; 051 } 052 053 public static boolean wasOptions(HttpServletRequest request) { 054 return request.getMethod().equals(WebConstants.Method_OPTIONS); 055 } 056 057 public static boolean wasGet(HttpServletRequest request) { 058 return request.getMethod().equals(WebConstants.Method_GET); 059 } 060 061 public static boolean wasPost(HttpServletRequest request) { 062 return request.getMethod().equals(WebConstants.Method_POST); 063 } 064 065 public static boolean wasCanceled(HttpServletRequest request) { 066 String submitButtonValue = request.getParameter(WebConstants.Parameter_SUBMIT_BUTTON); 067 boolean wasCanceled = false; 068 069 if(submitButtonValue != null) { 070 if(submitButtonValue.equals(Constants.CANCEL_PROPERTY)) { 071 wasCanceled = true; 072 } 073 } 074 075 return wasCanceled; 076 } 077 078 public void setupDtAttributes(HttpServletRequest request, String dtIdAttribute) { 079 ParamEncoder paramEncoder = new ParamEncoder(dtIdAttribute); 080 081 request.setAttribute(WebConstants.Attribute_DT_ID_ATTRIBUTE, dtIdAttribute); 082 request.setAttribute(WebConstants.Attribute_DT_SORT_PARAMETER, request.getParameter(paramEncoder.encodeParameterName(TableTagParameters.PARAMETER_SORT))); 083 request.setAttribute(WebConstants.Attribute_DT_PAGE_PARAMETER, request.getParameter(paramEncoder.encodeParameterName(TableTagParameters.PARAMETER_PAGE))); 084 request.setAttribute(WebConstants.Attribute_DT_ORDER_PARAMETER, request.getParameter(paramEncoder.encodeParameterName(TableTagParameters.PARAMETER_ORDER))); 085 } 086 087 public void setupDtParameters(Map<String, String> parameters, BaseActionForm actionForm) { 088 ParamEncoder paramEncoder = new ParamEncoder(actionForm.getDtIdAttribute()); 089 String dtSortParameter = actionForm.getDtSortParameter(); 090 String dtPageParameter = actionForm.getDtPageParameter(); 091 String dtOrderParameter = actionForm.getDtOrderParameter(); 092 093 if(dtSortParameter != null && dtSortParameter.length() > 0) { 094 parameters.put(paramEncoder.encodeParameterName(TableTagParameters.PARAMETER_SORT), dtSortParameter); 095 } 096 097 if(dtPageParameter != null && dtPageParameter.length() > 0) { 098 parameters.put(paramEncoder.encodeParameterName(TableTagParameters.PARAMETER_PAGE), dtPageParameter); 099 } 100 101 if(dtOrderParameter != null && dtOrderParameter.length() > 0) { 102 parameters.put(paramEncoder.encodeParameterName(TableTagParameters.PARAMETER_ORDER), dtOrderParameter); 103 } 104 } 105 106 public void checkSecurityRoles(HttpServletRequest request, String securityRoles) 107 throws NamingException { 108 String newSecurityRoles = null; 109 HashSet<String> pageSecurityRoles = (HashSet<String>)request.getAttribute(WebConstants.Attribute_SECURITY_ROLES); 110 CheckSecurityRolesForm commandForm = SecurityUtil.getHome().getCheckSecurityRolesForm(); 111 112 commandForm.setSecurityRoles(securityRoles); 113 114 CommandResult commandResult = SecurityUtil.getHome().checkSecurityRoles(getUserVisitPK(request), commandForm); 115 116 if(!commandResult.hasErrors()) { 117 ExecutionResult executionResult = commandResult.getExecutionResult(); 118 CheckSecurityRolesResult checkSecurityRolesResult = (CheckSecurityRolesResult)executionResult.getResult(); 119 newSecurityRoles = checkSecurityRolesResult.getSecurityRoles(); 120 } 121 122 if(newSecurityRoles != null) { 123 String []newSecurityRolesArray = Splitter.on(':').trimResults().omitEmptyStrings().splitToList(newSecurityRoles).toArray(new String[0]); 124 int newSecurityRolesArrayLength = newSecurityRolesArray.length; 125 126 if(pageSecurityRoles == null) { 127 pageSecurityRoles = new HashSet<>(newSecurityRolesArrayLength); 128 } 129 130 for(int i = 0; i < newSecurityRolesArrayLength; i++) { 131 pageSecurityRoles.add(newSecurityRolesArray[i]); 132 } 133 } 134 135 request.setAttribute(WebConstants.Attribute_SECURITY_ROLES, pageSecurityRoles); 136 } 137 138 public boolean hasSecurityRole(HttpServletRequest request, String securityRoles) { 139 HashSet<String> pageSecurityRoles = (HashSet<String>)request.getAttribute(WebConstants.Attribute_SECURITY_ROLES); 140 boolean securityRoleFound = false; 141 142 if(pageSecurityRoles != null && securityRoles != null) { 143 String []securityRolesToCheck = Splitter.on(':').trimResults().omitEmptyStrings().splitToList(securityRoles).toArray(new String[0]); 144 int securityRolesToCheckLength = securityRolesToCheck.length; 145 146 for(int i = 0; i < securityRolesToCheckLength; i++) { 147 if(pageSecurityRoles.contains(securityRolesToCheck[i])) { 148 securityRoleFound = true; 149 break; 150 } 151 } 152 } 153 154 return securityRoleFound; 155 } 156 157}