001// -------------------------------------------------------------------------------- 002// Copyright 2002-2026 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.model.data.user.common.pk.UserVisitPK; 021import com.echothree.util.common.command.CommandResult; 022import com.echothree.view.client.web.WebConstants; 023import com.echothree.view.client.web.taglib.TagConstants; 024import com.google.common.base.Splitter; 025import java.util.HashSet; 026import java.util.Map; 027import javax.naming.NamingException; 028import javax.servlet.http.HttpServletRequest; 029import org.apache.struts.action.Action; 030import org.apache.struts.taglib.html.Constants; 031import org.displaytag.tags.TableTagParameters; 032import org.displaytag.util.ParamEncoder; 033 034public abstract class BaseAction 035 extends Action { 036 037 public static UserVisitPK getUserVisitPK(HttpServletRequest request) { 038 var httpSession = request.getSession(true); 039 040 return (UserVisitPK)httpSession.getAttribute(WebConstants.Session_USER_VISIT); 041 } 042 043 protected CommandResult setCommandResultAttribute(HttpServletRequest request, CommandResult commandResult) { 044 request.setAttribute(TagConstants.CommandResultName, commandResult); 045 046 return commandResult; 047 } 048 049 public static boolean wasOptions(HttpServletRequest request) { 050 return request.getMethod().equals(WebConstants.Method_OPTIONS); 051 } 052 053 public static boolean wasGet(HttpServletRequest request) { 054 return request.getMethod().equals(WebConstants.Method_GET); 055 } 056 057 public static boolean wasPost(HttpServletRequest request) { 058 return request.getMethod().equals(WebConstants.Method_POST); 059 } 060 061 public static boolean wasCanceled(HttpServletRequest request) { 062 var submitButtonValue = request.getParameter(WebConstants.Parameter_SUBMIT_BUTTON); 063 var wasCanceled = false; 064 065 if(submitButtonValue != null) { 066 if(submitButtonValue.equals(Constants.CANCEL_PROPERTY)) { 067 wasCanceled = true; 068 } 069 } 070 071 return wasCanceled; 072 } 073 074 public void setupDtAttributes(HttpServletRequest request, String dtIdAttribute) { 075 var paramEncoder = new ParamEncoder(dtIdAttribute); 076 077 request.setAttribute(WebConstants.Attribute_DT_ID_ATTRIBUTE, dtIdAttribute); 078 request.setAttribute(WebConstants.Attribute_DT_SORT_PARAMETER, request.getParameter(paramEncoder.encodeParameterName(TableTagParameters.PARAMETER_SORT))); 079 request.setAttribute(WebConstants.Attribute_DT_PAGE_PARAMETER, request.getParameter(paramEncoder.encodeParameterName(TableTagParameters.PARAMETER_PAGE))); 080 request.setAttribute(WebConstants.Attribute_DT_ORDER_PARAMETER, request.getParameter(paramEncoder.encodeParameterName(TableTagParameters.PARAMETER_ORDER))); 081 } 082 083 public void setupDtParameters(Map<String, String> parameters, BaseActionForm actionForm) { 084 var paramEncoder = new ParamEncoder(actionForm.getDtIdAttribute()); 085 var dtSortParameter = actionForm.getDtSortParameter(); 086 var dtPageParameter = actionForm.getDtPageParameter(); 087 var dtOrderParameter = actionForm.getDtOrderParameter(); 088 089 if(dtSortParameter != null && dtSortParameter.length() > 0) { 090 parameters.put(paramEncoder.encodeParameterName(TableTagParameters.PARAMETER_SORT), dtSortParameter); 091 } 092 093 if(dtPageParameter != null && dtPageParameter.length() > 0) { 094 parameters.put(paramEncoder.encodeParameterName(TableTagParameters.PARAMETER_PAGE), dtPageParameter); 095 } 096 097 if(dtOrderParameter != null && dtOrderParameter.length() > 0) { 098 parameters.put(paramEncoder.encodeParameterName(TableTagParameters.PARAMETER_ORDER), dtOrderParameter); 099 } 100 } 101 102 public void checkSecurityRoles(HttpServletRequest request, String securityRoles) 103 throws NamingException { 104 String newSecurityRoles = null; 105 var pageSecurityRoles = (HashSet<String>)request.getAttribute(WebConstants.Attribute_SECURITY_ROLES); 106 var commandForm = SecurityUtil.getHome().getCheckSecurityRolesForm(); 107 108 commandForm.setSecurityRoles(securityRoles); 109 110 var commandResult = SecurityUtil.getHome().checkSecurityRoles(getUserVisitPK(request), commandForm); 111 112 if(!commandResult.hasErrors()) { 113 var executionResult = commandResult.getExecutionResult(); 114 var checkSecurityRolesResult = executionResult.getResult(); 115 newSecurityRoles = checkSecurityRolesResult.getSecurityRoles(); 116 } 117 118 if(newSecurityRoles != null) { 119 var newSecurityRolesArray = Splitter.on(':').trimResults().omitEmptyStrings().splitToList(newSecurityRoles).toArray(new String[0]); 120 var newSecurityRolesArrayLength = newSecurityRolesArray.length; 121 122 if(pageSecurityRoles == null) { 123 pageSecurityRoles = new HashSet<>(newSecurityRolesArrayLength); 124 } 125 126 for(var i = 0; i < newSecurityRolesArrayLength; i++) { 127 pageSecurityRoles.add(newSecurityRolesArray[i]); 128 } 129 } 130 131 request.setAttribute(WebConstants.Attribute_SECURITY_ROLES, pageSecurityRoles); 132 } 133 134 public boolean hasSecurityRole(HttpServletRequest request, String securityRoles) { 135 var pageSecurityRoles = (HashSet<String>)request.getAttribute(WebConstants.Attribute_SECURITY_ROLES); 136 var securityRoleFound = false; 137 138 if(pageSecurityRoles != null && securityRoles != null) { 139 var securityRolesToCheck = Splitter.on(':').trimResults().omitEmptyStrings().splitToList(securityRoles).toArray(new String[0]); 140 var securityRolesToCheckLength = securityRolesToCheck.length; 141 142 for(var i = 0; i < securityRolesToCheckLength; i++) { 143 if(pageSecurityRoles.contains(securityRolesToCheck[i])) { 144 securityRoleFound = true; 145 break; 146 } 147 } 148 } 149 150 return securityRoleFound; 151 } 152 153}