1 19 20 package com.sslexplorer.webforwards.actions; 21 22 import java.net.URL ; 23 24 import javax.servlet.http.HttpServletRequest ; 25 import javax.servlet.http.HttpServletResponse ; 26 27 import org.apache.struts.action.ActionForm; 28 import org.apache.struts.action.ActionForward; 29 import org.apache.struts.action.ActionMapping; 30 31 import com.maverick.multiplex.MultiplexedConnection; 32 import com.sslexplorer.agent.AgentTunnel; 33 import com.sslexplorer.agent.DefaultAgentManager; 34 import com.sslexplorer.boot.Util; 35 import com.sslexplorer.core.CoreEvent; 36 import com.sslexplorer.core.CoreServlet; 37 import com.sslexplorer.core.actions.AuthenticatedAction; 38 import com.sslexplorer.core.stringreplacement.VariableReplacement; 39 import com.sslexplorer.policyframework.LaunchSession; 40 import com.sslexplorer.policyframework.LaunchSessionFactory; 41 import com.sslexplorer.policyframework.ResourceAccessEvent; 42 import com.sslexplorer.properties.Property; 43 import com.sslexplorer.properties.impl.profile.ProfilePropertyKey; 44 import com.sslexplorer.security.SessionInfo; 45 import com.sslexplorer.webforwards.WebForward; 46 import com.sslexplorer.webforwards.WebForwardEventConstants; 47 import com.sslexplorer.webforwards.WebForwardTypeItem; 48 import com.sslexplorer.webforwards.WebForwardTypes; 49 50 58 public class LaunchTunneledSiteAction extends AuthenticatedAction { 59 60 64 public LaunchTunneledSiteAction() { 65 } 66 67 72 protected boolean isIgnoreSessionLock() { 73 return true; 74 } 75 76 public ActionForward onExecute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) 77 throws Exception { 78 80 String launchId = request.getParameter(LaunchSession.LAUNCH_ID); 81 if (Util.isNullOrTrimmedBlank(launchId)) { 82 throw new Exception ("No launch ID supplied."); 83 } 84 85 LaunchSession launchSession = LaunchSessionFactory.getInstance().getLaunchSession(launchId); 86 launchSession.checkAccessRights(null, getSessionInfo(request)); 87 WebForward wf = (WebForward)launchSession.getResource(); 88 89 CoreEvent evt = new ResourceAccessEvent(this, WebForwardEventConstants.WEB_FORWARD_STARTED, wf, launchSession.getPolicy(), launchSession.getSession(), 90 CoreEvent.STATE_SUCCESSFUL).addAttribute(WebForwardEventConstants.EVENT_ATTR_WEB_FORWARD_URL, 91 wf.getDestinationURL()).addAttribute(WebForwardEventConstants.EVENT_ATTR_WEB_FORWARD_TYPE, 92 ((WebForwardTypeItem) WebForwardTypes.WEB_FORWARD_TYPES.get(wf.getType())).getName()); 93 CoreServlet.getServlet().fireCoreEvent(evt); 94 95 VariableReplacement replacer = new VariableReplacement(); 96 replacer.setLaunchSession(launchSession); 97 URL url = new URL (replacer.replace(wf.getDestinationURL())); 98 MultiplexedConnection agent = DefaultAgentManager.getInstance().getAgentBySession(getSessionInfo(request)); 99 int port = DefaultAgentManager.getInstance().openURL((AgentTunnel)agent, url, launchSession); 100 if(port == -1) { 101 throw new Exception ("Agent couldn't open tunnel."); 102 } 103 104 Thread.sleep(1000); 107 108 return new ActionForward(url.getProtocol() + "://" + Property.getProperty(new ProfilePropertyKey("client.localhostAddress", launchSession.getSession())) + ":" + port + url.getFile(), true); 109 } 110 111 119 public int getNavigationContext(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { 120 return SessionInfo.MANAGEMENT_CONSOLE_CONTEXT | SessionInfo.USER_CONSOLE_CONTEXT; 121 } 122 } 123 | Popular Tags |