1111import java .util .List ;
1212import java .util .logging .Level ;
1313import java .util .logging .Logger ;
14- import javax .servlet .http .HttpServletRequest ;
15- import javax .servlet .http .HttpServletResponse ;
14+
15+ import com .testingbot .tunnel .proxy .WebsocketHandler ;
16+ import jakarta .servlet .http .HttpServletRequest ;
17+ import jakarta .servlet .http .HttpServletResponse ;
1618import org .apache .http .HttpResponse ;
1719import org .apache .http .NameValuePair ;
1820import org .apache .http .client .HttpClient ;
1921import org .apache .http .client .entity .UrlEncodedFormEntity ;
2022import org .apache .http .client .methods .HttpPost ;
2123import org .apache .http .impl .client .HttpClientBuilder ;
2224import org .apache .http .message .BasicNameValuePair ;
23- import org .eclipse .jetty .server . Connector ;
25+ import org .eclipse .jetty .proxy . ConnectHandler ;
2426import org .eclipse .jetty .server .HttpConfiguration ;
2527import org .eclipse .jetty .server .HttpConnectionFactory ;
2628import org .eclipse .jetty .server .Request ;
2729import org .eclipse .jetty .server .Server ;
2830import org .eclipse .jetty .server .ServerConnector ;
2931import org .eclipse .jetty .server .handler .AbstractHandler ;
32+ import org .eclipse .jetty .server .handler .HandlerList ;
3033import org .eclipse .jetty .servlet .ServletHolder ;
31-
32- import org .eclipse .jetty .server .handler .HandlerCollection ;
3334import org .eclipse .jetty .servlet .ServletContextHandler ;
35+
3436/**
3537 *
3638 * @author TestingBot
@@ -45,17 +47,27 @@ public HttpProxy(App app) {
4547 this .app = app ;
4648
4749 this .httpProxy = new Server ();
48- HttpConfiguration http_config = new HttpConfiguration ();
49- ServerConnector connector = new ServerConnector (httpProxy ,
50+
51+ HttpConfiguration http_config = new HttpConfiguration ();
52+
53+ ServerConnector proxyConnector = new ServerConnector (httpProxy ,
5054 new HttpConnectionFactory (http_config ));
51- connector .setPort (app .getJettyPort ());
52- connector .setIdleTimeout (400000 );
53- httpProxy .setConnectors (new Connector [] { connector });
55+
56+ proxyConnector .setPort (app .getJettyPort ());
57+ proxyConnector .setIdleTimeout (400000 );
58+ httpProxy .addConnector (proxyConnector );
5459 httpProxy .setStopAtShutdown (true );
5560
56- ServletHolder servletHolder = new ServletHolder (TunnelProxyServlet .class );
57- servletHolder .setInitParameter ("idleTimeout" , "120000" );
58- servletHolder .setInitParameter ("timeout" , "120000" );
61+ ConnectHandler connectHandler = new CustomConnectHandler (app );
62+ WebsocketHandler websocketHandler = new WebsocketHandler ();
63+
64+ ServletContextHandler contextHandler = new ServletContextHandler (ServletContextHandler .NO_SESSIONS );
65+ contextHandler .setContextPath ("/" ); // Root path for all requests
66+
67+ // AsyncProxyServlet for proxying HTTP requests
68+ ServletHolder proxyServlet = new ServletHolder (new TunnelProxyServlet ());
69+ proxyServlet .setInitParameter ("idleTimeout" , "120000" );
70+ proxyServlet .setInitParameter ("timeout" , "120000" );
5971
6072 if (app .getFastFail () != null && app .getFastFail ().length > 0 ) {
6173 StringBuilder sb = new StringBuilder ();
@@ -65,44 +77,35 @@ public HttpProxy(App app) {
6577 }
6678 sb .append (domain ).append ("," );
6779 }
68- servletHolder .setInitParameter ("blackList" , sb .toString ());
80+ proxyServlet .setInitParameter ("blackList" , sb .toString ());
6981 }
7082
7183 if (app .isDebugMode ()) {
72- servletHolder .setInitParameter ("tb_debug" , "true" );
84+ proxyServlet .setInitParameter ("tb_debug" , "true" );
7385 }
7486
7587 if (app .getProxy () != null ) {
76- servletHolder .setInitParameter ("proxy" , app .getProxy ());
88+ proxyServlet .setInitParameter ("proxy" , app .getProxy ());
7789 }
7890
7991 if (app .getProxyAuth () != null ) {
80- servletHolder .setInitParameter ("proxyAuth" , app .getProxyAuth ());
92+ proxyServlet .setInitParameter ("proxyAuth" , app .getProxyAuth ());
8193 }
8294
8395 if (app .getBasicAuth () != null ) {
84- servletHolder .setInitParameter ("basicAuth" , String .join ("," , app .getBasicAuth ()));
96+ proxyServlet .setInitParameter ("basicAuth" , String .join ("," , app .getBasicAuth ()));
8597 }
8698
87- servletHolder .setInitParameter ("jetty" , String .valueOf (app .getJettyPort ()));
99+ proxyServlet .setInitParameter ("jetty" , String .valueOf (app .getJettyPort ()));
88100
89- HandlerCollection handlers = new HandlerCollection ();
90- httpProxy .setHandler (handlers );
101+ contextHandler .addServlet (proxyServlet , "/*" ); // Proxy all HTTP requests
91102
92- ServletContextHandler context = new ServletContextHandler (handlers , "/" , ServletContextHandler .SESSIONS );
93- context .addServlet (servletHolder , "/*" );
94- context .setAttribute ("extra_headers" , app .getCustomHeaders ());
95- CustomConnectHandler proxy = new CustomConnectHandler (app );
96- proxy .setDebugMode (app .isDebugMode ());
97- if (app .getFastFail () != null && app .getFastFail ().length > 0 ) {
98- for (String domain : app .getFastFail ()) {
99- if (!domain .contains (":" )) {
100- domain = domain + ":443" ; // default port 443 (SSL)
101- }
102- proxy .getBlackListHosts ().add (domain );
103- }
104- }
105- handlers .addHandler (proxy );
103+ // Add the context handler to the server
104+ HandlerList handlers = new HandlerList ();
105+ handlers .addHandler (websocketHandler ); // For handling WS requests
106+ handlers .addHandler (connectHandler ); // For handling HTTPS requests (if needed)
107+ handlers .addHandler (contextHandler ); // For handling HTTP requests through proxy servlet
108+ httpProxy .setHandler (handlers );
106109
107110 start ();
108111
@@ -206,11 +209,9 @@ public boolean testProxy() {
206209 private class TestHandler extends AbstractHandler {
207210 @ Override
208211 public void handle (String target ,
209- Request baseRequest ,
210- HttpServletRequest request ,
211- HttpServletResponse response )
212- throws IOException
213- {
212+ Request baseRequest ,
213+ HttpServletRequest request ,
214+ HttpServletResponse response ) throws IOException {
214215 response .setContentType ("text/html;charset=utf-8" );
215216 response .setStatus (HttpServletResponse .SC_OK );
216217 baseRequest .setHandled (true );
0 commit comments