Jetty

Language: Java · View source on GitHub

Dockerfile

FROM maven:3.9-eclipse-temurin-21 AS build
WORKDIR /src
COPY src/Servers/JettyServer/pom.xml .
RUN mvn dependency:go-offline -q
COPY src/Servers/JettyServer/src/ src/
RUN mvn package -q -DskipTests

FROM eclipse-temurin:21-jre
WORKDIR /app
COPY --from=build /src/target/jetty-server-1.0.0.jar app.jar
ENTRYPOINT ["java", "-jar", "app.jar", "8080"]

Source

package server;

import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;

import org.eclipse.jetty.http.HttpField;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.Response;
import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.util.Callback;

public class Application extends Handler.Abstract {

    private static final ByteBuffer OK_BODY =
            ByteBuffer.wrap("OK".getBytes(StandardCharsets.UTF_8)).asReadOnlyBuffer();

    @Override
    public boolean handle(Request request, Response response, Callback callback) throws Exception {
        response.setStatus(200);
        response.getHeaders().put("Content-Type", "text/plain");

        if ("/cookie".equals(request.getHttpURI().getPath())) {
            StringBuilder sb = new StringBuilder();
            for (HttpField field : request.getHeaders()) {
                if ("Cookie".equalsIgnoreCase(field.getName())) {
                    for (String pair : field.getValue().split(";")) {
                        String trimmed = pair.stripLeading();
                        int eq = trimmed.indexOf('=');
                        if (eq > 0) {
                            sb.append(trimmed, 0, eq).append("=").append(trimmed.substring(eq + 1)).append("\n");
                        }
                    }
                }
            }
            byte[] cookieBody = sb.toString().getBytes(StandardCharsets.UTF_8);
            response.write(true, ByteBuffer.wrap(cookieBody), callback);
        } else if ("/echo".equals(request.getHttpURI().getPath())) {
            StringBuilder sb = new StringBuilder();
            for (HttpField field : request.getHeaders()) {
                sb.append(field.getName()).append(": ").append(field.getValue()).append("\n");
            }
            byte[] echoBody = sb.toString().getBytes(StandardCharsets.UTF_8);
            response.write(true, ByteBuffer.wrap(echoBody), callback);
        } else if ("POST".equals(request.getMethod())) {
            byte[] body = Request.asInputStream(request).readAllBytes();
            response.write(true, ByteBuffer.wrap(body), callback);
        } else {
            response.write(true, OK_BODY.slice(), callback);
        }
        return true;
    }

    public static void main(String[] args) throws Exception {
        int port = args.length > 0 ? Integer.parseInt(args[0]) : 9007;

        Server server = new Server();
        ServerConnector connector = new ServerConnector(server);
        connector.setHost("127.0.0.1");
        connector.setPort(port);
        server.addConnector(connector);
        server.setHandler(new Application());
        server.start();
        server.join();
    }
}

Test Results

Loading results...

Compliance

Smuggling

Malformed Input

Caching

Cookies