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}