1 19 20 package com.sslexplorer.extensions.actions; 21 22 import java.io.IOException ; 23 import java.util.Enumeration ; 24 import java.util.Properties ; 25 26 import javax.servlet.http.HttpServletRequest ; 27 import javax.servlet.http.HttpServletResponse ; 28 29 import org.apache.commons.logging.Log; 30 import org.apache.commons.logging.LogFactory; 31 import org.apache.struts.action.ActionForm; 32 import org.apache.struts.action.ActionForward; 33 import org.apache.struts.action.ActionMapping; 34 import org.jdom.JDOMException; 35 36 import com.sslexplorer.core.CoreException; 37 import com.sslexplorer.core.actions.XMLOutputAction; 38 import com.sslexplorer.extensions.ExtensionDescriptor; 39 import com.sslexplorer.extensions.ExtensionException; 40 import com.sslexplorer.extensions.ExtensionParser; 41 import com.sslexplorer.extensions.store.ExtensionStore; 42 import com.sslexplorer.security.Constants; 43 import com.sslexplorer.security.LogonControllerFactory; 44 import com.sslexplorer.security.SessionInfo; 45 46 52 public class GetExtensionDescriptorAction extends XMLOutputAction { 53 54 final static Log log = LogFactory.getLog(GetExtensionDescriptorAction.class); 55 56 64 public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) 65 throws Exception { 66 67 request.setAttribute(Constants.REQ_ATTR_COMPRESS, Boolean.FALSE); 68 String ticket = request.getParameter("ticket"); 69 String id = request.getParameter("id"); 70 if(id == null) { 71 throw new Exception ("No id"); 72 } 73 ExtensionDescriptor app = ExtensionStore.getInstance().getExtensionDescriptor(id); 74 if(app == null) { 75 throw new Exception ("No extension with id of " + id); 76 } 77 Properties properties = new Properties (); 78 for (Enumeration e = request.getParameterNames(); e.hasMoreElements();) { 79 String name = (String ) e.nextElement(); 80 String val = request.getParameter(name); 81 if (name.equals("ticket") || name.equals("id") || name.equals("name")) { 82 continue; 83 } else { 84 properties.put(name, val); 85 } 86 } 87 processApplicationRequest(app, ticket, request, response, properties); 88 return null; 89 } 90 91 protected void processApplicationRequest(ExtensionDescriptor app, String ticket, HttpServletRequest request, 92 HttpServletResponse response, Properties properties) 93 throws JDOMException, Exception { 94 try { 95 SessionInfo session = LogonControllerFactory.getInstance().getSessionInfo(request); 96 if(session == null) { 97 throw new ExtensionException(ExtensionException.INTERNAL_ERROR, "No session."); 98 } 99 sendApplicationDescriptor(app, request, response, session, properties); 100 101 } catch (CoreException coreException) { 102 String message = coreException.getLocalizedMessage(request.getSession()); 103 log.error(message, coreException); 104 sendError(message, response); 105 } catch (Throwable t) { 106 log.error("Failed to process request for application.", t); 107 sendError(t.getLocalizedMessage() == null ? "<null>" : t.getLocalizedMessage(), response); 108 } 109 } 110 111 private void sendApplicationDescriptor(ExtensionDescriptor app, HttpServletRequest request, HttpServletResponse response, 112 SessionInfo session, Properties properties) 113 throws JDOMException, IOException , UndefinedParameterException, CoreException { 114 response.setHeader("Content-type", "text/xml"); 115 byte[] xml = ExtensionParser.processAgentParameters(app, request, session, properties).getBytes(); 116 response.getOutputStream().write(xml); 118 response.getOutputStream().close(); 119 } 120 121 } 122 | Popular Tags |