001    /**
002     *
003     *  Licensed to the Apache Software Foundation (ASF) under one or more
004     *  contributor license agreements.  See the NOTICE file distributed with
005     *  this work for additional information regarding copyright ownership.
006     *  The ASF licenses this file to You under the Apache License, Version 2.0
007     *  (the "License"); you may not use this file except in compliance with
008     *  the License.  You may obtain a copy of the License at
009     *
010     *     http://www.apache.org/licenses/LICENSE-2.0
011     *
012     *  Unless required by applicable law or agreed to in writing, software
013     *  distributed under the License is distributed on an "AS IS" BASIS,
014     *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015     *  See the License for the specific language governing permissions and
016     *  limitations under the License.
017     */
018    package org.apache.geronimo.console.ca;
019    
020    import java.io.IOException;
021    import java.math.BigInteger;
022    import java.text.DateFormat;
023    import java.text.SimpleDateFormat;
024    import java.util.Calendar;
025    import java.util.Date;
026    import java.util.GregorianCalendar;
027    
028    import javax.portlet.ActionRequest;
029    import javax.portlet.ActionResponse;
030    import javax.portlet.PortletException;
031    import javax.portlet.RenderRequest;
032    import javax.portlet.RenderResponse;
033    
034    import org.apache.commons.logging.Log;
035    import org.apache.commons.logging.LogFactory;
036    import org.apache.geronimo.console.MultiPageModel;
037    
038    /**
039     * Handler for Setup CA screen to get CA details from user.
040     *
041     * @version $Rev: 706640 $ $Date: 2008-10-21 14:44:05 +0000 (Tue, 21 Oct 2008) $
042     */
043    public class SetupCAHandler extends BaseCAHandler {
044        private final static Log log = LogFactory.getLog(SetupCAHandler.class);
045        public SetupCAHandler() {
046            super(SETUPCA_MODE, "/WEB-INF/view/ca/setupCA.jsp");
047        }
048    
049        public String actionBeforeView(ActionRequest request, ActionResponse response, MultiPageModel model) throws PortletException, IOException {
050            String[] params = {ERROR_MSG, INFO_MSG, "caCN", "caOU", "caO", "caL", "caST", "caC", "alias", "keyAlgorithm", "keySize", "algorithm", "validFrom", "validTo", "sNo", "password"};
051            for(int i = 0; i < params.length; ++i) {
052                String value = request.getParameter(params[i]);
053                if(value != null) response.setRenderParameter(params[i], value);
054            }
055            return getMode();
056        }
057    
058        public void renderView(RenderRequest request, RenderResponse response, MultiPageModel model) throws PortletException, IOException {
059            String[] params = {ERROR_MSG, INFO_MSG, "caCN", "caOU", "caO", "caL", "caST", "caC", "alias", "keyAlgorithm", "keySize", "algorithm", "validFrom", "validTo", "sNo", "password"};
060            for(int i = 0; i < params.length; ++i) {
061                Object value = request.getParameter(params[i]);
062                if(value != null) request.setAttribute(params[i], value);
063            }
064        }
065    
066        public String actionAfterView(ActionRequest request, ActionResponse response, MultiPageModel model) throws PortletException, IOException {
067            String errorMsg = null;
068            try {
069                // Validate the Serial Number
070                String sNo = request.getParameter("sNo");
071                new BigInteger(sNo.trim());
072                
073                // Validate the from and to dates
074                String validFrom = request.getParameter("validFrom");
075                String validTo = request.getParameter("validTo");
076                // Check if the from date format is MM/DD/YYYY
077                DateFormat df = new SimpleDateFormat("MM/dd/yyyy");
078                Date validFromDate = df.parse(validFrom);
079                Calendar calendar = new GregorianCalendar();
080                calendar.setTime(validFromDate);
081                String mmddyyyy = (calendar.get(Calendar.MONTH) < 9 ? "0":"") + (calendar.get(Calendar.MONTH)+1);
082                mmddyyyy += "/"+(calendar.get(Calendar.DAY_OF_MONTH) < 10 ? "0":"") + (calendar.get(Calendar.DAY_OF_MONTH));
083                mmddyyyy += "/"+calendar.get(Calendar.YEAR);
084                if(!mmddyyyy.equals(validFrom)) {
085                    throw new Exception("validFrom must be a date in MM/DD/YYYY format.");
086                }
087                // Check if the to date format is MM/DD/YYYY
088                Date validToDate = df.parse(validTo);
089                calendar.setTime(validToDate);
090                mmddyyyy = (calendar.get(Calendar.MONTH) < 9 ? "0":"") + (calendar.get(Calendar.MONTH)+1);
091                mmddyyyy += "/"+(calendar.get(Calendar.DAY_OF_MONTH) < 10 ? "0":"") + (calendar.get(Calendar.DAY_OF_MONTH));
092                mmddyyyy += "/"+calendar.get(Calendar.YEAR);
093                 if(!mmddyyyy.equals(validTo)) {
094                    throw new Exception("validTo must be a date in MM/DD/YYYY format.");
095                }
096                // Check if the from date is before the to date
097                if(validFromDate.after(validToDate)) {
098                    throw new Exception("Validity: From date '"+validFrom+"' is before the To date '"+validTo+"'.");
099                }
100    
101                // Load page to confirm CA details
102                return CONFIRM_CA_MODE+BEFORE_ACTION;
103            } catch(Exception e) {
104                errorMsg = e.toString();
105                log.error("Error in user input during CA Setup.", e);
106            }
107            if(errorMsg != null) response.setRenderParameter(ERROR_MSG, errorMsg);
108            return getMode()+BEFORE_ACTION;
109        }
110    
111    }