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}