package org.agnitas.emm.extension.pluginmanager.web; import java.io.File; import java.io.InputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.agnitas.emm.extension.ExtensionSystem; import org.agnitas.emm.extension.exceptions.MissingPluginManifestException; import org.agnitas.emm.extension.pluginmanager.form.PluginInstallerSelectForm; import org.agnitas.emm.extension.util.ExtensionUtils; import org.agnitas.util.AgnUtils; import org.agnitas.util.FileUtils; import org.apache.log4j.Logger; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.ActionMessage; import org.apache.struts.action.ActionMessages; import org.apache.struts.actions.DispatchAction; public class PluginInstallerUploadAction extends DispatchAction { private static final transient Logger logger = Logger.getLogger( PluginInstallerUploadAction.class); public ActionForward upload( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { if( logger.isInfoEnabled()) { logger.info( "Handling uploaded plugin file"); } if(!AgnUtils.isUserLoggedIn(request)) { if( logger.isInfoEnabled()) logger.info( "Not authentication information. Forwarding to login"); return mapping.findForward("logon"); } PluginInstallerSelectForm pluginSelectForm = (PluginInstallerSelectForm) form; ExtensionSystem extensionSystem = ExtensionUtils.getExtensionSystem( request); try { InputStream inputStream = pluginSelectForm.getPluginFile().getInputStream(); try { File temporaryFile = FileUtils.streamToTemporaryFile( inputStream, pluginSelectForm.getPluginFile().getFileSize(), "emm-jpf-plugin-"); try { if( logger.isInfoEnabled()) { logger.info( "Installing plugin from file: " + temporaryFile.getAbsolutePath()); } extensionSystem.installPlugin( temporaryFile.getAbsolutePath()); ActionMessages messages = new ActionMessages(); messages.add( ActionMessages.GLOBAL_MESSAGE, new ActionMessage( "pluginmanager.installer.installed")); saveMessages( request, messages); } finally { temporaryFile.delete(); } } finally { inputStream.close(); } } catch( MissingPluginManifestException e) { ActionMessages errors = new ActionMessages(); errors.add( ActionMessages.GLOBAL_MESSAGE, new ActionMessage( "error.pluginmanager.installer.manifest")); saveErrors( request, errors); logger.warn( "Cannot install plugin - missing manifest?", e); } catch( Exception e) { ActionMessages errors = new ActionMessages(); errors.add( ActionMessages.GLOBAL_MESSAGE, new ActionMessage( "error.pluginmanager.installer.general")); saveErrors( request, errors); logger.warn( "Cannot install plugin", e); } finally { logger.info( "Releasing temporary file"); // Release resources used by the temporary file pluginSelectForm.getPluginFile().destroy(); } return mapping.findForward("list"); } }