001 /** 002 * Copyright 2005-2014 The Kuali Foundation 003 * 004 * Licensed under the Educational Community License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.opensource.org/licenses/ecl2.php 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 package org.kuali.rice.ksb.security.admin; 017 018 import java.io.IOException; 019 020 import javax.servlet.ServletException; 021 import javax.servlet.http.HttpServlet; 022 import javax.servlet.http.HttpServletRequest; 023 import javax.servlet.http.HttpServletResponse; 024 025 /** 026 * A servlet which returns a client {@link java.security.KeyStore} object to the user as a file. It takes in 027 * the KeyStore file as a session attribute byte array. 028 * 029 * @author Kuali Rice Team (rice.collab@kuali.org) 030 */ 031 public class ExportServlet extends HttpServlet { 032 033 private static final long serialVersionUID = 3234778044685975458L; 034 035 private static final String MIME_TYPE = "application/octet-stream"; 036 // application/pkix-cert 037 // application/pkix-crl 038 public static final String CLIENT_KEYSTORE_DATA = "ClientKeyStoreData"; 039 040 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 041 byte[] clientKeyStoreData = (byte[])request.getSession().getAttribute(CLIENT_KEYSTORE_DATA); 042 request.getSession().removeAttribute(CLIENT_KEYSTORE_DATA); 043 if (clientKeyStoreData == null) { 044 throw new ServletException("No keystore file was specified."); 045 } 046 response.setContentType(MIME_TYPE); 047 response.setContentLength(clientKeyStoreData.length); 048 response.setHeader("Content-disposition", "attachment; filename="+extractFileName(request)); 049 response.getOutputStream().write(clientKeyStoreData); 050 response.getOutputStream().close(); 051 } 052 053 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 054 doPost(request, response); 055 } 056 057 private String extractFileName(HttpServletRequest request) { 058 String path = request.getPathInfo(); 059 int index = path.lastIndexOf('/'); 060 if (index >= 0) { 061 path = path.substring(index+1); 062 } 063 return path; 064 } 065 066 public static final String generateExportPath(String keystoreFileName, HttpServletRequest request) { 067 String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath(); 068 return basePath + "/exportsecurity/"+keystoreFileName; 069 } 070 071 }