| 1 19 20 package com.sslexplorer.install.actions; 21 22 import java.io.File ; 23 import java.io.FileInputStream ; 24 import java.io.FileOutputStream ; 25 import java.io.InputStream ; 26 import java.io.OutputStream ; 27 import java.security.KeyStore ; 28 29 import javax.servlet.http.HttpServletRequest ; 30 import javax.servlet.http.HttpServletResponse ; 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 54 public class UploadExistingCertificateAction extends AuthenticatedAction { 55 56 private static final Log log = LogFactory.getLog(UploadExistingCertificateAction.class); 57 58 61 public ActionForward onExecute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) 62 throws Exception { 63 String alias = request.getParameter("alias"); 64 UploadForm uploadForm = (UploadForm) form; 65 FormFile uploadFile = uploadForm.getUploadFile(); 66 String 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 keystoreFile = File.createTempFile("uploadedFile", ""); 81 doUpload(request, uploadFile, keystoreFile); 82 83 String keyStoreType = request.getParameter("keyStoreType"); 84 String 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 request, FormFile uploadFile, File keystoreFile) { 100 InputStream inputStream = null; 101 OutputStream outputStream = null; 102 103 try { 104 inputStream = uploadFile.getInputStream(); 105 outputStream = new FileOutputStream (keystoreFile); 106 Util.copy(inputStream, outputStream); 107 return true; 108 } catch (Exception e) { 109 String 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 keyStoreType, String password, File keystoreFile) { 119 InputStream inputStream = null; 120 try { 121 KeyStore keyStore = KeyStore.getInstance(keyStoreType); 122 inputStream = new FileInputStream (keystoreFile); 123 keyStore.load(inputStream, password.toCharArray()); 124 return true; 125 } catch (Exception 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 request, HttpServletResponse response) { 134 return SessionInfo.MANAGEMENT_CONSOLE_CONTEXT | SessionInfo.SETUP_CONSOLE_CONTEXT; 135 } 136 } | Popular Tags |