Trillium

Language: Rust · View source on GitHub

Dockerfile

FROM rust:1-slim AS build
WORKDIR /src

# Cache dependencies with dummy main
COPY src/Servers/TrilliumServer/Cargo.toml .
RUN mkdir src && echo "fn main() {}" > src/main.rs && cargo build --release && rm -rf src target/release/.fingerprint/trillium-server-*

COPY src/Servers/TrilliumServer/src/ src/
RUN cargo build --release

FROM debian:bookworm-slim
COPY --from=build /src/target/release/trillium-server /usr/local/bin/
ENV HOST=0.0.0.0 PORT=8080
ENTRYPOINT ["trillium-server"]

Source

use std::fmt::Write;
use trillium::{Conn, Handler, Method};
use trillium_caching_headers::caching_headers;
use trillium_cookies::{CookiesConnExt, cookies};
use trillium_head::head;
use trillium_router::router;

async fn echo_body(mut conn: Conn) -> Conn {
    match conn.request_body().read_bytes().await {
        Ok(bytes) => conn.ok(bytes),
        Err(_) => conn.with_status(400),
    }
}

async fn echo_headers(conn: Conn) -> Conn {
    let body = conn.request_headers().to_string();
    conn.ok(body)
}

async fn echo_cookies(conn: Conn) -> Conn {
    let mut body = String::new();
    for cookie in conn.cookies().iter() {
        let _ = writeln!(body, "{}={}", cookie.name(), cookie.value());
    }
    conn.ok(body)
}

fn app() -> impl Handler {
    (
        head(),
        caching_headers(),
        cookies(),
        router()
            .get("/", "OK")
            .post("/", echo_body)
            .any(&[Method::Get, Method::Post], "/echo", echo_headers)
            .any(&[Method::Get, Method::Post], "/cookie", echo_cookies)
            .with_method_not_allowed(),
    )
}

fn main() {
    trillium_smol::run(app());
}

Test Results

Loading results...

Compliance

Smuggling

Malformed Input

Caching

Cookies