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.security.PublicKey;
023 import java.security.cert.Certificate;
024 import java.security.interfaces.RSAPublicKey;
025 import java.util.HashMap;
026 import java.util.Map;
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 import org.apache.geronimo.crypto.CertificateUtil;
039
040 /**
041 * Handler for view certificate screen.
042 *
043 * @version $Rev: 706640 $ $Date: 2008-10-21 14:44:05 +0000 (Tue, 21 Oct 2008) $
044 */
045 public class ViewCertificateHandler extends BaseCAHandler {
046 private final static Log log = LogFactory.getLog(ViewCertificateHandler.class);
047 public ViewCertificateHandler() {
048 super(VIEW_CERT_MODE, "/WEB-INF/view/ca/viewCertificate.jsp");
049 }
050
051 public String actionBeforeView(ActionRequest request, ActionResponse response, MultiPageModel model) throws PortletException, IOException {
052 String[] params = {ERROR_MSG, INFO_MSG, "sNo"};
053 for(int i = 0; i < params.length; ++i) {
054 String value = request.getParameter(params[i]);
055 if(value != null) response.setRenderParameter(params[i], value);
056 }
057 return getMode();
058 }
059
060 public void renderView(RenderRequest request, RenderResponse response, MultiPageModel model) throws PortletException, IOException {
061 String[] params = {ERROR_MSG, INFO_MSG};
062 for(int i = 0; i < params.length; ++i) {
063 String value = request.getParameter(params[i]);
064 if(value != null) request.setAttribute(params[i], value);
065 }
066 String errorMsg = request.getParameter(ERROR_MSG);
067 String sNo = request.getParameter("sNo");
068 try {
069 if(!request.getParameterMap().containsKey("sNo")) {
070 // Show the page to get serial number of the certificate to be viewed
071 request.setAttribute("sNo", null);
072 return;
073 }
074 CertificationAuthority ca = getCertificationAuthority(request);
075
076 String certText = ca.getCertificateBase64Text(new BigInteger(sNo.trim()));
077 Certificate cert = ca.getCertificate(new BigInteger(sNo.trim()));
078 PublicKey publickey = cert.getPublicKey();
079 String keySize = null;
080 if(publickey instanceof RSAPublicKey) {
081 keySize = ""+((RSAPublicKey)publickey).getModulus().bitLength();
082 }
083 request.setAttribute("sNo", sNo);
084 request.setAttribute("cert", cert);
085 request.setAttribute("certText", certText);
086 request.setAttribute("keySize", keySize);
087 // Generate Certificate Fingerprints
088 Map fingerPrints = new HashMap();
089 fingerPrints.put("MD5", CertificateUtil.generateFingerprint(cert, "MD5"));
090 fingerPrints.put("SHA1", CertificateUtil.generateFingerprint(cert, "SHA1"));
091 request.setAttribute("fingerPrints", fingerPrints);
092 // Check if the certificate issue process started from "requests to be fulfilled" page.
093 // If so, provide a link to go back to that page
094 if("true".equalsIgnoreCase(request.getParameter("linkToListRequests")))
095 request.setAttribute("linkToListRequests", Boolean.TRUE);
096 } catch (Exception e) {
097 errorMsg = e.toString();
098 log.error("Errors trying to view certificate with serial number '"+sNo+"'", e);
099 }
100 request.setAttribute(ERROR_MSG, errorMsg);
101 }
102
103 public String actionAfterView(ActionRequest request, ActionResponse response, MultiPageModel model) throws PortletException, IOException {
104 return getMode()+BEFORE_ACTION;
105 }
106 }