1616package dev .sigstore .cli ;
1717
1818import com .google .gson .Gson ;
19- import jakarta .servlet .ServletException ;
20- import jakarta .servlet .http .HttpServletRequest ;
21- import jakarta .servlet .http .HttpServletResponse ;
2219import java .io .ByteArrayOutputStream ;
2320import java .io .IOException ;
2421import java .io .InputStream ;
25- import java .io .OutputStream ;
2622import java .io .PrintStream ;
2723import java .nio .charset .StandardCharsets ;
2824import java .nio .file .Path ;
2925import java .nio .file .Paths ;
3026import java .util .Map ;
27+ import org .eclipse .jetty .http .HttpHeader ;
28+ import org .eclipse .jetty .io .Content ;
29+ import org .eclipse .jetty .server .Handler ;
3130import org .eclipse .jetty .server .Request ;
31+ import org .eclipse .jetty .server .Response ;
3232import org .eclipse .jetty .server .Server ;
33- import org .eclipse .jetty .server . handler . AbstractHandler ;
33+ import org .eclipse .jetty .util . Callback ;
3434
3535public class ConformanceServer {
3636
@@ -49,30 +49,30 @@ public static void main(String[] args) throws Exception {
4949 server .join ();
5050 }
5151
52- public static class ConformanceHandler extends AbstractHandler {
52+ public static class ConformanceHandler extends Handler . Abstract {
5353 @ Override
54- public void handle (
55- String target ,
56- Request baseRequest ,
57- HttpServletRequest request ,
58- HttpServletResponse response )
59- throws IOException , ServletException {
60- if ("/" .equals (target )) {
61- handleHealthCheck (response );
62- baseRequest .setHandled (true );
63- } else if ("/execute" .equals (target ) && "POST" .equals (request .getMethod ())) {
64- handleExecute (request , response );
65- baseRequest .setHandled (true );
54+ public boolean handle (Request request , Response response , Callback callback )
55+ throws IOException {
56+ if ("/" .equals (request .getHttpURI ().getPath ())) {
57+ handleHealthCheck (response , callback );
58+ return true ;
59+ } else if ("/execute" .equals (request .getHttpURI ().getPath ())
60+ && "POST" .equals (request .getMethod ())) {
61+ handleExecute (request , response , callback );
62+ return true ;
6663 }
64+ return false ;
6765 }
6866 }
6967
70- private static void handleExecute (HttpServletRequest request , HttpServletResponse response )
71- throws IOException {
68+ private static void handleExecute (Request request , Response response , Callback callback ) {
7269 ExecuteRequest executeRequest ;
73- try (InputStream is = request . getInputStream ( )) {
70+ try (InputStream is = Content . Source . asInputStream ( request )) {
7471 String requestBody = new String (is .readAllBytes (), StandardCharsets .UTF_8 );
7572 executeRequest = GSON .fromJson (requestBody , ExecuteRequest .class );
73+ } catch (IOException e ) {
74+ callback .failed (e );
75+ return ;
7676 }
7777
7878 // Tests should not be run in parallel, to ensure orderly input/output
@@ -106,22 +106,17 @@ private static void handleExecute(HttpServletRequest request, HttpServletRespons
106106 "exitCode" , exitCode );
107107 String jsonResponse = GSON .toJson (responseMap );
108108
109- response .setStatus (HttpServletResponse .SC_OK );
110- response .setContentType ("application/json" );
111- byte [] responseBytes = jsonResponse .getBytes (StandardCharsets .UTF_8 );
112- response .setContentLength (responseBytes .length );
109+ response .getHeaders ().put (HttpHeader .CONTENT_TYPE , "application/json" );
110+ Content .Sink .write (response , true , jsonResponse , callback );
113111
114- try (OutputStream os = response .getOutputStream ()) {
115- os .write (responseBytes );
116- }
117112 } finally {
118113 System .setOut (originalOut );
119114 System .setErr (originalErr );
120115 }
121116 }
122117
123- private static void handleHealthCheck (HttpServletResponse response ) throws IOException {
124- response .setStatus ( HttpServletResponse . SC_OK );
125- response . getWriter (). println ( "OK" );
118+ private static void handleHealthCheck (Response response , Callback callback ) throws IOException {
119+ response .getHeaders (). put ( HttpHeader . CONTENT_TYPE , "text/plain" );
120+ Content . Sink . write ( response , true , "OK" , callback );
126121 }
127122}
0 commit comments