KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > sslexplorer > install > actions > UploadExistingCertificateAction


1 /*
2  * SSL-Explorer
3  *
4  * Copyright (C) 2003-2006 3SP LTD. All Rights Reserved
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2 of
9  * the License, or (at your option) any later version.
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public
16  * License along with this program; if not, write to the Free Software
17  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18  */

19             
20 package com.sslexplorer.install.actions;
21
22 import java.io.File JavaDoc;
23 import java.io.FileInputStream JavaDoc;
24 import java.io.FileOutputStream JavaDoc;
25 import java.io.InputStream JavaDoc;
26 import java.io.OutputStream JavaDoc;
27 import java.security.KeyStore JavaDoc;
28
29 import javax.servlet.http.HttpServletRequest JavaDoc;
30 import javax.servlet.http.HttpServletResponse JavaDoc;
31
32 import org.apache.commons.logging.Log;
33 import org.apache.commons.logging.LogFactory;
34 import org.apache.struts.action.ActionForm;
35 import org.apache.struts.action.ActionForward;
36 import org.apache.struts.action.ActionMapping;
37 import org.apache.struts.upload.FormFile;
38
39 import com.sslexplorer.boot.Util;
40 import com.sslexplorer.core.actions.AuthenticatedAction;
41 import com.sslexplorer.install.forms.ImportExistingCertificateForm;
42 import com.sslexplorer.security.Constants;
43 import com.sslexplorer.security.SessionInfo;
44 import com.sslexplorer.vfs.forms.UploadForm;
45 import com.sslexplorer.wizard.AbstractWizardSequence;
46
47 /**
48  * Implementatation of a {@link AuthenticatedAction} that allows a certificate
49  * to be uploaded during the install wizard.
50  *
51  * @author Brett Smith <a HREF="mailto: brett@3sp.com">&lt;brett@3sp.com&gt;</a>
52  * @see com.sslexplorer.install.forms.ConfigureUserDatabaseForm
53  */

54 public class UploadExistingCertificateAction extends AuthenticatedAction {
55
56     private static final Log log = LogFactory.getLog(UploadExistingCertificateAction.class);
57
58     /* (non-Javadoc)
59      * @see com.sslexplorer.core.actions.AuthenticatedAction#onExecute(org.apache.struts.action.ActionMapping, org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
60      */

61     public ActionForward onExecute(ActionMapping mapping, ActionForm form, HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response)
62                     throws Exception JavaDoc {
63         String JavaDoc alias = request.getParameter("alias");
64         UploadForm uploadForm = (UploadForm) form;
65         FormFile uploadFile = uploadForm.getUploadFile();
66         String JavaDoc fileName = uploadFile.getFileName();
67
68         if (fileName.trim().length() == 0) {
69             saveError(request, "installation.uploadExistingCertificate.noFileProvided");
70             return mapping.getInputForward();
71         }
72
73         if (uploadFile.getFileSize() == 0) {
74             saveError(request, "installation.uploadExistingCertificate.invalidFile");
75             return mapping.getInputForward();
76         }
77
78         if (log.isInfoEnabled())
79             log.info("Uploading certificate with alias " + alias);
80         File JavaDoc keystoreFile = File.createTempFile("uploadedFile", "");
81         doUpload(request, uploadFile, keystoreFile);
82
83         String JavaDoc keyStoreType = request.getParameter("keyStoreType");
84         String JavaDoc password = request.getParameter("password");
85         if (!validateKeyStore(keyStoreType, password, keystoreFile)) {
86             saveError(request, "installation.uploadExistingCertificate.importFailure");
87             return mapping.getInputForward();
88         }
89
90         AbstractWizardSequence seq = (AbstractWizardSequence) request.getSession().getAttribute(Constants.WIZARD_SEQUENCE);
91         seq.putAttribute(ImportExistingCertificateForm.ATTR_PASSPHRASE, password);
92         seq.putAttribute(ImportExistingCertificateForm.ATTR_UPLOADED_FILE, keystoreFile);
93         seq.putAttribute(ImportExistingCertificateForm.ATTR_KEY_STORE_TYPE, keyStoreType);
94         seq.putAttribute(ImportExistingCertificateForm.ATTR_ALIAS, alias.trim());
95         saveMessage(request, "installation.uploadExisting.uploaded", fileName, uploadFile.getFileSize());
96         return mapping.findForward("success");
97     }
98
99     private boolean doUpload(HttpServletRequest JavaDoc request, FormFile uploadFile, File JavaDoc keystoreFile) {
100         InputStream JavaDoc inputStream = null;
101         OutputStream JavaDoc outputStream = null;
102
103         try {
104             inputStream = uploadFile.getInputStream();
105             outputStream = new FileOutputStream JavaDoc(keystoreFile);
106             Util.copy(inputStream, outputStream);
107             return true;
108         } catch (Exception JavaDoc e) {
109             String JavaDoc errorMessage = e.getMessage() == null ? "No message provided." : e.getMessage();
110             saveError(request, "installation.uploadExistingCertificate.failedToUploadFile", uploadFile.getFileName(), errorMessage);
111             return false;
112         } finally {
113             Util.closeStream(inputStream);
114             Util.closeStream(outputStream);
115         }
116     }
117
118     private boolean validateKeyStore(String JavaDoc keyStoreType, String JavaDoc password, File JavaDoc keystoreFile) {
119         InputStream JavaDoc inputStream = null;
120         try {
121             KeyStore JavaDoc keyStore = KeyStore.getInstance(keyStoreType);
122             inputStream = new FileInputStream JavaDoc(keystoreFile);
123             keyStore.load(inputStream, password.toCharArray());
124             return true;
125         } catch (Exception JavaDoc e) {
126             log.error("Validation of key store failed", e);
127             return false;
128         } finally {
129             Util.closeStream(inputStream);
130         }
131     }
132
133     public int getNavigationContext(ActionMapping mapping, ActionForm form, HttpServletRequest JavaDoc request, HttpServletResponse JavaDoc response) {
134         return SessionInfo.MANAGEMENT_CONSOLE_CONTEXT | SessionInfo.SETUP_CONSOLE_CONTEXT;
135     }
136 }
Popular Tags