Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions sigstore-cli/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,7 @@ dependencies {
implementation(platform("com.google.oauth-client:google-oauth-client-bom:1.39.0"))
implementation("com.google.oauth-client:google-oauth-client")

implementation("org.eclipse.jetty:jetty-server:11.0.26")
implementation("org.eclipse.jetty:jetty-servlet:11.0.26")
implementation("org.eclipse.jetty:jetty-server:12.1.4")

implementation("org.slf4j:slf4j-simple:2.0.17")

Expand Down
57 changes: 26 additions & 31 deletions sigstore-cli/src/main/java/dev/sigstore/cli/ConformanceServer.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,21 +16,21 @@
package dev.sigstore.cli;

import com.google.gson.Gson;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintStream;
import java.nio.charset.StandardCharsets;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Map;
import org.eclipse.jetty.http.HttpHeader;
import org.eclipse.jetty.io.Content;
import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.Response;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.AbstractHandler;
import org.eclipse.jetty.util.Callback;

public class ConformanceServer {

Expand All @@ -49,30 +49,30 @@ public static void main(String[] args) throws Exception {
server.join();
}

public static class ConformanceHandler extends AbstractHandler {
public static class ConformanceHandler extends Handler.Abstract {
@Override
public void handle(
String target,
Request baseRequest,
HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException {
if ("/".equals(target)) {
handleHealthCheck(response);
baseRequest.setHandled(true);
} else if ("/execute".equals(target) && "POST".equals(request.getMethod())) {
handleExecute(request, response);
baseRequest.setHandled(true);
public boolean handle(Request request, Response response, Callback callback)
throws IOException {
if ("/".equals(request.getHttpURI().getPath())) {
handleHealthCheck(response, callback);
return true;
} else if ("/execute".equals(request.getHttpURI().getPath())
&& "POST".equals(request.getMethod())) {
handleExecute(request, response, callback);
return true;
}
return false;
}
}

private static void handleExecute(HttpServletRequest request, HttpServletResponse response)
throws IOException {
private static void handleExecute(Request request, Response response, Callback callback) {
ExecuteRequest executeRequest;
try (InputStream is = request.getInputStream()) {
try (InputStream is = Content.Source.asInputStream(request)) {
String requestBody = new String(is.readAllBytes(), StandardCharsets.UTF_8);
executeRequest = GSON.fromJson(requestBody, ExecuteRequest.class);
} catch (IOException e) {
callback.failed(e);
return;
}

// Tests should not be run in parallel, to ensure orderly input/output
Expand Down Expand Up @@ -106,22 +106,17 @@ private static void handleExecute(HttpServletRequest request, HttpServletRespons
"exitCode", exitCode);
String jsonResponse = GSON.toJson(responseMap);

response.setStatus(HttpServletResponse.SC_OK);
response.setContentType("application/json");
byte[] responseBytes = jsonResponse.getBytes(StandardCharsets.UTF_8);
response.setContentLength(responseBytes.length);
response.getHeaders().put(HttpHeader.CONTENT_TYPE, "application/json");
Content.Sink.write(response, true, jsonResponse, callback);

try (OutputStream os = response.getOutputStream()) {
os.write(responseBytes);
}
} finally {
System.setOut(originalOut);
System.setErr(originalErr);
}
}

private static void handleHealthCheck(HttpServletResponse response) throws IOException {
response.setStatus(HttpServletResponse.SC_OK);
response.getWriter().println("OK");
private static void handleHealthCheck(Response response, Callback callback) throws IOException {
response.getHeaders().put(HttpHeader.CONTENT_TYPE, "text/plain");
Content.Sink.write(response, true, "OK", callback);
}
}
3 changes: 1 addition & 2 deletions tuf-cli/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,7 @@ dependencies {
implementation(platform("com.google.oauth-client:google-oauth-client-bom:1.39.0"))
implementation("com.google.oauth-client:google-oauth-client")

implementation("org.eclipse.jetty:jetty-server:11.0.26")
implementation("org.eclipse.jetty:jetty-servlet:11.0.26")
implementation("org.eclipse.jetty:jetty-server:12.1.4")

implementation("org.slf4j:slf4j-simple:2.0.17")

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,21 +16,21 @@
package dev.sigstore.tuf.cli;

import com.google.gson.Gson;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintStream;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import org.eclipse.jetty.http.HttpHeader;
import org.eclipse.jetty.io.Content;
import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.Response;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.AbstractHandler;
import org.eclipse.jetty.util.Callback;

public class TufConformanceServer {

Expand All @@ -53,29 +53,30 @@ public static void main(String[] args) throws Exception {
server.join();
}

public static class TufConformanceHandler extends AbstractHandler {
public static class TufConformanceHandler extends Handler.Abstract {
@Override
public void handle(
String target,
Request baseRequest,
HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException {
if ("/".equals(target)) {
handleHealthCheck(response);
} else if ("/execute".equals(target) && "POST".equals(request.getMethod())) {
handleExecute(request, response);
public boolean handle(Request request, Response response, Callback callback)
throws IOException {
if ("/".equals(request.getHttpURI().getPath())) {
handleHealthCheck(response, callback);
return true;
} else if ("/execute".equals(request.getHttpURI().getPath())
&& "POST".equals(request.getMethod())) {
handleExecute(request, response, callback);
return true;
}
baseRequest.setHandled(true);
return false;
}
}

private static void handleExecute(HttpServletRequest request, HttpServletResponse response)
throws IOException {
private static void handleExecute(Request request, Response response, Callback callback) {
ExecuteRequest executeRequest;
try (InputStream is = request.getInputStream()) {
try (InputStream is = Content.Source.asInputStream(request)) {
String requestBody = new String(is.readAllBytes(), StandardCharsets.UTF_8);
executeRequest = GSON.fromJson(requestBody, ExecuteRequest.class);
} catch (IOException e) {
callback.failed(e);
return;
}

// Tests should not be run in parallel, to ensure orderly input/output
Expand Down Expand Up @@ -106,14 +107,8 @@ private static void handleExecute(HttpServletRequest request, HttpServletRespons
"exitCode", exitCode);
String jsonResponse = GSON.toJson(responseMap);

response.setStatus(HttpServletResponse.SC_OK);
response.setContentType("application/json");
byte[] responseBytes = jsonResponse.getBytes(StandardCharsets.UTF_8);
response.setContentLength(responseBytes.length);

try (OutputStream os = response.getOutputStream()) {
os.write(responseBytes);
}
response.getHeaders().put(HttpHeader.CONTENT_TYPE, "application/json");
Content.Sink.write(response, true, jsonResponse, callback);
} finally {
if (!debug) {
System.setOut(originalOut);
Expand All @@ -122,8 +117,8 @@ private static void handleExecute(HttpServletRequest request, HttpServletRespons
}
}

private static void handleHealthCheck(HttpServletResponse response) throws IOException {
response.setStatus(HttpServletResponse.SC_OK);
response.getWriter().println("OK");
private static void handleHealthCheck(Response response, Callback callback) throws IOException {
response.getHeaders().put(HttpHeader.CONTENT_TYPE, "text/plain");
Content.Sink.write(response, true, "OK", callback);
}
}
Loading