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 import org.apache.geronimo.management.geronimo.CertificationAuthority;
038
039 /**
040 * Handler for CSR details screen.
041 *
042 * @version $Rev: 514091 $ $Date: 2007-03-03 01:26:39 -0500 (Sat, 03 Mar 2007) $
043 */
044 public class CertReqDetailsHandler extends BaseCAHandler {
045 private final static Log log = LogFactory.getLog(CertReqDetailsHandler.class);
046 public CertReqDetailsHandler() {
047 super(CERT_REQ_DETAILS_MODE, "/WEB-INF/view/ca/certReqDetails.jsp");
048 }
049
050 public String actionBeforeView(ActionRequest request, ActionResponse response, MultiPageModel model) throws PortletException, IOException {
051 String[] params = {ERROR_MSG, INFO_MSG, "algorithm", "sNo", "validFrom", "validTo", "pkcs10certreq", "subject", "publickey", "requestId"};
052 for(int i = 0; i < params.length; ++i) {
053 String value = request.getParameter(params[i]);
054 if(value != null) response.setRenderParameter(params[i], value);
055 }
056 String sNo = request.getParameter("sNo");
057 if(sNo == null) {
058 // Freshly loading the certificate request details screen
059 CertificationAuthority ca = getCertificationAuthority(request);
060 try {
061 sNo = ca.getNextSerialNumber().toString();
062 response.setRenderParameter("sNo", sNo);
063 } catch (Exception e) {
064 log.error("Unable to get next serial number from CA.", e);
065 response.setRenderParameter(ERROR_MSG, e.toString());
066 }
067 }
068 return getMode();
069 }
070
071 public void renderView(RenderRequest request, RenderResponse response, MultiPageModel model) throws PortletException, IOException {
072 String[] params = {ERROR_MSG, INFO_MSG, "subject", "publickey", "sNo", "validFrom", "validTo", "algorithm", "pkcs10certreq", "requestId"};
073 for(int i = 0; i < params.length; ++i) {
074 Object value = request.getParameter(params[i]);
075 if(value != null) request.setAttribute(params[i], value);
076 }
077 }
078
079 public String actionAfterView(ActionRequest request, ActionResponse response, MultiPageModel model) throws PortletException, IOException {
080 String errorMsg = null;
081
082 try {
083 // Validate the Serial Number
084 String sNo = request.getParameter("sNo");
085 new BigInteger(sNo.trim());
086
087 // Validate the from and to dates
088 String validFrom = request.getParameter("validFrom");
089 String validTo = request.getParameter("validTo");
090 DateFormat df = new SimpleDateFormat("MM/dd/yyyy");
091 // Check if the from date format is MM/DD/YYYY
092 Date validFromDate = df.parse(validFrom);
093 Calendar calendar = new GregorianCalendar();
094 calendar.setTime(validFromDate);
095 String mmddyyyy = (calendar.get(Calendar.MONTH) < 9 ? "0":"") + (calendar.get(Calendar.MONTH)+1);
096 mmddyyyy += "/"+(calendar.get(Calendar.DAY_OF_MONTH) < 10 ? "0":"") + (calendar.get(Calendar.DAY_OF_MONTH));
097 mmddyyyy += "/"+calendar.get(Calendar.YEAR);
098 if(!mmddyyyy.equals(validFrom)) {
099 throw new Exception("validFrom must be a date in MM/DD/YYYY format.");
100 }
101 // Check if the to date format is MM/DD/YYYY
102 Date validToDate = df.parse(validTo);
103 calendar.setTime(validToDate);
104 mmddyyyy = (calendar.get(Calendar.MONTH) < 9 ? "0":"") + (calendar.get(Calendar.MONTH)+1);
105 mmddyyyy += "/"+(calendar.get(Calendar.DAY_OF_MONTH) < 10 ? "0":"") + (calendar.get(Calendar.DAY_OF_MONTH));
106 mmddyyyy += "/"+calendar.get(Calendar.YEAR);
107 if(!mmddyyyy.equals(validTo)) {
108 throw new Exception("validTo must be a date in MM/DD/YYYY format.");
109 }
110 // Check if the from date is before the to date
111 if(validFromDate.after(validToDate)) {
112 throw new Exception("Validity: From date '"+validFrom+"' is before the To date '"+validTo+"'.");
113 }
114
115 // Go to client certificate confirmation page
116 return CONFIRM_CLIENT_CERT_MODE+BEFORE_ACTION;
117 } catch(Exception e) {
118 errorMsg = e.toString();
119 log.error("Errors in user input while processing a CSR.", e);
120 }
121
122 if(errorMsg != null) response.setRenderParameter(ERROR_MSG, errorMsg);
123 return getMode()+BEFORE_ACTION;
124 }
125 }